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_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 *) |
◆ 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()
int ec_htable_set |
( |
struct ec_htable * | htable, |
|
|
const void * | key, |
|
|
size_t | key_len, |
|
|
void * | val, |
|
|
ec_htable_elt_free_t | free_cb ) |
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 an 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_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:
// dump elements for (iter = ec_htable_iter(htable); iter != NULL; iter = ec_htable_iter_next(iter)) { printf(" %s: %p\n", ec_htable_iter_get_key(iter), ec_htable_iter_get_val(iter)); }
- Parameters
-
- Returns
- An iterator element, or NULL if the dict 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 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.