The FreeRADIUS server  $Id: 15bac2a4c627c01d1aa2047687b3418955ac7f00 $
Data Structures | Macros | Functions
table.h File Reference

Lookup table functions. More...

#include <stddef.h>
#include <stdint.h>
#include <sys/types.h>
+ Include dependency graph for table.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  fr_table_elem_t
 
struct  fr_table_num_indexed_bit_pos_t
 An element in a table indexed by bit position. More...
 
struct  fr_table_num_indexed_t
 An element in a table indexed by numeric value. More...
 
struct  fr_table_num_ordered_t
 An element in an arbitrarily ordered array of name to num mappings. More...
 
struct  fr_table_num_sorted_t
 An element in a lexicographically sorted array of name to num mappings. More...
 
struct  fr_table_ptr_ordered_t
 An element in an arbitrarily ordered array of name to ptr mappings. More...
 
struct  fr_table_ptr_sorted_t
 An element in a lexicographically sorted array of name to ptr mappings. More...
 

Macros

#define fr_table_max_needle_len(_table)
 
#define fr_table_str_by_str_value(_table, _str_value, _def)
 Brute force search a sorted or ordered ptr table, assuming the pointers are strings. More...
 
#define fr_table_str_by_value(_table, _number, _def)
 Convert an integer to a string. More...
 
#define fr_table_value_by_longest_prefix(_match_len, _table, _name, _name_len, _def)
 Find the longest string match using a sorted or ordered table. More...
 
#define fr_table_value_by_str(_table, _name, _def)
 Convert a string to a value using a sorted or ordered table. More...
 
#define fr_table_value_by_substr(_table, _name, _name_len, _def)
 Convert a partial string to a value using an ordered or sorted table. More...
 
#define NAME_NUMBER_NOT_FOUND   INT32_MIN
 Macro to use as dflt. More...
 
#define TABLE_TYPE_NEEDLE_LEN_FUNC(_our_table_type, _our_name)
 

Functions

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. More...
 
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)
 
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)
 
int fr_table_ordered_num_by_str (fr_table_num_ordered_t const *table, size_t table_len, char const *name, int def)
 
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)
 
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)
 
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_substr (fr_table_ptr_ordered_t const *table, size_t table_len, char const *name, ssize_t name_len, void const *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)
 
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)
 
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)
 
int fr_table_sorted_num_by_str (fr_table_num_sorted_t const *table, size_t table_len, char const *name, int def)
 
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)
 
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)
 
void * fr_table_sorted_ptr_by_str (fr_table_ptr_sorted_t const *table, size_t table_len, char const *name, void 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)
 
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)
 

Detailed Description

Lookup table functions.

Id
1ccb12f6bd550c64587949f517ae5e396663ac34

Definition in file table.h.


Data Structure Documentation

◆ fr_table_elem_t

struct fr_table_elem_t

Definition at line 37 of file table.h.

Data Fields
size_t len Literal string length.
char const * str Literal string.

◆ fr_table_num_indexed_bit_pos_t

struct fr_table_num_indexed_bit_pos_t

An element in a table indexed by bit position.

i.e. if only the first bit is set in a bitfield, the entry at index 0 will be returned.

Definition at line 79 of file table.h.

+ Collaboration diagram for fr_table_num_indexed_bit_pos_t:
Data Fields
fr_table_elem_t name
uint64_t value

◆ fr_table_num_indexed_t

struct fr_table_num_indexed_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.

Definition at line 88 of file table.h.

+ Collaboration diagram for fr_table_num_indexed_t:
Data Fields
fr_table_elem_t name
unsigned int value

◆ fr_table_num_ordered_t

struct fr_table_num_ordered_t

An element in an arbitrarily ordered array of name to num mappings.

Definition at line 53 of file table.h.

+ Collaboration diagram for fr_table_num_ordered_t:
Data Fields
fr_table_elem_t name
int value

◆ fr_table_num_sorted_t

struct fr_table_num_sorted_t

An element in a lexicographically sorted array of name to num mappings.

Definition at line 45 of file table.h.

+ Collaboration diagram for fr_table_num_sorted_t:
Data Fields
fr_table_elem_t name
int value

◆ fr_table_ptr_ordered_t

struct fr_table_ptr_ordered_t

An element in an arbitrarily ordered array of name to ptr mappings.

Definition at line 69 of file table.h.

+ Collaboration diagram for fr_table_ptr_ordered_t:
Data Fields
fr_table_elem_t name
void const * value

◆ fr_table_ptr_sorted_t

