Simple hash table API (string keys)
More...
Simple hash table API (string keys)
This file provides functions to store objects in hash tables, using strings as keys.
◆ ec_dict_elt_free_t
typedef void(* ec_dict_elt_free_t) (void *) |
◆ ec_dict()
struct ec_dict * ec_dict |
( |
void | | ) |
|
Create a hash table.
- Returns
- The hash table, or NULL on error (errno is set).
◆ ec_dict_get()
void * ec_dict_get |
( |
const struct ec_dict * | dict, |
|
|
const char * | key ) |
Get a value from the hash table.
- Parameters
-
dict | The hash table. |
key | The key string. |
- Returns
- The element if it is found, or NULL on error (errno is set). In case of success but the element is NULL, errno is set to 0.
◆ ec_dict_has_key()
bool ec_dict_has_key |
( |
const struct ec_dict * | dict, |
|
|
const char * | key ) |
Check if the hash table contains this key.
- Parameters
-
dict | The hash table. |
key | The key string. |
- Returns
- true if it contains the key, else false.
◆ ec_dict_del()
int ec_dict_del |
( |
struct ec_dict * | dict, |
|
|
const char * | key ) |
Delete an object from the hash table.
- Parameters
-
dict | The hash table. |
key | The key string. |
- Returns
- 0 on success, or -1 on error (errno is set).
◆ ec_dict_set()
int ec_dict_set |
( |
struct ec_dict * | dict, |
|
|
const char * | key, |
|
|
void * | val, |
|
|
ec_dict_elt_free_t | free_cb ) |
Add/replace an object in the hash table.
- Parameters
-
dict | The hash table. |
key | The key string. |
val | The pointer to be saved in the hash table. |
free_cb | An optional pointer to a destructor function called when an object is destroyed (ec_dict_del() or ec_dict_free()). |
- Returns
- 0 on success, or -1 on error (errno is set). On error, the passed value is freed (free_cb(val) is called).
◆ ec_dict_free()
void ec_dict_free |
( |
struct ec_dict * | dict | ) |
|
Free a hash table an all its objects.
- Parameters
-
◆ ec_dict_len()
size_t ec_dict_len |
( |
const struct ec_dict * | dict | ) |
|
Get the length of a hash table.
- Parameters
-
- Returns
- The length of the hash table.
◆ ec_dict_dup()
Duplicate a hash table
A reference counter is shared between the clones of hash tables so that the objects are freed only when the last reference is destroyed.
- Parameters
-
- Returns
- The duplicated hash table, or NULL on error (errno is set).
◆ ec_dict_dump()
void ec_dict_dump |
( |
FILE * | out, |
|
|
const struct ec_dict * | dict ) |
Dump a hash table.
- Parameters
-
out | The stream where the dump is sent. |
dict | The hash table. |
◆ ec_dict_iter()
struct ec_dict_elt_ref * ec_dict_iter |
( |
const struct ec_dict * | dict | ) |
|
Iterate the elements in the hash table.
The typical usage is as below:
// dump elements for (iter = ec_dict_iter(dict); iter != NULL; iter = ec_dict_iter_next(iter)) { printf(" %s: %p\n", ec_dict_iter_get_key(iter), ec_dict_iter_get_val(iter)); }
- Parameters
-
- Returns
- An iterator element, or NULL if the dict is empty.
◆ ec_dict_iter_next()
struct ec_dict_elt_ref * ec_dict_iter_next |
( |
struct ec_dict_elt_ref * | iter | ) |
|
Make the iterator point to the next element in the hash table.
- Parameters
-
iter | The hash table iterator. |
- Returns
- An iterator element, or NULL there is no more element.
◆ ec_dict_iter_get_key()
const char * ec_dict_iter_get_key |
( |
const struct ec_dict_elt_ref * | iter | ) |
|
Get a pointer to the key of the current element.
- Parameters
-
iter | The hash table iterator. |
- Returns
- The current element key, or NULL if the iterator points to an invalid element.
◆ ec_dict_iter_get_val()
void * ec_dict_iter_get_val |
( |
const struct ec_dict_elt_ref * | iter | ) |
|
Get the value of the current element.
- Parameters
-
iter | The hash table iterator. |
- Returns
- The current element value, or NULL if the iterator points to an invalid element.