Loading...
Searching...
No Matches
Hash table

Simple hash table API (any key). More...

## Typedefs

typedef void(* | ec_htable_elt_free_t) (void *)
| Callback function for freeing hash table elements.

## Functions

struct ec_htable * | ec_htable (void)
| Create a hash table.
void * | ec_htable_get (const struct ec_htable *htable, const void *key, size_t key_len)
| Get a value from the hash table.
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.
int | ec_htable_del (struct ec_htable *htable, const void *key, size_t key_len)
| Delete an object from the hash table.
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.
void | ec_htable_free (struct ec_htable *htable)
| Free a hash table and all its objects.
size_t | ec_htable_len (const struct ec_htable *htable)
| Get the length of a hash table.
struct ec_htable * | ec_htable_dup (const struct ec_htable *htable)
| Duplicate a hash table.
void | ec_htable_force_seed (uint32_t seed)
| Force a seed for the hash function.
void | ec_htable_dump (FILE *out, const struct ec_htable *htable)
| Dump a hash table.
struct ec_htable_elt_ref * | ec_htable_iter (const struct ec_htable *htable)
| Iterate the elements in the hash table.
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.
const void * | ec_htable_iter_get_key (const struct ec_htable_elt_ref *iter)
| Get the key of the current element.
size_t | ec_htable_iter_get_key_len (const struct ec_htable_elt_ref *iter)
| Get the key length of the current element.
void * | ec_htable_iter_get_val (const struct ec_htable_elt_ref *iter)
| Get the value of the current element.

## Detailed Description

Simple hash table API (any key).

This file provides functions to store objects in hash tables, using arbitrary data as keys.

## Typedef Documentation

## 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.

## Function Documentation

## 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 and all its objects.

Parameters

  htable | The hash table.

## ec_htable_len()

size_t ec_htable_len | ( | const struct ec_htable * | htable | ) |

Get the length of a hash table.

Parameters

  htable | The hash table.

Returns
  The length of the hash table.

## ec_htable_dup()

struct ec_htable * ec_htable_dup | ( | const struct ec_htable * | htable | ) |

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

  htable | The hash table.

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

  seed | The seed value.

## 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:

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));
}
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.
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.
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.
ec_htable_iter
struct ec_htable_elt_ref * ec_htable_iter(const struct ec_htable *htable)
Iterate the elements in the hash table.

Parameters

  htable | The hash table.

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.