struct fr_table_ptr_sorted_t

An element in a lexicographically sorted array of name to ptr mappings.

Definition at line 61 of file table.h.

+ Collaboration diagram for fr_table_ptr_sorted_t:
Data Fields
fr_table_elem_t name
void const * value

Macro Definition Documentation

◆ fr_table_max_needle_len

#define fr_table_max_needle_len (   _table)
Value:
_Generic((_table), \
fr_table_num_sorted_t const * : fr_table_num_sorted_max_needle_len, \
fr_table_num_ordered_t const * : fr_table_num_ordered_max_needle_len, \
fr_table_num_sorted_t * : fr_table_num_sorted_max_needle_len, \
fr_table_num_ordered_t * : fr_table_num_ordered_max_needle_len, \
fr_table_ptr_sorted_t const * : fr_table_ptr_sorted_max_needle_len, \
fr_table_ptr_ordered_t const * : fr_table_ptr_ordered_max_needle_len, \
fr_table_ptr_sorted_t * : fr_table_ptr_sorted_max_needle_len, \
fr_table_ptr_ordered_t * : fr_table_ptr_ordered_max_needle_len, \
fr_table_num_indexed_bit_pos_t * : fr_table_num_indexed_bit_pos_max_needle_len, \
fr_table_num_indexed_bit_pos_t const * : fr_table_num_indexed_bit_pos_max_needle_len, \
fr_table_num_indexed_t * : fr_table_num_indexed_max_needle_len, \
fr_table_num_indexed_t const * : fr_table_num_indexed_max_needle_len \
)(_table, _table ## _len)
An element in a table indexed by bit position.
Definition: table.h:79
An element in a table indexed by numeric value.
Definition: table.h:88
An element in an arbitrarily ordered array of name to num mappings.
Definition: table.h:53
An element in a lexicographically sorted array of name to num mappings.
Definition: table.h:45
An element in an arbitrarily ordered array of name to ptr mappings.
Definition: table.h:69
An element in a lexicographically sorted array of name to ptr mappings.
Definition: table.h:61

Definition at line 284 of file table.h.

◆ fr_table_str_by_str_value

#define fr_table_str_by_str_value (   _table,
  _str_value,
  _def 
)
Value:
_Generic((_table), \
fr_table_ptr_sorted_t const * : _fr_table_ptr_by_str_value((fr_table_ptr_sorted_t const *)_table, _table ## _len, _str_value, _def), \
fr_table_ptr_ordered_t const * : _fr_table_ptr_by_str_value((fr_table_ptr_sorted_t const *)_table, _table ## _len, _str_value, _def), \
fr_table_ptr_sorted_t * : _fr_table_ptr_by_str_value((fr_table_ptr_sorted_t const *)_table, _table ## _len, _str_value, _def), \
fr_table_ptr_ordered_t * : _fr_table_ptr_by_str_value((fr_table_ptr_sorted_t const *)_table, _table ## _len, _str_value, _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.
Definition: table.c:42

Brute force search a sorted or ordered ptr table, assuming the pointers are strings.

Parameters
[in]_tableto search in.
[in]_str_valueto compare against the ptr field.
[in]_defdefault value.

Definition at line 106 of file table.h.

◆ fr_table_str_by_value

#define fr_table_str_by_value (   _table,
  _number,
  _def 
)
Value:
_Generic((_table), \
)(_table, _table ## _len, _number, _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)
char const * fr_table_ordered_str_by_num(fr_table_num_ordered_t const *table, size_t table_len, int number, char 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)
char const * fr_table_sorted_str_by_num(fr_table_num_sorted_t const *table, size_t table_len, int 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)
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)

Convert an integer to a string.

Parameters
[in]_tableto search in.
[in]_numberto resolve to a string.
[in]_defDefault string to return if there's no match.
Returns
  • _def if _number name matched no entries in the table.
  • the string value of the matching entry.

Definition at line 253 of file table.h.

◆ fr_table_value_by_longest_prefix

#define fr_table_value_by_longest_prefix (   _match_len,
  _table,
  _name,
  _name_len,
  _def 
)
Value:
_Generic((_table), \
)(_match_len, _table, _table ## _len, _name, _name_len, _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_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)
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)
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)

Find the longest string match using a sorted or ordered table.

Parameters
[out]_match_lenHow much of the input string matched.
[in]_tableto search in.
[in]_nameto resolve to a number.
[in]_name_lenThe amount of name to match.
[in]_defDefault value if no entry matched.
Returns
  • _def if name matched no entries in the table.
  • the value of the matching entry.

Definition at line 213 of file table.h.

◆ fr_table_value_by_str

#define fr_table_value_by_str (   _table,
  _name,
  _def 
)
Value:
_Generic((_table), \
)(_table, _table ## _len, _name, _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_sorted_ptr_by_str(fr_table_ptr_sorted_t const *table, size_t table_len, char const *name, void 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)
int fr_table_ordered_num_by_str(fr_table_num_ordered_t const *table, size_t table_len, char const *name, int def)

Convert a string to a value using a sorted or ordered table.

Parameters
[in]_tableto search in.
[in]_nameto resolve to a number.
[in]_defDefault value if no entry matched.
Returns
  • _def if name matched no entries in the table.
  • the numeric value of the matching entry.

Definition at line 134 of file table.h.

◆ fr_table_value_by_substr

#define fr_table_value_by_substr (   _table,
  _name,
  _name_len,
  _def 
)
Value:
_Generic((_table), \
)(_table, _table ## _len, _name, _name_len, _def)
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)
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)
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)
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)

