|
cctools
|
Go to the source code of this file.
Macros | |
| #define | HASH_TABLE_ITERATE(table, key, value) hash_table_firstkey(table); while(hash_table_nextkey(table,&key,(void**)&value)) |
| Utility macro to simplify common case of iterating over a hash table. More... | |
Typedefs | |
| typedef unsigned(* | hash_func_t) (const char *key) |
| The type signature for a hash function given to hash_table_create. More... | |
Functions | |
| struct hash_table * | hash_table_create (int buckets, hash_func_t func) |
| Create a new hash table. More... | |
| void | hash_table_clear (struct hash_table *h, void(*delete_func)(void *)) |
| Remove all entries from an hash table. More... | |
| void | hash_table_delete (struct hash_table *h) |
| Delete a hash table. More... | |
| int | hash_table_size (struct hash_table *h) |
| Count the entries in a hash table. More... | |
| int | hash_table_insert (struct hash_table *h, const char *key, const void *value) |
| Insert a key and value. More... | |
| void * | hash_table_lookup (struct hash_table *h, const char *key) |
| Look up a value by key. More... | |
| void * | hash_table_remove (struct hash_table *h, const char *key) |
| Remove a value by key. More... | |
| void | hash_table_firstkey (struct hash_table *h) |
| Begin iteration over all keys. More... | |
| int | hash_table_nextkey (struct hash_table *h, char **key, void **value) |
| Continue iteration over all keys. More... | |
| void | hash_table_randomkey (struct hash_table *h, int *offset_bookkeep) |
| Begin iteration over all keys from a random offset. More... | |
| int | hash_table_nextkey_with_offset (struct hash_table *h, int offset_bookkeep, char **key, void **value) |
| Continue iteration over all keys from an arbitray offset. More... | |
| int | hash_table_fromkey (struct hash_table *h, const char *key) |
| Begin iteration at the given key. More... | |
| unsigned | hash_string (const char *s) |
| A default hash function. More... | |
| char ** | hash_table_keys_array (struct hash_table *h) |
| Return a NULL-termianted array with a copy of all the current keys. More... | |
| void | hash_table_free_keys_array (char **keys) |
| Free an array generated from hash_table_free_keys_array. More... | |
A general purpose hash table. This hash table module maps C strings to arbitrary objects (void pointers). For example, to store a file object using the pathname as a key:
struct hash_table *h; h = hash_table_create(0,0);
FILE * file = fopen(pathname,"r");
hash_table_insert(h,pathname,file); file = hash_table_lookup(h,pathname); file = hash_table_remove(h,pathname);
To list all of the items in a hash table, use hash_table_firstkey and hash_table_nextkey like this:
char *key; void *value;
hash_table_firstkey(table);
while(hash_table_nextkey(&key,&value)) {
printf("table contains: %s\n",key);
}
| #define HASH_TABLE_ITERATE | ( | table, | |
| key, | |||
| value | |||
| ) | hash_table_firstkey(table); while(hash_table_nextkey(table,&key,(void**)&value)) |
Utility macro to simplify common case of iterating over a hash table.
Use as follows:
char *key; void *value;
HASH_TABLE_ITERATE(table,key,value) { printf("table contains: %s\n",key); }
| typedef unsigned(* hash_func_t) (const char *key) |
The type signature for a hash function given to hash_table_create.
| struct hash_table* hash_table_create | ( | int | buckets, |
| hash_func_t | func | ||
| ) |
Create a new hash table.
| buckets | The number of buckets in the table. If zero, a default value will be used. |
| func | The default hash function to be used. If zero, hash_string will be used. |
| void hash_table_clear | ( | struct hash_table * | h, |
| void(*)(void *) | delete_func | ||
| ) |
Remove all entries from an hash table.
| h | The hash table to delete. |
| delete_func | If non-null, will be invoked on each object to delete it. |
| void hash_table_delete | ( | struct hash_table * | h | ) |
Delete a hash table.
Note that this function will not delete all of the objects contained within the hash table.
| h | The hash table to delete. |
| int hash_table_size | ( | struct hash_table * | h | ) |
Count the entries in a hash table.
| h | A pointer to a hash table. |
| int hash_table_insert | ( | struct hash_table * | h, |
| const char * | key, | ||
| const void * | value | ||
| ) |
Insert a key and value.
This call will fail if the table already contains the same key. You must call hash_table_remove to remove it. Also note that you cannot insert a null value into the table.
| h | A pointer to a hash table. |
| key | A pointer to a string key which will be hashed and duplicated. |
| value | A pointer to store with the key. |
| void* hash_table_lookup | ( | struct hash_table * | h, |
| const char * | key | ||
| ) |
Look up a value by key.
| h | A pointer to a hash table. |
| key | A string key to search for. |
| void* hash_table_remove | ( | struct hash_table * | h, |
| const char * | key | ||
| ) |
Remove a value by key.
| h | A pointer to a hash table. |
| key | A string key to remove. |
| void hash_table_firstkey | ( | struct hash_table * | h | ) |
Begin iteration over all keys.
This function begins a new iteration over a hash table, allowing you to visit every key and value in the table. Next, invoke hash_table_nextkey to retrieve each value in order.
| h | A pointer to a hash table. |
| int hash_table_nextkey | ( | struct hash_table * | h, |
| char ** | key, | ||
| void ** | value | ||
| ) |
Continue iteration over all keys.
This function returns the next key and value in the iteration. Warning: It cannot be called after either hash_table_insert or hash_table_remove during the same iteration. If this is needed, consider iterating using manual hash_table_lookup with keys from hash_table_keys_array.
| h | A pointer to a hash table. |
| key | A pointer to a key pointer. |
| value | A pointer to a value pointer. |
| void hash_table_randomkey | ( | struct hash_table * | h, |
| int * | offset_bookkeep | ||
| ) |
Begin iteration over all keys from a random offset.
This function begins a new iteration over a hash table, allowing you to visit every key and value in the table. Next, invoke hash_table_nextkey_with_offset to retrieve each value in order.
| h | A pointer to a hash table. |
| offset_bookkeep | An integer to pointer where the origin to the iteration is recorded. |
| int hash_table_nextkey_with_offset | ( | struct hash_table * | h, |
| int | offset_bookkeep, | ||
| char ** | key, | ||
| void ** | value | ||
| ) |
Continue iteration over all keys from an arbitray offset.
This function returns the next key and value in the iteration.
| h | A pointer to a hash table. |
| offset_bookkeep | The origin for this iteration. See hash_table_randomkey |
| key | A pointer to a key pointer. |
| value | A pointer to a value pointer. |
| int hash_table_fromkey | ( | struct hash_table * | h, |
| const char * | key | ||
| ) |
Begin iteration at the given key.
Invoke hash_table_nextkey to retrieve each value in order. Note that subsequent calls to this functions may result in different iteration orders as the hash_table may have been resized.
| h | A pointer to a hash table. |
| key | A string key to search for. |
| unsigned hash_string | ( | const char * | s | ) |
A default hash function.
| s | A string to hash. |
| char** hash_table_keys_array | ( | struct hash_table * | h | ) |
Return a NULL-termianted array with a copy of all the current keys.
It is the responsibility of the caller to free this array with hash_table_free_keys_array.
| h | A pointer to a hash table. |
| void hash_table_free_keys_array | ( | char ** | keys | ) |
Free an array generated from hash_table_free_keys_array.
| keys | NULL-termianted array of size with a copy of keys. |