Hash tables templates, take 2. More...
Go to the source code of this file.
Defines | |
#define | HTABLE2_H |
Defined when <sofia-sip/htable2.h> has been included. | |
#define | HTABLE2_MIN_SIZE |
Minimum size of hash table. | |
#define | HTABLE2_DECLARE2(type, sname, pr, entrytype, sizetype) |
Declare hash table structure type. | |
#define | HTABLE2_SCOPE |
Default scope for hash table functions. | |
#define | HTABLE2_PROTOS2(type, prefix, pr, entrytype, sizetype) |
Prototypes for hash table. | |
#define | HTABLE2_BODIES2(type, prefix, pr, entrytype, sizetype,hfun, is_used, reclaim, is_equal, halloc) |
Hash table implementation. |
Hash tables templates, take 2.
Note: this version stores the given element types as entries (instead of always storing a pointer to element). It can be used without <sofia-sip/su_alloc.h>.
This file contain a hash table template for C. The hash tables are resizeable, and they usually contain pointers to entries. The declaration for template datatypes is instantiated with macro HTABLE2_DECLARE2(). The prototypes for hashing functions are instantiated with macro HTABLE2_PROTOS2(). The implementation is instantiated with macro HTABLE2_BODIES2().
The hash table template is most efficient when the hash value is precalculated and stored in each entry. The hash "function" given to the HTABLE2_BODIES2() would then be something like macro
#define ENTRY_HASH(e) ((e).e_hash_value)
When a entry with new identical key is added to the table, it can be either inserted (before any other entry with same key value) or appended.
Example code can be found from <htable_test.c>.
#define HTABLE2_BODIES2 | ( | type, | ||
prefix, | ||||
pr, | ||||
entrytype, | ||||
sizetype, | ||||
hfun, | ||||
is_used, | ||||
reclaim, | ||||
is_equal, | ||||
halloc | ||||
) |
Hash table implementation.
The macro HTABLE2_BODIES2() expands the hash table functions. The function and type names start with prefix, the field names start with pr. The entry type is entrytype. The function (or macro) name returning hash value of each entry is given as hfun.
type | hash table type | |
prefix | function prefix for hash table | |
pr | field prefix for hash table | |
entrytype | type of entry element | |
sizetype | size_t type | |
hfun | function or macro returning hash value of entry | |
is_used | function or macro returning true if entry is occupied | |
reclaim | function or macro zeroing entry | |
is_equal | equality test | |
halloc | function allocating or freeing memory |
#define HTABLE2_DECLARE2 | ( | type, | ||
sname, | ||||
pr, | ||||
entrytype, | ||||
sizetype | ||||
) |
Declare hash table structure type.
The macro HTABLE2_DECLARE2() expands to a declaration for hash table structure. The its typedef will be type, the field names start with pr. The entry type is entrytype.
type | hash table typedef | |
sname | name of struct | |
pr | hash table field prefix | |
entrytype | entry type | |
sizetype | type of size variables |
#define HTABLE2_H |
Defined when <sofia-sip/htable2.h> has been included.
#define HTABLE2_PROTOS2 | ( | type, | ||
prefix, | ||||
pr, | ||||
entrytype, | ||||
sizetype | ||||
) |
Prototypes for hash table.
The macro HTABLE2_PROTOS2() expands to the prototypes of hash table functions. The function and type names start with prefix, the field names start with pr. The entry type is entrytype.
type | hash table typedef | |
prefix | function prefix | |
pr | hash table field prefix (not used) | |
entrytype | entry type | |
sizetype | type of size variables |
#define HTABLE2_SCOPE |
Default scope for hash table functions.