return table[idx].name; \
}
+#define TABLE_TYPE_VALUE_INDEX_FUNC(_our_table_type, _our_name, _our_value_type) \
+char const *_our_name(_our_table_type table, size_t table_len, _our_value_type value, char const *def) \
+{ \
+ if (value >= table_len) return def; \
+ return table[value].name; \
+}
+
/** Convert a string to a value using a lexicographically sorted table
*
* @param[in] table to search in.
* definitions for flag values.
*/
TABLE_TYPE_VALUE_INDEX_BIT_FIELD_FUNC(fr_table_num_indexed_bit_pos_t const *, fr_table_indexed_str_by_bit_field, uint64_t)
+
+/*
+ * Array lookup based on numeric value
+ */
+TABLE_TYPE_VALUE_INDEX_BIT_FIELD_FUNC(fr_table_num_indexed_t const *, fr_table_indexed_str_by_num, unsigned int)
uint64_t value;
} fr_table_num_indexed_bit_pos_t;
+/** An element in a table indexed by numeric value
+ *
+ * i.e. if the value is 0, we return the string mapped to the first element of the table.
+ */
+typedef struct {
+ char const *name;
+ unsigned int value;
+} fr_table_num_indexed_t;
+
/** Macro to use as dflt
*
*/
fr_table_ptr_sorted_t * : fr_table_sorted_ptr_by_str, \
fr_table_ptr_ordered_t * : fr_table_ordered_ptr_by_str, \
fr_table_num_indexed_bit_pos_t * : fr_table_ordered_num_by_str, \
- fr_table_num_indexed_bit_pos_t const * : fr_table_ordered_num_by_str \
+ fr_table_num_indexed_bit_pos_t const * : fr_table_ordered_num_by_str, \
+ fr_table_num_indexed_t * : fr_table_ordered_num_by_str, \
+ fr_table_num_indexed_t const * : fr_table_ordered_num_by_str \
)(_table, _table ## _len, _name, _def)
int fr_table_sorted_num_by_substr(fr_table_num_sorted_t const *table, size_t table_len,
fr_table_ptr_sorted_t * : fr_table_sorted_ptr_by_substr, \
fr_table_ptr_ordered_t * : fr_table_ordered_ptr_by_substr, \
fr_table_num_indexed_bit_pos_t * : fr_table_ordered_num_by_substr, \
- fr_table_num_indexed_bit_pos_t const * : fr_table_ordered_num_by_substr \
+ fr_table_num_indexed_bit_pos_t const * : fr_table_ordered_num_by_substr, \
+ fr_table_num_indexed_t * : fr_table_ordered_num_by_substr, \
+ fr_table_num_indexed_t const * : fr_table_ordered_num_by_substr \
)(_table, _table ## _len, _name, _name_len, _def)
int fr_table_sorted_num_by_longest_prefix(size_t *match_len, fr_table_num_sorted_t const *table, size_t table_len,
fr_table_ptr_sorted_t * : fr_table_sorted_ptr_by_longest_prefix, \
fr_table_ptr_ordered_t * : fr_table_ordered_ptr_by_longest_prefix, \
fr_table_num_indexed_bit_pos_t * : fr_table_ordered_num_by_longest_prefix, \
- fr_table_num_indexed_bit_pos_t const * : fr_table_ordered_num_by_longest_prefix \
+ fr_table_num_indexed_bit_pos_t const * : fr_table_ordered_num_by_longest_prefix, \
+ fr_table_num_indexed_t * : fr_table_ordered_num_by_longest_prefix, \
+ fr_table_num_indexed_t const * : fr_table_ordered_num_by_longest_prefix \
)(_match_len, _table, _table ## _len, _name, _name_len, _def)
char const *fr_table_ordered_str_by_num(fr_table_num_ordered_t const *table, size_t table_len,
char const *fr_table_indexed_str_by_bit_field(fr_table_num_indexed_bit_pos_t const *table, size_t table_len,
uint64_t number, char const *def);
+char const *fr_table_indexed_str_by_num(fr_table_num_indexed_t const *table, size_t table_len,
+ unsigned int number, char const *def);
+
/** Convert an integer to a string
*
* @param[in] _table to search in.
fr_table_ptr_sorted_t * : fr_table_sorted_str_by_ptr, \
fr_table_ptr_ordered_t * : fr_table_ordered_str_by_ptr, \
fr_table_num_indexed_bit_pos_t * : fr_table_indexed_str_by_bit_field, \
- fr_table_num_indexed_bit_pos_t const * : fr_table_indexed_str_by_bit_field \
+ fr_table_num_indexed_bit_pos_t const * : fr_table_indexed_str_by_bit_field, \
+ fr_table_num_indexed_t * : fr_table_indexed_str_by_num, \
+ fr_table_num_indexed_t const * : fr_table_indexed_str_by_num \
)(_table, _table ## _len, _number, _def)
#ifdef __cplusplus