![]() |
Nilorea Library
C utilities for networking, threading, graphics
|
Hash functions and table. More...
#include "nilorea/n_common.h"
#include "nilorea/n_log.h"
#include "nilorea/n_hash.h"
#include "nilorea/n_str.h"
#include <pthread.h>
#include <string.h>
#include <strings.h>
#include <arpa/inet.h>
Go to the source code of this file.
Macros | |
#define | BIG_CONSTANT(x) (x##LLU) |
max unsigned long long | |
#define | BYTESWAP32(x) |
32 bits bytes swap | |
#define | BYTESWAP64(x) |
32 bits bytes swap | |
#define | ROTL32(x, r) (((x) << (r)) | ((x) >> (32 - (r)))) |
32 bit rotate left | |
#define | ROTL64(x, r) (((x) << (r)) | ((x) >> (64 - (r)))) |
64 bit rotate left | |
Functions | |
int | _destroy_ht (HASH_TABLE **table) |
Free and set the table to NULL. | |
int | _destroy_ht_trie (HASH_TABLE **table) |
Free and set the table to NULL (TRIE mode) | |
int | _empty_ht (HASH_TABLE *table) |
Empty a hash table (CLASSIC mode) | |
int | _empty_ht_trie (HASH_TABLE *table) |
Empty a TRIE hash table. | |
int | _ht_check_trie_divergence (HASH_TABLE *table, const char *key) |
check and return branching index in key if any | |
int | _ht_depth_first_search (HASH_NODE *node, LIST *results) |
recursive, helper for ht_get_completion_list, get the list of leaf starting from node | |
char * | _ht_find_longest_prefix_trie (HASH_TABLE *table, const char *key) |
find the longest prefix string that is not the current key | |
int | _ht_get_double (HASH_TABLE *table, const char *key, double *val) |
Retrieve a double value in the hash table, at the given key. | |
int | _ht_get_double_trie (HASH_TABLE *table, const char *key, double *val) |
Retrieve an double value in the hash table, at the given key. | |
int | _ht_get_int (HASH_TABLE *table, const char *key, int *val) |
Retrieve an integral value in the hash table, at the given key. | |
int | _ht_get_int_trie (HASH_TABLE *table, const char *key, int *val) |
Retrieve an integral value in the hash table, at the given key. | |
HASH_NODE * | _ht_get_node (HASH_TABLE *table, const char *key) |
return the associated key's node inside the hash_table | |
HASH_NODE * | _ht_get_node_trie (HASH_TABLE *table, const char *key) |
retrieve a HASH_NODE at key from table | |
int | _ht_get_ptr (HASH_TABLE *table, const char *key, void **val) |
Retrieve a pointer value in the hash table, at the given key. | |
int | _ht_get_ptr_trie (HASH_TABLE *table, const char *key, void **val) |
Retrieve a pointer value in the hash table, at the given key. | |
int | _ht_get_string (HASH_TABLE *table, const char *key, char **val) |
Retrieve a char *string value in the hash table, at the given key. | |
int | _ht_get_string_trie (HASH_TABLE *table, const char *key, char **val) |
Retrieve an char *string value in the hash table, at the given key. | |
int | _ht_is_leaf_node_trie (HASH_TABLE *table, const char *key) |
Search a key and tell if it's holding a value (leaf) | |
HASH_NODE * | _ht_new_double_node (HASH_TABLE *table, const char *key, double value) |
node creation, HASH_CLASSIC mode | |
HASH_NODE * | _ht_new_int_node (HASH_TABLE *table, const char *key, int value) |
node creation, HASH_CLASSIC mode | |
HASH_NODE * | _ht_new_node (HASH_TABLE *table, const char *key) |
node creation, HASH_CLASSIC mode | |
HASH_NODE * | _ht_new_node_trie (HASH_TABLE *table, const char key) |
node creation, HASH_CLASSIC mode | |
HASH_NODE * | _ht_new_ptr_node (HASH_TABLE *table, const char *key, void *value, void(*destructor)(void *ptr)) |
node creation, HASH_CLASSIC mode, pointer to string value | |
HASH_NODE * | _ht_new_string_node (HASH_TABLE *table, const char *key, char *value) |
node creation, HASH_CLASSIC mode, strdup of value | |
HASH_NODE * | _ht_new_string_ptr_node (HASH_TABLE *table, const char *key, char *value) |
node creation, HASH_CLASSIC mode, pointer to string value | |
void | _ht_node_destroy (void *node) |
destroy a HASH_NODE by first calling the HASH_NODE destructor | |
void | _ht_print (HASH_TABLE *table) |
Generic print func call for classic hash tables. | |
void | _ht_print_trie (HASH_TABLE *table) |
Generic print func call for trie trees. | |
void | _ht_print_trie_helper (HASH_TABLE *table, HASH_NODE *node) |
Recursive function to print trie tree's keys and values. | |
int | _ht_put_double (HASH_TABLE *table, const char *key, double value) |
put a double value with given key in the targeted hash table | |
int | _ht_put_double_trie (HASH_TABLE *table, const char *key, double value) |
put a double value with given key in the targeted hash table [TRIE HASH TABLE) | |
int | _ht_put_int (HASH_TABLE *table, const char *key, int value) |
put an integral value with given key in the targeted hash table [CLASSIC HASH TABLE) | |
int | _ht_put_int_trie (HASH_TABLE *table, const char *key, int value) |
put an integral value with given key in the targeted hash table [TRIE HASH TABLE) | |
int | _ht_put_ptr (HASH_TABLE *table, const char *key, void *ptr, void(*destructor)(void *ptr)) |
put a pointer value with given key in the targeted hash table | |
int | _ht_put_ptr_trie (HASH_TABLE *table, const char *key, void *ptr, void(*destructor)(void *ptr)) |
put a pointer to the string value with given key in the targeted hash table [TRIE HASH TABLE) | |
int | _ht_put_string (HASH_TABLE *table, const char *key, char *string) |
put a null terminated char *string with given key in the targeted hash table (copy of string) | |
int | _ht_put_string_ptr (HASH_TABLE *table, const char *key, char *string) |
put a null terminated char *string with given key in the targeted hash table (pointer) | |
int | _ht_put_string_ptr_trie (HASH_TABLE *table, const char *key, char *string) |
put a pointer to the string value with given key in the targeted hash table [TRIE HASH TABLE) | |
int | _ht_put_string_trie (HASH_TABLE *table, const char *key, char *string) |
put a duplicate of the string value with given key in the targeted hash table [TRIE HASH TABLE) | |
int | _ht_remove (HASH_TABLE *table, const char *key) |
Remove a key from a hash table. | |
int | _ht_remove_trie (HASH_TABLE *table, const char *key) |
Remove a key from a trie table and destroy the node. | |
LIST * | _ht_search (HASH_TABLE *table, int(*node_is_matching)(HASH_NODE *node)) |
Search hash table's keys and apply a matching func to put results in the list. | |
LIST * | _ht_search_trie (HASH_TABLE *table, int(*node_is_matching)(HASH_NODE *node)) |
Search tree's keys and apply a matching func to put results in the list. | |
void | _ht_search_trie_helper (LIST *results, HASH_NODE *node, int(*node_is_matching)(HASH_NODE *node)) |
Recursive function to search tree's keys and apply a matching func to put results in the list. | |
int | destroy_ht (HASH_TABLE **table) |
empty a table and destroy it | |
int | empty_ht (HASH_TABLE *table) |
empty a table | |
FORCE_INLINE uint32_t | fmix32 (uint32_t h) |
Finalization mix - force all bits of a hash block to avalanche (from murmur's author) | |
FORCE_INLINE uint64_t | fmix64 (uint64_t k) |
Finalization mix - force all bits of a hash block to avalanche (from murmur's author) | |
FORCE_INLINE uint32_t | getblock32 (const uint32_t *p, const size_t i) |
Block read - modified from murmur's author, ajusted byte endianess | |
FORCE_INLINE uint64_t | getblock64 (const uint64_t *p, const size_t i) |
Block read - modified from murmur's author, ajusted byte endianess. | |
LIST * | ht_get_completion_list (HASH_TABLE *table, const char *keybud, size_t max_results) |
get next matching keys in table tree | |
int | ht_get_double (HASH_TABLE *table, const char *key, double *val) |
get double at 'key' from 'table' | |
int | ht_get_int (HASH_TABLE *table, const char *key, int *val) |
get node at 'key' from 'table' | |
HASH_NODE * | ht_get_node (HASH_TABLE *table, const char *key) |
get node at 'key' from 'table' | |
HASH_NODE * | ht_get_node_ex (HASH_TABLE *table, HASH_VALUE hash_value) |
return the associated key's node inside the hash_table (HASH_CLASSIC only) | |
int | ht_get_optimal_size (HASH_TABLE *table) |
get optimal array size based on nb=(number_of_key*1.3) && if( !isprime(nb) )nb=nextprime(nb) (HASH_CLASSIC mode only) | |
int | ht_get_ptr (HASH_TABLE *table, const char *key, void **val) |
get pointer at 'key' from 'table' | |
int | ht_get_ptr_ex (HASH_TABLE *table, HASH_VALUE hash_value, void **val) |
Retrieve a pointer value in the hash table, at the given key. | |
int | ht_get_string (HASH_TABLE *table, const char *key, char **val) |
get string at 'key' from 'table' | |
int | ht_get_table_collision_percentage (HASH_TABLE *table) |
get table collision percentage (HASH_CLASSIC mode only) | |
char * | ht_node_type (HASH_NODE *node) |
get the type of a node , text version | |
int | ht_optimize (HASH_TABLE **table) |
try an automatic optimization of the table | |
void | ht_print (HASH_TABLE *table) |
print contents of table | |
int | ht_put_double (HASH_TABLE *table, const char *key, double value) |
put a double value with given key in the targeted hash table | |
int | ht_put_int (HASH_TABLE *table, const char *key, int value) |
put an integral value with given key in the targeted hash table | |
int | ht_put_ptr (HASH_TABLE *table, const char *key, void *ptr, void(*destructor)(void *ptr)) |
put a pointer to the string value with given key in the targeted hash table | |
int | ht_put_ptr_ex (HASH_TABLE *table, HASH_VALUE hash_value, void *val, void(*destructor)(void *ptr)) |
put a pointer value with given key in the targeted hash table (HASH_CLASSIC only) | |
int | ht_put_string (HASH_TABLE *table, const char *key, char *string) |
put a string value (copy/dup) with given key in the targeted hash table | |
int | ht_put_string_ptr (HASH_TABLE *table, const char *key, char *string) |
put a string value (pointer) with given key in the targeted hash table | |
int | ht_remove (HASH_TABLE *table, const char *key) |
remove and delete node at key in table | |
int | ht_remove_ex (HASH_TABLE *table, HASH_VALUE hash_value) |
Remove a key from a hash table (HASH_CLASSIC only) | |
int | ht_resize (HASH_TABLE **table, size_t size) |
rehash table according to size (HASH_CLASSIC mode only) | |
LIST * | ht_search (HASH_TABLE *table, int(*node_is_matching)(HASH_NODE *node)) |
seach table for matching nodes | |
int | is_prime (int nb) |
test if number is a prime number or not | |
void | MurmurHash3_x64_128 (const void *key, const size_t len, const uint64_t seed, void *out) |
MurmurHash3 was written by Austin Appleby, and is placed in the public domain. | |
void | MurmurHash3_x86_128 (const void *key, const int len, uint32_t seed, void *out) |
MurmurHash3 was written by Austin Appleby, and is placed in the public domain. | |
void | MurmurHash3_x86_32 (const void *key, int len, uint32_t seed, void *out) |
MurmurHash3 was written by Austin Appleby, and is placed in the public domain. | |
HASH_TABLE * | new_ht (size_t size) |
Create a hash table with the given size. | |
HASH_TABLE * | new_ht_trie (size_t alphabet_length, size_t alphabet_offset) |
create a TRIE hash table with the alphabet_size, each key value beeing decreased by alphabet_offset | |
int | next_prime (int nb) |
compute next prime number after nb | |
#define BYTESWAP32 | ( | x | ) |
#define BYTESWAP64 | ( | x | ) |
32 bits bytes swap
#define ROTL32 | ( | x, | |
r | |||
) | (((x) << (r)) | ((x) >> (32 - (r)))) |
#define ROTL64 | ( | x, | |
r | |||
) | (((x) << (r)) | ((x) >> (64 - (r)))) |
int _destroy_ht | ( | HASH_TABLE ** | table | ) |
Free and set the table to NULL.
table | targeted hash table |
Definition at line 2042 of file n_hash.c.
References __n_assert, Free, list_destroy(), LOG_ERR, and n_log.
Referenced by new_ht().
int _destroy_ht_trie | ( | HASH_TABLE ** | table | ) |
Free and set the table to NULL (TRIE mode)
table | targeted hash table |
Definition at line 767 of file n_hash.c.
References __n_assert, _ht_node_destroy(), Free, LOG_ERR, and n_log.
Referenced by new_ht_trie().
int _empty_ht | ( | HASH_TABLE * | table | ) |
Empty a hash table (CLASSIC mode)
table | targeted hash table |
Definition at line 2014 of file n_hash.c.
References __n_assert, _ht_node_destroy(), and remove_list_node.
Referenced by new_ht().
int _empty_ht_trie | ( | HASH_TABLE * | table | ) |
Empty a TRIE hash table.
table | targeted hash table |
Definition at line 746 of file n_hash.c.
References __n_assert, _ht_new_node_trie(), and _ht_node_destroy().
Referenced by new_ht_trie().
int _ht_check_trie_divergence | ( | HASH_TABLE * | table, |
const char * | key | ||
) |
check and return branching index in key if any
table | targeted hash table |
key | associated value's key |
Definition at line 509 of file n_hash.c.
References __n_assert, HASH_NODE::children, LOG_ERR, and n_log.
Referenced by _ht_find_longest_prefix_trie().
recursive, helper for ht_get_completion_list, get the list of leaf starting from node
node | starting node |
results | initialized LIST * for the matching NODES |
Definition at line 900 of file n_hash.c.
References __n_assert, _ht_depth_first_search(), and list_push().
Referenced by _ht_depth_first_search(), and ht_get_completion_list().
char * _ht_find_longest_prefix_trie | ( | HASH_TABLE * | table, |
const char * | key | ||
) |
find the longest prefix string that is not the current key
table | targeted hash table |
key | key to search prefix for |
Definition at line 555 of file n_hash.c.
References __n_assert, _ht_check_trie_divergence(), LOG_ERR, Malloc, n_log, and Realloc.
Referenced by _ht_remove_trie().
int _ht_get_double | ( | HASH_TABLE * | table, |
const char * | key, | ||
double * | val | ||
) |
Retrieve a double value in the hash table, at the given key.
Leave val untouched if key is not found.
table | targeted hash table |
key | associated value's key |
val | A pointer to a destination double |
Definition at line 1866 of file n_hash.c.
References __n_assert, _ht_get_node(), HASH_DOUBLE, ht_node_type(), LOG_ERR, and n_log.
Referenced by new_ht().
int _ht_get_double_trie | ( | HASH_TABLE * | table, |
const char * | key, | ||
double * | val | ||
) |
Retrieve an double value in the hash table, at the given key.
Leave val untouched if key is not found.
table | targeted hash table |
key | associated value's key |
val | a pointer to a destination double |
Definition at line 413 of file n_hash.c.
References __n_assert, _ht_get_node_trie(), HASH_DOUBLE, ht_node_type(), LOG_ERR, and n_log.
Referenced by new_ht_trie().
int _ht_get_int | ( | HASH_TABLE * | table, |
const char * | key, | ||
int * | val | ||
) |
Retrieve an integral value in the hash table, at the given key.
Leave val untouched if key is not found.
table | targeted hash table |
key | associated value's key |
val | A pointer to a destination integer |
Definition at line 1834 of file n_hash.c.
References __n_assert, _ht_get_node(), HASH_INT, ht_node_type(), LOG_ERR, and n_log.
Referenced by new_ht().
int _ht_get_int_trie | ( | HASH_TABLE * | table, |
const char * | key, | ||
int * | val | ||
) |
Retrieve an integral value in the hash table, at the given key.
Leave val untouched if key is not found.
table | targeted hash table |
key | associated value's key |
val | a pointer to a destination integer |
Definition at line 381 of file n_hash.c.
References __n_assert, _ht_get_node_trie(), HASH_INT, ht_node_type(), LOG_ERR, and n_log.
Referenced by new_ht_trie().
HASH_NODE * _ht_get_node | ( | HASH_TABLE * | table, |
const char * | key | ||
) |
return the associated key's node inside the hash_table
table | targeted table |
key | Associated value's key |
Definition at line 1442 of file n_hash.c.
References __n_assert, list_foreach, MurmurHash, and HASH_TABLE::size.
Referenced by _ht_get_double(), _ht_get_int(), _ht_get_ptr(), _ht_get_string(), _ht_put_double(), _ht_put_int(), _ht_put_ptr(), _ht_put_string(), _ht_put_string_ptr(), and new_ht().
HASH_NODE * _ht_get_node_trie | ( | HASH_TABLE * | table, |
const char * | key | ||
) |
retrieve a HASH_NODE at key from table
table | targeted hash table |
key | associated value's key |
Definition at line 339 of file n_hash.c.
References __n_assert, LOG_DEBUG, and n_log.
Referenced by _ht_get_double_trie(), _ht_get_int_trie(), _ht_get_ptr_trie(), _ht_get_string_trie(), and ht_get_completion_list().
int _ht_get_ptr | ( | HASH_TABLE * | table, |
const char * | key, | ||
void ** | val | ||
) |
Retrieve a pointer value in the hash table, at the given key.
Leave val untouched if key is not found.
table | targeted hash table |
key | associated value's key |
val | A pointer to an empty pointer store |
Definition at line 1899 of file n_hash.c.
References __n_assert, _ht_get_node(), HASH_PTR, ht_node_type(), LOG_ERR, and n_log.
Referenced by new_ht().
int _ht_get_ptr_trie | ( | HASH_TABLE * | table, |
const char * | key, | ||
void ** | val | ||
) |
Retrieve a pointer value in the hash table, at the given key.
Leave val untouched if key is not found.
table | targeted hash table |
key | associated value's key |
val | a pointer to a destination pointer |
Definition at line 476 of file n_hash.c.
References __n_assert, _ht_get_node_trie(), HASH_PTR, ht_node_type(), LOG_ERR, and n_log.
Referenced by new_ht_trie().
int _ht_get_string | ( | HASH_TABLE * | table, |
const char * | key, | ||
char ** | val | ||
) |
Retrieve a char *string value in the hash table, at the given key.
Leave val untouched if key is not found.
table | targeted hash table |
key | associated value's key |
val | A pointer to an empty destination char *string |
Definition at line 1930 of file n_hash.c.
References __n_assert, _ht_get_node(), HASH_STRING, ht_node_type(), LOG_ERR, and n_log.
Referenced by new_ht().
int _ht_get_string_trie | ( | HASH_TABLE * | table, |
const char * | key, | ||
char ** | val | ||
) |
Retrieve an char *string value in the hash table, at the given key.
Leave val untouched if key is not found.
table | targeted hash table |
key | associated value's key |
val | a pointer to a destination char *string |
Definition at line 445 of file n_hash.c.
References __n_assert, _ht_get_node_trie(), HASH_STRING, ht_node_type(), LOG_ERR, and n_log.
Referenced by new_ht_trie().
int _ht_is_leaf_node_trie | ( | HASH_TABLE * | table, |
const char * | key | ||
) |
Search a key and tell if it's holding a value (leaf)
table | targeted hash table |
key | key verify |
Definition at line 594 of file n_hash.c.
References __n_assert, LOG_ERR, and n_log.
Referenced by _ht_remove_trie().
HASH_NODE * _ht_new_double_node | ( | HASH_TABLE * | table, |
const char * | key, | ||
double | value | ||
) |
node creation, HASH_CLASSIC mode
table | targeted table |
key | key of new node |
value | double value of key |
Definition at line 1540 of file n_hash.c.
References __n_assert, _ht_new_node(), and HASH_DOUBLE.
Referenced by _ht_put_double().
HASH_NODE * _ht_new_int_node | ( | HASH_TABLE * | table, |
const char * | key, | ||
int | value | ||
) |
node creation, HASH_CLASSIC mode
table | targeted table |
key | key of new node |
value | int value of key |
Definition at line 1519 of file n_hash.c.
References __n_assert, _ht_new_node(), and HASH_INT.
Referenced by _ht_put_int().
HASH_NODE * _ht_new_node | ( | HASH_TABLE * | table, |
const char * | key | ||
) |
node creation, HASH_CLASSIC mode
table | targeted table |
key | key of new node |
Definition at line 1480 of file n_hash.c.
References __n_assert, Free, LOG_ERR, Malloc, MurmurHash, and n_log.
Referenced by _ht_new_double_node(), _ht_new_int_node(), _ht_new_ptr_node(), _ht_new_string_node(), and _ht_new_string_ptr_node().
HASH_NODE * _ht_new_node_trie | ( | HASH_TABLE * | table, |
const char | key | ||
) |
node creation, HASH_CLASSIC mode
table | targeted table |
key | key of new node |
Definition at line 32 of file n_hash.c.
References __n_assert, Free, LOG_ERR, Malloc, and n_log.
Referenced by _empty_ht_trie(), _ht_put_double_trie(), _ht_put_int_trie(), _ht_put_ptr_trie(), _ht_put_string_ptr_trie(), _ht_put_string_trie(), and new_ht_trie().
HASH_NODE * _ht_new_ptr_node | ( | HASH_TABLE * | table, |
const char * | key, | ||
void * | value, | ||
void(*)(void *ptr) | destructor | ||
) |
node creation, HASH_CLASSIC mode, pointer to string value
table | targeted table |
key | key of new node |
value | pointer data of key |
destructor | function pointer to a destructor of value type |
Definition at line 1607 of file n_hash.c.
References __n_assert, _ht_new_node(), and HASH_PTR.
Referenced by _ht_put_ptr().
HASH_NODE * _ht_new_string_node | ( | HASH_TABLE * | table, |
const char * | key, | ||
char * | value | ||
) |
node creation, HASH_CLASSIC mode, strdup of value
table | targeted table |
key | key of new node |
value | char *value of key |
Definition at line 1561 of file n_hash.c.
References __n_assert, _ht_new_node(), and HASH_STRING.
Referenced by _ht_put_string(), and _ht_put_string_ptr().
HASH_NODE * _ht_new_string_ptr_node | ( | HASH_TABLE * | table, |
const char * | key, | ||
char * | value | ||
) |
node creation, HASH_CLASSIC mode, pointer to string value
table | targeted table |
key | key of new node |
value | char *value of key |
Definition at line 1585 of file n_hash.c.
References __n_assert, _ht_new_node(), and HASH_STRING.
void _ht_node_destroy | ( | void * | node | ) |
destroy a HASH_NODE by first calling the HASH_NODE destructor
node | The node to kill |
Definition at line 624 of file n_hash.c.
References __n_assert, _ht_node_destroy(), Free, FreeNoLog, HASH_PTR, and HASH_STRING.
Referenced by _destroy_ht_trie(), _empty_ht(), _empty_ht_trie(), _ht_node_destroy(), _ht_put_double(), _ht_put_int(), _ht_put_ptr(), _ht_put_string(), _ht_put_string_ptr(), _ht_remove(), _ht_remove_trie(), ht_put_ptr_ex(), and ht_remove_ex().
void _ht_print | ( | HASH_TABLE * | table | ) |
Generic print func call for classic hash tables.
table | targeted hash table |
Definition at line 2069 of file n_hash.c.
References __n_assert, and ht_foreach.
Referenced by new_ht().
void _ht_print_trie | ( | HASH_TABLE * | table | ) |
Generic print func call for trie trees.
table | targeted hash table |
Definition at line 827 of file n_hash.c.
References __n_assert, and _ht_print_trie_helper().
Referenced by new_ht_trie().
void _ht_print_trie_helper | ( | HASH_TABLE * | table, |
HASH_NODE * | node | ||
) |
Recursive function to print trie tree's keys and values.
table | targeted hash table |
node | current node |
Definition at line 787 of file n_hash.c.
References _ht_print_trie_helper(), HASH_DOUBLE, HASH_INT, HASH_PTR, and HASH_STRING.
Referenced by _ht_print_trie(), and _ht_print_trie_helper().
int _ht_put_double | ( | HASH_TABLE * | table, |
const char * | key, | ||
double | value | ||
) |
put a double value with given key in the targeted hash table
table | targeted hash table |
key | associated value's key |
value | double value to put |
Definition at line 1669 of file n_hash.c.
References __n_assert, _ht_get_node(), _ht_new_double_node(), _ht_node_destroy(), HASH_DOUBLE, ht_node_type(), list_push(), LOG_ERR, and n_log.
Referenced by new_ht().
int _ht_put_double_trie | ( | HASH_TABLE * | table, |
const char * | key, | ||
double | value | ||
) |
put a double value with given key in the targeted hash table [TRIE HASH TABLE)
table | targeted hash table |
key | associated value's key |
value | double value to put |
Definition at line 125 of file n_hash.c.
References __n_assert, _ht_new_node_trie(), HASH_DOUBLE, LOG_ERR, and n_log.
Referenced by new_ht_trie().
int _ht_put_int | ( | HASH_TABLE * | table, |
const char * | key, | ||
int | value | ||
) |
put an integral value with given key in the targeted hash table [CLASSIC HASH TABLE)
table | targeted table |
key | associated value's key |
value | integral value to put |
Definition at line 1631 of file n_hash.c.
References __n_assert, _ht_get_node(), _ht_new_int_node(), _ht_node_destroy(), HASH_INT, ht_node_type(), list_push(), LOG_ERR, and n_log.
Referenced by new_ht().
int _ht_put_int_trie | ( | HASH_TABLE * | table, |
const char * | key, | ||
int | value | ||
) |
put an integral value with given key in the targeted hash table [TRIE HASH TABLE)
table | targeted hash table |
key | associated value's key |
value | integral value to put |
Definition at line 72 of file n_hash.c.
References __n_assert, _ht_new_node_trie(), HASH_INT, LOG_ERR, and n_log.
Referenced by new_ht_trie().
int _ht_put_ptr | ( | HASH_TABLE * | table, |
const char * | key, | ||
void * | ptr, | ||
void(*)(void *ptr) | destructor | ||
) |
put a pointer value with given key in the targeted hash table
table | targeted hash table |
key | Associated value's key |
ptr | pointer value to put |
destructor | Pointer to the ptr type destructor function. Leave to NULL if there isn't |
Definition at line 1708 of file n_hash.c.
References __n_assert, _ht_get_node(), _ht_new_ptr_node(), _ht_node_destroy(), HASH_PTR, ht_node_type(), list_push(), LOG_ERR, and n_log.
Referenced by new_ht().
int _ht_put_ptr_trie | ( | HASH_TABLE * | table, |
const char * | key, | ||
void * | ptr, | ||
void(*)(void *ptr) | destructor | ||
) |
put a pointer to the string value with given key in the targeted hash table [TRIE HASH TABLE)
table | targeted hash table |
key | associated value's key |
ptr | pointer value to put |
destructor | the destructor func for ptr or NULL |
Definition at line 286 of file n_hash.c.
References __n_assert, _ht_new_node_trie(), HASH_PTR, LOG_ERR, and n_log.
Referenced by new_ht_trie().
int _ht_put_string | ( | HASH_TABLE * | table, |
const char * | key, | ||
char * | string | ||
) |
put a null terminated char *string with given key in the targeted hash table (copy of string)
table | targeted hash table |
key | Associated value's key |
string | string value to put (will be strdup'ed) |
Definition at line 1752 of file n_hash.c.
References __n_assert, _ht_get_node(), _ht_new_string_node(), _ht_node_destroy(), Free, HASH_STRING, ht_node_type(), list_push(), LOG_ERR, and n_log.
Referenced by new_ht().
int _ht_put_string_ptr | ( | HASH_TABLE * | table, |
const char * | key, | ||
char * | string | ||
) |
put a null terminated char *string with given key in the targeted hash table (pointer)
table | targeted hash table |
key | Associated value's key |
string | The string to put |
Definition at line 1792 of file n_hash.c.
References __n_assert, _ht_get_node(), _ht_new_string_node(), _ht_node_destroy(), Free, HASH_STRING, ht_node_type(), list_push(), LOG_ERR, and n_log.
Referenced by new_ht().
int _ht_put_string_ptr_trie | ( | HASH_TABLE * | table, |
const char * | key, | ||
char * | string | ||
) |
put a pointer to the string value with given key in the targeted hash table [TRIE HASH TABLE)
table | targeted hash table |
key | associated value's key |
string | string value to put (pointer) |
Definition at line 233 of file n_hash.c.
References __n_assert, _ht_new_node_trie(), HASH_STRING, LOG_ERR, and n_log.
Referenced by new_ht_trie().
int _ht_put_string_trie | ( | HASH_TABLE * | table, |
const char * | key, | ||
char * | string | ||
) |
put a duplicate of the string value with given key in the targeted hash table [TRIE HASH TABLE)
table | targeted hash table |
key | associated value's key |
string | string value to put (copy) |
Definition at line 177 of file n_hash.c.
References __n_assert, _ht_new_node_trie(), HASH_STRING, LOG_ERR, and n_log.
Referenced by new_ht_trie().
int _ht_remove | ( | HASH_TABLE * | table, |
const char * | key | ||
) |
Remove a key from a hash table.
table | targeted hash table |
key | Key to remove |
Definition at line 1960 of file n_hash.c.
References __n_assert, _ht_node_destroy(), list_foreach, LOG_ERR, MurmurHash, n_log, remove_list_node, and HASH_TABLE::size.
Referenced by new_ht().
int _ht_remove_trie | ( | HASH_TABLE * | table, |
const char * | key | ||
) |
Remove a key from a trie table and destroy the node.
table | targeted tabled |
key | the node key to kill |
Definition at line 670 of file n_hash.c.
References __n_assert, _ht_find_longest_prefix_trie(), _ht_is_leaf_node_trie(), _ht_node_destroy(), Free, LOG_ERR, and n_log.
Referenced by new_ht_trie().
LIST * _ht_search | ( | HASH_TABLE * | table, |
int(*)(HASH_NODE *node) | node_is_matching | ||
) |
Search hash table's keys and apply a matching func to put results in the list.
table | targeted table |
node_is_matching | pointer to a matching function to use |
Definition at line 2090 of file n_hash.c.
References __n_assert, ht_foreach, list_destroy(), list_push(), and new_generic_list().
Referenced by new_ht().
LIST * _ht_search_trie | ( | HASH_TABLE * | table, |
int(*)(HASH_NODE *node) | node_is_matching | ||
) |
Search tree's keys and apply a matching func to put results in the list.
table | targeted table |
node_is_matching | pointer to a matching function to use |
Definition at line 875 of file n_hash.c.
References __n_assert, _ht_search_trie_helper(), list_destroy(), and new_generic_list().
Referenced by new_ht_trie().
void _ht_search_trie_helper | ( | LIST * | results, |
HASH_NODE * | node, | ||
int(*)(HASH_NODE *node) | node_is_matching | ||
) |
Recursive function to search tree's keys and apply a matching func to put results in the list.
results | targeted and initialized LIST in which the matching nodes will be put |
node | targeted starting trie node |
node_is_matching | pointer to a matching function to use |
Definition at line 848 of file n_hash.c.
References _ht_search_trie_helper(), and list_push().
Referenced by _ht_search_trie(), and _ht_search_trie_helper().
FORCE_INLINE uint32_t fmix32 | ( | uint32_t | h | ) |
Finalization mix - force all bits of a hash block to avalanche (from murmur's author)
h | value |
Definition at line 1005 of file n_hash.c.
Referenced by MurmurHash3_x86_128(), and MurmurHash3_x86_32().
FORCE_INLINE uint64_t fmix64 | ( | uint64_t | k | ) |
Finalization mix - force all bits of a hash block to avalanche (from murmur's author)
k | value |
Definition at line 1023 of file n_hash.c.
References BIG_CONSTANT.
Referenced by MurmurHash3_x64_128().
FORCE_INLINE uint32_t getblock32 | ( | const uint32_t * | p, |
const size_t | i | ||
) |
Block read - modified from murmur's author, ajusted byte endianess
p | value |
i | position |
Definition at line 984 of file n_hash.c.
References BYTESWAP32.
Referenced by MurmurHash3_x86_128(), and MurmurHash3_x86_32().
FORCE_INLINE uint64_t getblock64 | ( | const uint64_t * | p, |
const size_t | i | ||
) |
Block read - modified from murmur's author, ajusted byte endianess.
p | value |
i | position |
Definition at line 994 of file n_hash.c.
References BYTESWAP64.
Referenced by MurmurHash3_x64_128().