Simple hash table API (any key)
More...
|
| struct ec_htable * | ec_htable (void) |
| void * | ec_htable_get (const struct ec_htable *htable, const void *key, size_t key_len) |
| bool | ec_htable_has_key (const struct ec_htable *htable, const void *key, size_t key_len) |
| int | ec_htable_del (struct ec_htable *htable, const void *key, size_t key_len) |
| int | ec_htable_set (struct ec_htable *htable, const void *key, size_t key_len, void *val, ec_htable_elt_free_t free_cb) |
| void | ec_htable_free (struct ec_htable *htable) |
| size_t | ec_htable_len (const struct ec_htable *htable) |
| struct ec_htable * | ec_htable_dup (const struct ec_htable *htable) |
| void | ec_htable_force_seed (uint32_t seed) |
| void | ec_htable_dump (FILE *out, const struct ec_htable *htable) |
| struct ec_htable_elt_ref * | ec_htable_iter (const struct ec_htable *htable) |
| struct ec_htable_elt_ref * | ec_htable_iter_next (struct ec_htable_elt_ref *iter) |
| const void * | ec_htable_iter_get_key (const struct ec_htable_elt_ref *iter) |
| size_t | ec_htable_iter_get_key_len (const struct ec_htable_elt_ref *iter) |
| void * | ec_htable_iter_get_val (const struct ec_htable_elt_ref *iter) |
Simple hash table API (any key)
This file provides functions to store objects in hash tables, using arbitrary data as keys.
◆ ec_htable_elt_free_t
| typedef void(* ec_htable_elt_free_t) (void *) |
Callback function for freeing hash table elements.
Definition at line 22 of file htable.h.
◆ ec_htable()
| struct ec_htable * ec_htable |
( |
void | | ) |
|
Create a hash table.
- Returns
- The hash table, or NULL on error (errno is set).
◆ ec_htable_get()
| void * ec_htable_get |
( |
const struct ec_htable * | htable, |
|
|
const void * | key, |
|
|
size_t | key_len ) |
Get a value from the hash table.
- Parameters
-
| htable | The hash table. |
| key | The key. |
| key_len | The key length. |
- 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_htable_has_key()
| bool ec_htable_has_key |
( |
const struct ec_htable * | htable, |
|
|
const void * | key, |
|
|
size_t | key_len ) |
Check if the hash table contains this key.
- Parameters
-
| htable | The hash table. |
| key | The key. |
| key_len | The key length. |
- Returns
- true if it contains the key, else false.
◆ ec_htable_del()
| int ec_htable_del |
( |
struct ec_htable * | htable, |
|
|
const void * | key, |
|
|
size_t | key_len ) |
Delete an object from the hash table.
- Parameters
-
| htable | The hash table. |
| key | The key. |
| key_len | The key length. |
- Returns
- 0 on success, or -1 on error (errno is set).
◆ ec_htable_set()
Add/replace an object in the hash table.
- Parameters
-
| htable | The hash table. |
| key | The key. |
| key_len | The key length. |
| 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_htable_del() or ec_htable_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_htable_free()
| void ec_htable_free |
( |
struct ec_htable * | htable | ) |
|
Free a hash table and all its objects.
- Parameters
-
◆ ec_htable_len()
| size_t ec_htable_len |
( |
const struct ec_htable * | htable | ) |
|
Get the length of a hash table.
- Parameters
-
- Returns
- The length of the hash table.
◆ ec_htable_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_htable_force_seed()
| void ec_htable_force_seed |
( |
uint32_t | seed | ) |
|
Force a seed for the hash function. This function must be called before ec_init(). By default, a random value is determined during ec_init().
- Parameters
-
◆ ec_htable_dump()
| void ec_htable_dump |
( |
FILE * | out, |
|
|
const struct ec_htable * | htable ) |
Dump a hash table.
- Parameters
-
| out | The stream where the dump is sent. |
| htable | The hash table. |
◆ ec_htable_iter()
| struct ec_htable_elt_ref * ec_htable_iter |
( |
const struct ec_htable * | htable | ) |
|
Iterate the elements in the hash table.
The typical usage is as below:
iter != NULL;
printf(" %s: %p\n",
}
struct ec_htable_elt_ref * ec_htable_iter_next(struct ec_htable_elt_ref *iter)
void * ec_htable_iter_get_val(const struct ec_htable_elt_ref *iter)
const void * ec_htable_iter_get_key(const struct ec_htable_elt_ref *iter)
struct ec_htable_elt_ref * ec_htable_iter(const struct ec_htable *htable)
- Parameters
-
- Returns
- An iterator element, or NULL if the htable is empty.
◆ ec_htable_iter_next()
| struct ec_htable_elt_ref * ec_htable_iter_next |
( |
struct ec_htable_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 if there is no more element.
◆ ec_htable_iter_get_key()
| const void * ec_htable_iter_get_key |
( |
const struct ec_htable_elt_ref * | iter | ) |
|
Get 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_htable_iter_get_key_len()
| size_t ec_htable_iter_get_key_len |
( |
const struct ec_htable_elt_ref * | iter | ) |
|
Get the key length of the current element.
- Parameters
-
| iter | The hash table iterator. |
- Returns
- The current element key length, or 0 if the iterator points to an invalid element.
◆ ec_htable_iter_get_val()
| void * ec_htable_iter_get_val |
( |
const struct ec_htable_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.