27 RCSIDH(table_h,
"$Id: 1ccb12f6bd550c64587949f517ae5e396663ac34 $")
35 #include <sys/types.h>
96 #define NAME_NUMBER_NOT_FOUND INT32_MIN
106 #define fr_table_str_by_str_value(_table, _str_value, _def) \
108 fr_table_ptr_sorted_t const * : _fr_table_ptr_by_str_value((fr_table_ptr_sorted_t const *)_table, _table ## _len, _str_value, _def), \
109 fr_table_ptr_ordered_t const * : _fr_table_ptr_by_str_value((fr_table_ptr_sorted_t const *)_table, _table ## _len, _str_value, _def), \
110 fr_table_ptr_sorted_t * : _fr_table_ptr_by_str_value((fr_table_ptr_sorted_t const *)_table, _table ## _len, _str_value, _def), \
111 fr_table_ptr_ordered_t * : _fr_table_ptr_by_str_value((fr_table_ptr_sorted_t const *)_table, _table ## _len, _str_value, _def))
114 char const *
name,
int def);
117 char const *
name,
int def);
120 char const *
name,
void const *def);
123 char const *
name,
void const *def);
134 #define fr_table_value_by_str(_table, _name, _def) \
136 fr_table_num_sorted_t const * : fr_table_sorted_num_by_str, \
137 fr_table_num_ordered_t const * : fr_table_ordered_num_by_str, \
138 fr_table_num_sorted_t * : fr_table_sorted_num_by_str, \
139 fr_table_num_ordered_t * : fr_table_ordered_num_by_str, \
140 fr_table_ptr_sorted_t const * : fr_table_sorted_ptr_by_str, \
141 fr_table_ptr_ordered_t const * : fr_table_ordered_ptr_by_str, \
142 fr_table_ptr_sorted_t * : fr_table_sorted_ptr_by_str, \
143 fr_table_ptr_ordered_t * : fr_table_ordered_ptr_by_str, \
144 fr_table_num_indexed_bit_pos_t * : fr_table_ordered_num_by_str, \
145 fr_table_num_indexed_bit_pos_t const * : fr_table_ordered_num_by_str, \
146 fr_table_num_indexed_t * : fr_table_ordered_num_by_str, \
147 fr_table_num_indexed_t const * : fr_table_ordered_num_by_str \
148 )(_table, _table ## _len, _name, _def)
157 char const *
name,
ssize_t name_len,
void const *def);
160 char const *
name,
ssize_t name_len,
void const *def);
174 #define fr_table_value_by_substr(_table, _name, _name_len, _def) \
176 fr_table_num_sorted_t const * : fr_table_sorted_num_by_substr, \
177 fr_table_num_ordered_t const * : fr_table_ordered_num_by_substr, \
178 fr_table_num_sorted_t * : fr_table_sorted_num_by_substr, \
179 fr_table_num_ordered_t * : fr_table_ordered_num_by_substr, \
180 fr_table_ptr_sorted_t const * : fr_table_sorted_ptr_by_substr, \
181 fr_table_ptr_ordered_t const * : fr_table_ordered_ptr_by_substr, \
182 fr_table_ptr_sorted_t * : fr_table_sorted_ptr_by_substr, \
183 fr_table_ptr_ordered_t * : fr_table_ordered_ptr_by_substr, \
184 fr_table_num_indexed_bit_pos_t * : fr_table_ordered_num_by_substr, \
185 fr_table_num_indexed_bit_pos_t const * : fr_table_ordered_num_by_substr, \
186 fr_table_num_indexed_t * : fr_table_ordered_num_by_substr, \
187 fr_table_num_indexed_t const * : fr_table_ordered_num_by_substr \
188 )(_table, _table ## _len, _name, _name_len, _def)
197 char const *
name,
ssize_t name_len,
void const *def);
200 char const *
name,
ssize_t name_len,
void const *def);
213 #define fr_table_value_by_longest_prefix(_match_len, _table, _name, _name_len, _def) \
215 fr_table_num_sorted_t const * : fr_table_sorted_num_by_longest_prefix, \
216 fr_table_num_ordered_t const * : fr_table_ordered_num_by_longest_prefix, \
217 fr_table_num_sorted_t * : fr_table_sorted_num_by_longest_prefix, \
218 fr_table_num_ordered_t * : fr_table_ordered_num_by_longest_prefix, \
219 fr_table_ptr_sorted_t const * : fr_table_sorted_ptr_by_longest_prefix, \
220 fr_table_ptr_ordered_t const * : fr_table_ordered_ptr_by_longest_prefix, \
221 fr_table_ptr_sorted_t * : fr_table_sorted_ptr_by_longest_prefix, \
222 fr_table_ptr_ordered_t * : fr_table_ordered_ptr_by_longest_prefix, \
223 fr_table_num_indexed_bit_pos_t * : fr_table_ordered_num_by_longest_prefix, \
224 fr_table_num_indexed_bit_pos_t const * : fr_table_ordered_num_by_longest_prefix, \
225 fr_table_num_indexed_t * : fr_table_ordered_num_by_longest_prefix, \
226 fr_table_num_indexed_t const * : fr_table_ordered_num_by_longest_prefix \
227 )(_match_len, _table, _table ## _len, _name, _name_len, _def)
230 int number,
char const *def);
232 int number,
char const *def);
234 void const *ptr,
char const *def);
236 void const *ptr,
char const *def);
239 uint64_t number,
char const *def);
242 unsigned int number,
char const *def);
253 #define fr_table_str_by_value(_table, _number, _def) \
255 fr_table_num_sorted_t const * : fr_table_sorted_str_by_num, \
256 fr_table_num_ordered_t const * : fr_table_ordered_str_by_num, \
257 fr_table_num_sorted_t * : fr_table_sorted_str_by_num, \
258 fr_table_num_ordered_t * : fr_table_ordered_str_by_num, \
259 fr_table_ptr_sorted_t const * : fr_table_sorted_str_by_ptr, \
260 fr_table_ptr_ordered_t const * : fr_table_ordered_str_by_ptr, \
261 fr_table_ptr_sorted_t * : fr_table_sorted_str_by_ptr, \
262 fr_table_ptr_ordered_t * : fr_table_ordered_str_by_ptr, \
263 fr_table_num_indexed_bit_pos_t * : fr_table_indexed_str_by_bit_field, \
264 fr_table_num_indexed_bit_pos_t const * : fr_table_indexed_str_by_bit_field, \
265 fr_table_num_indexed_t * : fr_table_indexed_str_by_num, \
266 fr_table_num_indexed_t const * : fr_table_indexed_str_by_num \
267 )(_table, _table ## _len, _number, _def)
269 #define TABLE_TYPE_NEEDLE_LEN_FUNC(_our_table_type, _our_name) \
270 static inline size_t _our_name(_our_table_type table, size_t table_len) \
273 for (i = 0; i < table_len; i++) if (table->name.len > max) max = table->name.len; \
284 #define fr_table_max_needle_len(_table) \
286 fr_table_num_sorted_t const * : fr_table_num_sorted_max_needle_len, \
287 fr_table_num_ordered_t const * : fr_table_num_ordered_max_needle_len, \
288 fr_table_num_sorted_t * : fr_table_num_sorted_max_needle_len, \
289 fr_table_num_ordered_t * : fr_table_num_ordered_max_needle_len, \
290 fr_table_ptr_sorted_t const * : fr_table_ptr_sorted_max_needle_len, \
291 fr_table_ptr_ordered_t const * : fr_table_ptr_ordered_max_needle_len, \
292 fr_table_ptr_sorted_t * : fr_table_ptr_sorted_max_needle_len, \
293 fr_table_ptr_ordered_t * : fr_table_ptr_ordered_max_needle_len, \
294 fr_table_num_indexed_bit_pos_t * : fr_table_num_indexed_bit_pos_max_needle_len, \
295 fr_table_num_indexed_bit_pos_t const * : fr_table_num_indexed_bit_pos_max_needle_len, \
296 fr_table_num_indexed_t * : fr_table_num_indexed_max_needle_len, \
297 fr_table_num_indexed_t const * : fr_table_num_indexed_max_needle_len \
298 )(_table, _table ## _len)
int fr_table_ordered_num_by_substr(fr_table_num_ordered_t const *table, size_t table_len, char const *name, ssize_t name_len, int def)
char const * fr_table_sorted_str_by_ptr(fr_table_ptr_sorted_t const *table, size_t table_len, void const *ptr, char const *def)
int fr_table_ordered_num_by_longest_prefix(size_t *match_len, fr_table_num_ordered_t const *table, size_t table_len, char const *name, ssize_t name_len, int def)
void * fr_table_ordered_ptr_by_str(fr_table_ptr_ordered_t const *table, size_t table_len, char const *name, void const *def)
void * fr_table_ordered_ptr_by_longest_prefix(size_t *match_len, fr_table_ptr_ordered_t const *table, size_t table_len, char const *name, ssize_t name_len, void const *def)
#define TABLE_TYPE_NEEDLE_LEN_FUNC(_our_table_type, _our_name)
char const * str
Literal string.
size_t len
Literal string length.
int fr_table_sorted_num_by_substr(fr_table_num_sorted_t const *table, size_t table_len, char const *name, ssize_t name_len, int def)
char const * fr_table_ordered_str_by_num(fr_table_num_ordered_t const *table, size_t table_len, int number, char const *def)
void * fr_table_sorted_ptr_by_str(fr_table_ptr_sorted_t const *table, size_t table_len, char const *name, void const *def)
char const * fr_table_ordered_str_by_ptr(fr_table_ptr_ordered_t const *table, size_t table_len, void const *ptr, char const *def)
void * fr_table_sorted_ptr_by_substr(fr_table_ptr_sorted_t const *table, size_t table_len, char const *name, ssize_t name_len, void const *def)
char const * fr_table_sorted_str_by_num(fr_table_num_sorted_t const *table, size_t table_len, int number, char const *def)
int fr_table_sorted_num_by_str(fr_table_num_sorted_t const *table, size_t table_len, char const *name, int 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)
void * fr_table_ordered_ptr_by_substr(fr_table_ptr_ordered_t const *table, size_t table_len, char const *name, ssize_t name_len, void const *def)
int fr_table_ordered_num_by_str(fr_table_num_ordered_t const *table, size_t table_len, char const *name, int def)
char const * _fr_table_ptr_by_str_value(fr_table_ptr_sorted_t const *table, size_t table_len, char const *str_val, char const *def)
Brute force search a sorted or ordered ptr table, assuming the pointers are strings.
void * fr_table_sorted_ptr_by_longest_prefix(size_t *match_len, fr_table_ptr_sorted_t const *table, size_t table_len, char const *name, ssize_t name_len, void const *def)
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)
int fr_table_sorted_num_by_longest_prefix(size_t *match_len, fr_table_num_sorted_t const *table, size_t table_len, char const *name, ssize_t name_len, int def)
An element in a table indexed by bit position.
An element in a table indexed by numeric value.
An element in an arbitrarily ordered array of name to num mappings.
An element in a lexicographically sorted array of name to num mappings.
An element in an arbitrarily ordered array of name to ptr mappings.
An element in a lexicographically sorted array of name to ptr mappings.