Loading...
Searching...
No Matches
htable.h
/* SPDX-License-Identifier: BSD-3-Clause
* Copyright 2016, Olivier MATZ <zer0@droids-corp.org>
*/
#pragma once
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
typedef void (*ec_htable_elt_free_t)(void *);
struct ec_htable;
struct ec_htable_elt_ref;
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);
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.
ec_htable_force_seed
void ec_htable_force_seed(uint32_t seed)
Force a seed for the hash function.
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_elt_free_t
void(* ec_htable_elt_free_t)(void *)
Callback function for freeing hash table elements.
Definition htable.h:22
ec_htable
struct ec_htable * ec_htable(void)
Create a 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_free
void ec_htable_free(struct ec_htable *htable)
Free a hash table and all its objects.
ec_htable_dup
struct ec_htable * ec_htable_dup(const struct ec_htable *htable)
Duplicate a hash table.
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.
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.
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.
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.
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.
ec_htable_dump
void ec_htable_dump(FILE *out, const struct ec_htable *htable)
Dump a hash table.
ec_htable_len
size_t ec_htable_len(const struct ec_htable *htable)
Get the length of a hash table.