Convert a partial string to a value using an ordered or sorted table.

Parameters
[in]_tableto search in.
[in]_nameto resolve to a number.
[in]_name_lenThe amount of name to match. If < 0, the length of the name in the table element will be used as the maximum match length.
[in]_defDefault value if no entry matched.
Returns
  • _def if name matched no entries in the table.
  • the numeric value of the matching entry.

Definition at line 174 of file table.h.

◆ NAME_NUMBER_NOT_FOUND

#define NAME_NUMBER_NOT_FOUND   INT32_MIN

Macro to use as dflt.

Definition at line 96 of file table.h.

◆ TABLE_TYPE_NEEDLE_LEN_FUNC

#define TABLE_TYPE_NEEDLE_LEN_FUNC (   _our_table_type,
  _our_name 
)
Value:
static inline size_t _our_name(_our_table_type table, size_t table_len) \
{ \
size_t i, max = 0; \
for (i = 0; i < table_len; i++) if (table->name.len > max) max = table->name.len; \
return max; \
}

Definition at line 269 of file table.h.

Function Documentation

◆ _fr_table_ptr_by_str_value()

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.

Parameters
[in]tableto search in.
[in]table_lenNumber of elements in the table.
[in]str_valto compare against the ptr field.
[in]defdefault value.

Definition at line 42 of file table.c.

+ Here is the call graph for this function:

◆ fr_table_indexed_str_by_bit_field()

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 
)

◆ fr_table_indexed_str_by_num()

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 
)

◆ fr_table_ordered_num_by_longest_prefix()

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 
)

◆ fr_table_ordered_num_by_str()

int fr_table_ordered_num_by_str ( fr_table_num_ordered_t const *  table,
size_t  table_len,
char const *  name,
int  def 
)

◆ fr_table_ordered_num_by_substr()

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 
)

◆ fr_table_ordered_ptr_by_longest_prefix()

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 
)

◆ fr_table_ordered_ptr_by_str()

void* fr_table_ordered_ptr_by_str ( fr_table_ptr_ordered_t const *  table,
size_t  table_len,
char const *  name,
void const *  def 
)

◆ fr_table_ordered_ptr_by_substr()

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 
)

◆ fr_table_ordered_str_by_num()

char const* fr_table_ordered_str_by_num ( fr_table_num_ordered_t const *  table,
size_t  table_len,
int  number,
char const *  def 
)
+ Here is the caller graph for this function:

◆ fr_table_ordered_str_by_ptr()

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 
)

◆ fr_table_sorted_num_by_longest_prefix()

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 
)

◆ fr_table_sorted_num_by_str()

int fr_table_sorted_num_by_str ( fr_table_num_sorted_t const *  table,
size_t  table_len,
char const *  name,
int  def 
)

◆ fr_table_sorted_num_by_substr()

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 
)

◆ fr_table_sorted_ptr_by_longest_prefix()

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 
)

◆ fr_table_sorted_ptr_by_str()

void* fr_table_sorted_ptr_by_str ( fr_table_ptr_sorted_t const *  table,
size_t  table_len,
char const *  name,
void const *  def 
)

◆ fr_table_sorted_ptr_by_substr()

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 
)

◆ fr_table_sorted_str_by_num()

char const* fr_table_sorted_str_by_num ( fr_table_num_sorted_t const *  table,
size_t  table_len,
int  number,
char const *  def 
)

◆ fr_table_sorted_str_by_ptr()

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 
)