libyang
3.7.5
libyang is YANG data modelling language parser and toolkit written (and providing API) in C.
|
libyang hash table More...
Go to the source code of this file.
Typedefs | |
typedef ly_bool(* | lyht_value_equal_cb )(void *val1_p, void *val2_p, ly_bool mod, void *cb_data) |
Callback for checking hash table values equivalence. More... | |
Functions | |
LIBYANG_API_DECL struct ly_ht * | lyht_dup (const struct ly_ht *orig) |
Make a duplicate of an existing hash table. More... | |
LIBYANG_API_DECL LY_ERR | lyht_find (const struct ly_ht *ht, void *val_p, uint32_t hash, void **match_p) |
Find a value in a hash table. More... | |
LIBYANG_API_DECL LY_ERR | lyht_find_next (const struct ly_ht *ht, void *val_p, uint32_t hash, void **match_p) |
Find another equal value in the hash table. More... | |
LIBYANG_API_DECL LY_ERR | lyht_find_next_with_collision_cb (const struct ly_ht *ht, void *val_p, uint32_t hash, lyht_value_equal_cb val_equal, void **match_p) |
Find another equal value in the hash table. Same functionality as lyht_find_next() but allows to specify a collision val equal callback to be used for checking for matching colliding values. More... | |
LIBYANG_API_DECL LY_ERR | lyht_find_with_val_cb (const struct ly_ht *ht, void *val_p, uint32_t hash, lyht_value_equal_cb val_equal, void **match_p) |
Find a value in a hash table but use a custom val_equal callback. More... | |
LIBYANG_API_DECL void | lyht_free (struct ly_ht *ht, void(*val_free)(void *val_p)) |
Free a hash table. More... | |
LIBYANG_API_DECL uint32_t | lyht_get_fixed_size (uint32_t item_count) |
Get suitable size of a hash table for a fixed number of items. More... | |
LIBYANG_API_DECL uint32_t | lyht_hash (const char *key, size_t len) |
Compute hash from a string. More... | |
LIBYANG_API_DECL uint32_t | lyht_hash_multi (uint32_t hash, const char *key_part, size_t len) |
Compute hash from (several) string(s). More... | |
LIBYANG_API_DECL LY_ERR | lyht_insert (struct ly_ht *ht, void *val_p, uint32_t hash, void **match_p) |
Insert a value into a hash table. More... | |
LIBYANG_API_DECL LY_ERR | lyht_insert_no_check (struct ly_ht *ht, void *val_p, uint32_t hash, void **match_p) |
Insert a value into a hash table, without checking whether the value has already been inserted. More... | |
LIBYANG_API_DECL LY_ERR | lyht_insert_with_resize_cb (struct ly_ht *ht, void *val_p, uint32_t hash, lyht_value_equal_cb resize_val_equal, void **match_p) |
Insert a value into hash table. Same functionality as lyht_insert() but allows to specify a temporary val equal callback to be used in case the hash table will be resized after successful insertion. More... | |
LIBYANG_API_DECL struct ly_ht * | lyht_new (uint32_t size, uint16_t val_size, lyht_value_equal_cb val_equal, void *cb_data, uint16_t resize) |
Create new hash table. More... | |
LIBYANG_API_DECL LY_ERR | lyht_remove (struct ly_ht *ht, void *val_p, uint32_t hash) |
Remove a value from a hash table. More... | |
LIBYANG_API_DECL LY_ERR | lyht_remove_with_resize_cb (struct ly_ht *ht, void *val_p, uint32_t hash, lyht_value_equal_cb resize_val_equal) |
Remove a value from a hash table. Same functionality as lyht_remove() but allows to specify a temporary val equal callback to be used in case the hash table will be resized after successful removal. More... | |
LIBYANG_API_DECL lyht_value_equal_cb | lyht_set_cb (struct ly_ht *ht, lyht_value_equal_cb new_val_equal) |
Set hash table value equal callback. More... | |
LIBYANG_API_DECL void * | lyht_set_cb_data (struct ly_ht *ht, void *new_cb_data) |
Set hash table value equal callback user data. More... | |
libyang hash table
This source code is licensed under BSD 3-Clause License (the "License"). You may not use this file except in compliance with the License. You may obtain a copy of the License at
https://opensource.org/licenses/BSD-3-Clause
Definition in file hash_table.h.
Callback for checking hash table values equivalence.
[in] | val1_p | Pointer to the first value, the one being searched (inserted/removed). |
[in] | val2_p | Pointer to the second value, the one stored in the hash table. |
[in] | mod | Whether the operation modifies the hash table (insert or remove) or not (find). |
[in] | cb_data | User callback data. |
Definition at line 72 of file hash_table.h.
Make a duplicate of an existing hash table.
[in] | orig | Original hash table to duplicate. |
orig
, NULL on error. LIBYANG_API_DECL LY_ERR lyht_find | ( | const struct ly_ht * | ht, |
void * | val_p, | ||
uint32_t | hash, | ||
void ** | match_p | ||
) |
Find a value in a hash table.
[in] | ht | Hash table to search in. |
[in] | val_p | Pointer to the value to find. |
[in] | hash | Hash of the stored value. |
[out] | match_p | Pointer to the matching value, optional. |
LIBYANG_API_DECL LY_ERR lyht_find_next | ( | const struct ly_ht * | ht, |
void * | val_p, | ||
uint32_t | hash, | ||
void ** | match_p | ||
) |
Find another equal value in the hash table.
[in] | ht | Hash table to search in. |
[in] | val_p | Pointer to the previously found value in ht . |
[in] | hash | Hash of the previously found value. |
[out] | match_p | Pointer to the matching value, optional. |
LIBYANG_API_DECL LY_ERR lyht_find_next_with_collision_cb | ( | const struct ly_ht * | ht, |
void * | val_p, | ||
uint32_t | hash, | ||
lyht_value_equal_cb | val_equal, | ||
void ** | match_p | ||
) |
Find another equal value in the hash table. Same functionality as lyht_find_next() but allows to specify a collision val equal callback to be used for checking for matching colliding values.
[in] | ht | Hash table to search in. |
[in] | val_p | Pointer to the previously found value in ht . |
[in] | hash | Hash of the previously found value. |
[in] | val_equal | Callback for checking value equivalence. Called with mod 1 when searching for the first value and then uses mod 0 to check all the following collisions. |
[out] | match_p | Pointer to the matching value, optional. |
LIBYANG_API_DECL LY_ERR lyht_find_with_val_cb | ( | const struct ly_ht * | ht, |
void * | val_p, | ||
uint32_t | hash, | ||
lyht_value_equal_cb | val_equal, | ||
void ** | match_p | ||
) |
Find a value in a hash table but use a custom val_equal callback.
[in] | ht | Hash table to search in. |
[in] | val_p | Pointer to the value to find. |
[in] | hash | Hash of the stored value. |
[in] | val_equal | Callback for checking value equivalence. |
[out] | match_p | Pointer to the matching value, optional. |
LIBYANG_API_DECL void lyht_free | ( | struct ly_ht * | ht, |
void(*)(void *val_p) | val_free | ||
) |
Free a hash table.
[in] | ht | Hash table to be freed. |
[in] | val_free | Optional callback for freeing all the stored values, val_p is a pointer to a stored value. |
LIBYANG_API_DECL uint32_t lyht_get_fixed_size | ( | uint32_t | item_count | ) |
Get suitable size of a hash table for a fixed number of items.
[in] | item_count | Number of stored items. |
LIBYANG_API_DECL uint32_t lyht_hash | ( | const char * | key, |
size_t | len | ||
) |
Compute hash from a string.
Bob Jenkin's one-at-a-time hash http://www.burtleburtle.net/bob/hash/doobs.html
Spooky hash is faster, but it works only for little endian architectures.
[in] | key | Key to hash. |
[in] | len | Length of key . |
LIBYANG_API_DECL uint32_t lyht_hash_multi | ( | uint32_t | hash, |
const char * | key_part, | ||
size_t | len | ||
) |
Compute hash from (several) string(s).
Usage:
[in] | hash | Previous hash. |
[in] | key_part | Next key to hash, |
[in] | len | Length of key_part . |
LIBYANG_API_DECL LY_ERR lyht_insert | ( | struct ly_ht * | ht, |
void * | val_p, | ||
uint32_t | hash, | ||
void ** | match_p | ||
) |
Insert a value into a hash table.
[in] | ht | Hash table to insert into. |
[in] | val_p | Pointer to the value to insert. Be careful, if the values stored in the hash table are pointers, val_p must be a pointer to a pointer. |
[in] | hash | Hash of the stored value. |
[out] | match_p | Pointer to the stored value, optional |
LIBYANG_API_DECL LY_ERR lyht_insert_no_check | ( | struct ly_ht * | ht, |
void * | val_p, | ||
uint32_t | hash, | ||
void ** | match_p | ||
) |
Insert a value into a hash table, without checking whether the value has already been inserted.
[in] | ht | Hash table to insert into. |
[in] | val_p | Pointer to the value to insert. Be careful, if the values stored in the hash table are pointers, val_p must be a pointer to a pointer. |
[in] | hash | Hash of the stored value. |
[out] | match_p | Pointer to the stored value, optional |
LIBYANG_API_DECL LY_ERR lyht_insert_with_resize_cb | ( | struct ly_ht * | ht, |
void * | val_p, | ||
uint32_t | hash, | ||
lyht_value_equal_cb | resize_val_equal, | ||
void ** | match_p | ||
) |
Insert a value into hash table. Same functionality as lyht_insert() but allows to specify a temporary val equal callback to be used in case the hash table will be resized after successful insertion.
[in] | ht | Hash table to insert into. |
[in] | val_p | Pointer to the value to insert. Be careful, if the values stored in the hash table are pointers, val_p must be a pointer to a pointer. |
[in] | hash | Hash of the stored value. |
[in] | resize_val_equal | Val equal callback to use for resizing. |
[out] | match_p | Pointer to the stored value, optional |
LIBYANG_API_DECL struct ly_ht* lyht_new | ( | uint32_t | size, |
uint16_t | val_size, | ||
lyht_value_equal_cb | val_equal, | ||
void * | cb_data, | ||
uint16_t | resize | ||
) |
Create new hash table.
[in] | size | Starting size of the hash table (capacity of values), must be power of 2. |
[in] | val_size | Size in bytes of value (the stored hashed item). |
[in] | val_equal | Callback for checking value equivalence. |
[in] | cb_data | User data always passed to val_equal . |
[in] | resize | Whether to resize the table on too few/too many records taken. |
Remove a value from a hash table.
[in] | ht | Hash table to remove from. |
[in] | val_p | Pointer to value to be removed. Be careful, if the values stored in the hash table are pointers, val_p must be a pointer to a pointer. |
[in] | hash | Hash of the stored value. |
LIBYANG_API_DECL LY_ERR lyht_remove_with_resize_cb | ( | struct ly_ht * | ht, |
void * | val_p, | ||
uint32_t | hash, | ||
lyht_value_equal_cb | resize_val_equal | ||
) |
Remove a value from a hash table. Same functionality as lyht_remove() but allows to specify a temporary val equal callback to be used in case the hash table will be resized after successful removal.
[in] | ht | Hash table to remove from. |
[in] | val_p | Pointer to value to be removed. Be careful, if the values stored in the hash table are pointers, val_p must be a pointer to a pointer. |
[in] | hash | Hash of the stored value. |
[in] | resize_val_equal | Val equal callback to use for resizing. |
LIBYANG_API_DECL lyht_value_equal_cb lyht_set_cb | ( | struct ly_ht * | ht, |
lyht_value_equal_cb | new_val_equal | ||
) |
Set hash table value equal callback.
[in] | ht | Hash table to modify. |
[in] | new_val_equal | New callback for checking value equivalence. |
LIBYANG_API_DECL void* lyht_set_cb_data | ( | struct ly_ht * | ht, |
void * | new_cb_data | ||
) |
Set hash table value equal callback user data.
[in] | ht | Hash table to modify. |
[in] | new_cb_data | New data for values callback. |