![]() |
Nilorea Library
C utilities for networking, threading, graphics
|
Data Structures | |
union | HASH_DATA |
union of the possibles data values of a node More... | |
struct | HASH_NODE |
structure of a hash table node More... | |
struct | HASH_TABLE |
structure of a hash table More... | |
Macros | |
#define | HASH_CLASSIC 128 |
Murmur hash using hash key string, hash key numeric value, index table with lists of elements. | |
#define | HASH_DOUBLE 2 |
value of double type inside the hash node | |
#define | HASH_INT 1 |
compatibility with existing rot func | |
#define | HASH_INT_TYPE int64_t |
type of a HASH_INT in 64 bits | |
#define | HASH_PTR 8 |
value of pointer type inside the hash node | |
#define | HASH_STRING 4 |
value of char * type inside the hash node | |
#define | HASH_TRIE 256 |
TRIE tree using hash key string. | |
#define | HASH_UNKNOWN 16 |
value of unknow type inside the hash node | |
#define | hash_val(node, type) ((node && node->ptr) ? ((type*)(((HASH_NODE*)node->ptr)->data.ptr)) : NULL) |
Cast a HASH_NODE element. | |
#define | HASH_VAL(node, type) ((node && node->data.ptr) ? ((type*)node->data.ptr) : NULL) |
Cast a HASH_NODE element. | |
#define | ht_foreach(__ITEM_, __HASH_) |
ForEach macro helper (classic / old) | |
#define | HT_FOREACH(__ITEM_, __HASH_, ...) |
ForEach macro helper. | |
#define | HT_FOREACH_R(__ITEM_, __HASH_, __ITERATOR, ...) |
ForEach macro helper. | |
#define | ht_foreach_r(__ITEM_, __HASH_, __ITERATOR_) |
ForEach macro helper, reentrant (classic / old) | |
#define | MurmurHash(__key, __len, __seed, __out) MurmurHash3_x64_128(__key, __len, __seed, __out) |
Murmur hash macro helper 64 bits. | |
Typedefs | |
typedef size_t | HASH_VALUE |
type of a HASH_VALUE | |
Functions | |
int | destroy_ht (HASH_TABLE **table) |
empty a table and destroy it | |
int | empty_ht (HASH_TABLE *table) |
empty a table | |
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, int64_t *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) | |
size_t | 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, int64_t 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 (size_t 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 size_t len, const 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, const size_t len, const 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_size, size_t alphabet_offset) |
create a TRIE hash table with the alphabet_size, each key value beeing decreased by alphabet_offset | |
size_t | next_prime (size_t nb) |
compute next prime number after nb | |
union HASH_DATA |
struct HASH_NODE |
Data Fields | |
size_t | alphabet_length |
HASH_TRIE mode: size of alphabet and so size of children allocated array. | |
struct HASH_NODE ** | children |
HASH_TRIE mode: pointers to children. | |
union HASH_DATA | data |
data inside the node | |
void(* | destroy_func )(void *ptr) |
destroy_func | |
HASH_VALUE | hash_value |
numeric key of the node if any, else < 0 | |
int | is_leaf |
HASH_TRIE mode: does it have a value. | |
char * | key |
string key of the node if any, else NULL | |
char | key_id |
key id of the node if any | |
int | need_rehash |
flag to mark a node for rehash | |
int | type |
type of the node | |
size_t HASH_NODE::alphabet_length |
HASH_TRIE mode: size of alphabet and so size of children allocated array.
Definition at line 113 of file n_hash.h.
Referenced by _ht_depth_first_search(), _ht_new_node(), _ht_new_node_trie(), _ht_node_destroy(), and _ht_search_trie_helper().
struct HASH_NODE** HASH_NODE::children |
HASH_TRIE mode: pointers to children.
Definition at line 111 of file n_hash.h.
Referenced by _ht_check_trie_divergence(), _ht_depth_first_search(), _ht_get_node_trie(), _ht_is_leaf_node_trie(), _ht_new_node(), _ht_new_node_trie(), _ht_node_destroy(), _ht_print_trie_helper(), _ht_put_double_trie(), _ht_put_int_trie(), _ht_put_ptr_trie(), _ht_put_string_ptr_trie(), _ht_put_string_trie(), _ht_remove_trie(), _ht_search_trie_helper(), and ht_get_completion_list().
union HASH_DATA HASH_NODE::data |
data inside the node
Definition at line 103 of file n_hash.h.
Referenced by _ht_get_double(), _ht_get_double_trie(), _ht_get_int(), _ht_get_int_trie(), _ht_get_ptr(), _ht_get_ptr_trie(), _ht_get_string(), _ht_get_string_trie(), _ht_new_double_node(), _ht_new_int_node(), _ht_new_node(), _ht_new_node_trie(), _ht_new_ptr_node(), _ht_new_string_node(), _ht_new_string_ptr_node(), _ht_node_destroy(), _ht_print_trie_helper(), _ht_put_double(), _ht_put_double_trie(), _ht_put_int(), _ht_put_int_trie(), _ht_put_ptr(), _ht_put_ptr_trie(), _ht_put_string(), _ht_put_string_ptr(), _ht_put_string_ptr_trie(), _ht_put_string_trie(), _n_nodup_log(), _n_nodup_log_indexed(), check_n_log_dup(), check_n_log_dup_indexed(), dump_nodup_log(), ht_get_ptr_ex(), and ht_put_ptr_ex().
void(* HASH_NODE::destroy_func) (void *ptr) |
destroy_func
Definition at line 105 of file n_hash.h.
Referenced by _ht_new_node(), _ht_new_node_trie(), _ht_new_ptr_node(), _ht_node_destroy(), _ht_put_ptr(), _ht_put_ptr_trie(), and ht_put_ptr_ex().
HASH_VALUE HASH_NODE::hash_value |
numeric key of the node if any, else < 0
Definition at line 99 of file n_hash.h.
Referenced by _ht_new_node(), _ht_new_node_trie(), _ht_put_double(), _ht_put_int(), _ht_put_ptr(), _ht_put_string(), _ht_put_string_ptr(), ht_get_node_ex(), ht_put_ptr_ex(), ht_remove_ex(), and ht_resize().
int HASH_NODE::is_leaf |
HASH_TRIE mode: does it have a value.
Definition at line 107 of file n_hash.h.
Referenced by _ht_depth_first_search(), _ht_get_double_trie(), _ht_get_int_trie(), _ht_get_ptr_trie(), _ht_get_string_trie(), _ht_is_leaf_node_trie(), _ht_new_node(), _ht_new_node_trie(), _ht_print_trie_helper(), _ht_put_double_trie(), _ht_put_int_trie(), _ht_put_ptr_trie(), _ht_put_string_ptr_trie(), _ht_put_string_trie(), and _ht_search_trie_helper().
char* HASH_NODE::key |
string key of the node if any, else NULL
Definition at line 95 of file n_hash.h.
Referenced by _ht_depth_first_search(), _ht_get_node(), _ht_new_node(), _ht_new_node_trie(), _ht_node_destroy(), _ht_print_trie_helper(), _ht_put_double(), _ht_put_double_trie(), _ht_put_int(), _ht_put_int_trie(), _ht_put_ptr(), _ht_put_ptr_trie(), _ht_put_string(), _ht_put_string_ptr(), _ht_put_string_ptr_trie(), _ht_put_string_trie(), _ht_remove(), _ht_search(), _ht_search_trie_helper(), ht_get_completion_list(), ht_put_ptr_ex(), and main().
char HASH_NODE::key_id |
key id of the node if any
Definition at line 97 of file n_hash.h.
Referenced by _ht_new_node(), and _ht_new_node_trie().
int HASH_NODE::need_rehash |
flag to mark a node for rehash
Definition at line 109 of file n_hash.h.
Referenced by _ht_new_node(), _ht_new_node_trie(), and ht_resize().
int HASH_NODE::type |
type of the node
Definition at line 101 of file n_hash.h.
Referenced by _ht_get_double(), _ht_get_double_trie(), _ht_get_int(), _ht_get_int_trie(), _ht_get_ptr(), _ht_get_ptr_trie(), _ht_get_string(), _ht_get_string_trie(), _ht_new_double_node(), _ht_new_int_node(), _ht_new_ptr_node(), _ht_new_string_node(), _ht_new_string_ptr_node(), _ht_node_destroy(), _ht_print_trie_helper(), _ht_put_double(), _ht_put_double_trie(), _ht_put_int(), _ht_put_int_trie(), _ht_put_ptr(), _ht_put_ptr_trie(), _ht_put_string(), _ht_put_string_ptr(), _ht_put_string_ptr_trie(), _ht_put_string_trie(), ht_get_ptr_ex(), ht_node_type(), and ht_put_ptr_ex().
struct HASH_TABLE |
structure of a hash table
Data Fields | |
size_t | alphabet_length |
HASH_TRIE mode: size of the alphabet. | |
size_t | alphabet_offset |
HASH_TRIE mode: offset to deduce to individual key digits. | |
int(* | destroy_ht )(struct HASH_TABLE **table) |
destroy a hash table | |
int(* | empty_ht )(struct HASH_TABLE *table) |
empty a hash table. | |
LIST ** | hash_table |
HASH_CLASSIC mode: preallocated hash table. | |
int(* | ht_get_double )(struct HASH_TABLE *table, const char *key, double *val) |
get a double from a key's node | |
int(* | ht_get_int )(struct HASH_TABLE *table, const char *key, int64_t *val) |
get an int from a key's node | |
HASH_NODE *(* | ht_get_node )(struct HASH_TABLE *table, const char *key) |
get HASH_NODE at 'key' from table | |
int(* | ht_get_ptr )(struct HASH_TABLE *table, const char *key, void **val) |
get a pointer from a key's node | |
int(* | ht_get_string )(struct HASH_TABLE *table, const char *key, char **val) |
get a char *string from a key's node | |
void(* | ht_print )(struct HASH_TABLE *table) |
print table | |
int(* | ht_put_double )(struct HASH_TABLE *table, const char *key, double val) |
put a double | |
int(* | ht_put_int )(struct HASH_TABLE *table, const char *key, int64_t val) |
put an integer | |
int(* | ht_put_ptr )(struct HASH_TABLE *table, const char *key, void *ptr, void(*destructor)(void *ptr)) |
put a a pointer | |
int(* | ht_put_string )(struct HASH_TABLE *table, const char *key, char *val) |
put an char *string | |
int(* | ht_put_string_ptr )(struct HASH_TABLE *table, const char *key, char *val) |
put an char *string pointer | |
int(* | ht_remove )(struct HASH_TABLE *table, const char *key) |
remove given's key node from the table | |
LIST *(* | ht_search )(struct HASH_TABLE *table, int(*node_is_matching)(HASH_NODE *node)) |
search elements given an expression | |
unsigned int | mode |
hashing mode, murmurhash and classic HASH_MURMUR, or HASH_TRIE | |
size_t | nb_keys |
total number of used keys in the table | |
HASH_NODE * | root |
HASH_TRIE mode: Start of tree. | |
size_t | seed |
table's seed | |
size_t | size |
size of the hash table | |
size_t HASH_TABLE::alphabet_length |
HASH_TRIE mode: size of the alphabet.
Definition at line 129 of file n_hash.h.
Referenced by _ht_check_trie_divergence(), _ht_get_node_trie(), _ht_is_leaf_node_trie(), _ht_new_node_trie(), _ht_print_trie_helper(), _ht_put_double_trie(), _ht_put_int_trie(), _ht_put_ptr_trie(), _ht_put_string_ptr_trie(), _ht_put_string_trie(), _ht_remove_trie(), ht_get_completion_list(), and new_ht_trie().
size_t HASH_TABLE::alphabet_offset |
HASH_TRIE mode: offset to deduce to individual key digits.
Definition at line 131 of file n_hash.h.
Referenced by _ht_check_trie_divergence(), _ht_get_node_trie(), _ht_is_leaf_node_trie(), _ht_put_double_trie(), _ht_put_int_trie(), _ht_put_ptr_trie(), _ht_put_string_ptr_trie(), _ht_put_string_trie(), _ht_remove_trie(), ht_get_completion_list(), and new_ht_trie().
int(* HASH_TABLE::destroy_ht) (struct HASH_TABLE **table) |
destroy a hash table
Definition at line 161 of file n_hash.h.
Referenced by new_ht(), and new_ht_trie().
int(* HASH_TABLE::empty_ht) (struct HASH_TABLE *table) |
empty a hash table.
char *strings are also freed
Definition at line 159 of file n_hash.h.
Referenced by empty_ht(), new_ht(), and new_ht_trie().
LIST** HASH_TABLE::hash_table |
HASH_CLASSIC mode: preallocated hash table.
Definition at line 125 of file n_hash.h.
Referenced by _empty_ht(), _ht_get_node(), _ht_print(), _ht_put_double(), _ht_put_int(), _ht_put_ptr(), _ht_put_string(), _ht_put_string_ptr(), _ht_remove(), dump_nodup_log(), ht_get_node_ex(), ht_get_table_collision_percentage(), ht_put_ptr_ex(), ht_remove_ex(), new_ht(), and new_ht_trie().
int(* HASH_TABLE::ht_get_double) (struct HASH_TABLE *table, const char *key, double *val) |
get a double from a key's node
Definition at line 149 of file n_hash.h.
Referenced by ht_get_double(), new_ht(), and new_ht_trie().
int(* HASH_TABLE::ht_get_int) (struct HASH_TABLE *table, const char *key, int64_t *val) |
get an int from a key's node
Definition at line 147 of file n_hash.h.
Referenced by ht_get_int(), new_ht(), and new_ht_trie().
HASH_NODE *(* HASH_TABLE::ht_get_node) (struct HASH_TABLE *table, const char *key) |
get HASH_NODE at 'key' from table
Definition at line 135 of file n_hash.h.
Referenced by ht_get_node(), and new_ht().
int(* HASH_TABLE::ht_get_ptr) (struct HASH_TABLE *table, const char *key, void **val) |
get a pointer from a key's node
Definition at line 151 of file n_hash.h.
Referenced by ht_get_ptr(), new_ht(), and new_ht_trie().
int(* HASH_TABLE::ht_get_string) (struct HASH_TABLE *table, const char *key, char **val) |
get a char *string from a key's node
Definition at line 153 of file n_hash.h.
Referenced by ht_get_string(), new_ht(), and new_ht_trie().
void(* HASH_TABLE::ht_print) (struct HASH_TABLE *table) |
print table
Definition at line 163 of file n_hash.h.
Referenced by ht_print(), new_ht(), and new_ht_trie().
int(* HASH_TABLE::ht_put_double) (struct HASH_TABLE *table, const char *key, double val) |
put a double
Definition at line 139 of file n_hash.h.
Referenced by ht_put_double(), new_ht(), and new_ht_trie().
int(* HASH_TABLE::ht_put_int) (struct HASH_TABLE *table, const char *key, int64_t val) |
put an integer
Definition at line 137 of file n_hash.h.
Referenced by ht_put_int(), new_ht(), and new_ht_trie().
int(* HASH_TABLE::ht_put_ptr) (struct HASH_TABLE *table, const char *key, void *ptr, void(*destructor)(void *ptr)) |
put a a pointer
Definition at line 141 of file n_hash.h.
Referenced by ht_put_ptr(), new_ht(), and new_ht_trie().
int(* HASH_TABLE::ht_put_string) (struct HASH_TABLE *table, const char *key, char *val) |
put an char *string
Definition at line 143 of file n_hash.h.
Referenced by ht_put_string(), new_ht(), and new_ht_trie().
int(* HASH_TABLE::ht_put_string_ptr) (struct HASH_TABLE *table, const char *key, char *val) |
put an char *string pointer
Definition at line 145 of file n_hash.h.
Referenced by ht_put_string_ptr(), new_ht(), and new_ht_trie().
int(* HASH_TABLE::ht_remove) (struct HASH_TABLE *table, const char *key) |
remove given's key node from the table
Definition at line 155 of file n_hash.h.
Referenced by ht_remove(), new_ht(), and new_ht_trie().
LIST *(* HASH_TABLE::ht_search) (struct HASH_TABLE *table, int(*node_is_matching)(HASH_NODE *node)) |
search elements given an expression
Definition at line 157 of file n_hash.h.
Referenced by ht_search(), new_ht(), and new_ht_trie().
unsigned int HASH_TABLE::mode |
hashing mode, murmurhash and classic HASH_MURMUR, or HASH_TRIE
Definition at line 133 of file n_hash.h.
Referenced by ht_get_completion_list(), ht_get_node_ex(), ht_get_ptr_ex(), ht_get_table_collision_percentage(), ht_put_ptr_ex(), ht_remove_ex(), new_ht(), and new_ht_trie().
size_t HASH_TABLE::nb_keys |
total number of used keys in the table
Definition at line 121 of file n_hash.h.
Referenced by _empty_ht(), _empty_ht_trie(), _ht_put_double(), _ht_put_double_trie(), _ht_put_int(), _ht_put_int_trie(), _ht_put_ptr(), _ht_put_ptr_trie(), _ht_put_string(), _ht_put_string_ptr(), _ht_put_string_ptr_trie(), _ht_put_string_trie(), _ht_remove(), _ht_remove_trie(), ht_get_optimal_size(), ht_put_ptr_ex(), ht_remove_ex(), netw_pool_nbclients(), new_ht(), and new_ht_trie().
HASH_NODE* HASH_TABLE::root |
HASH_TRIE mode: Start of tree.
Definition at line 127 of file n_hash.h.
Referenced by _empty_ht_trie(), _ht_check_trie_divergence(), _ht_get_node_trie(), _ht_is_leaf_node_trie(), _ht_print_trie(), _ht_put_double_trie(), _ht_put_int_trie(), _ht_put_ptr_trie(), _ht_put_string_ptr_trie(), _ht_put_string_trie(), _ht_remove_trie(), _ht_search_trie(), ht_get_completion_list(), and new_ht_trie().
size_t HASH_TABLE::seed |
table's seed
Definition at line 123 of file n_hash.h.
Referenced by _ht_get_node(), _ht_new_node(), _ht_remove(), new_ht(), and new_ht_trie().
size_t HASH_TABLE::size |
size of the hash table
Definition at line 119 of file n_hash.h.
Referenced by _empty_ht(), _ht_get_node(), _ht_put_double(), _ht_put_int(), _ht_put_ptr(), _ht_put_string(), _ht_put_string_ptr(), _ht_remove(), dump_nodup_log(), ht_get_node_ex(), ht_get_table_collision_percentage(), ht_put_ptr_ex(), ht_remove_ex(), main(), new_ht(), and new_ht_trie().
#define HASH_CLASSIC 128 |
#define HASH_DOUBLE 2 |
#define HASH_INT 1 |
#define HASH_INT_TYPE int64_t |
#define HASH_PTR 8 |
#define HASH_STRING 4 |
#define HASH_UNKNOWN 16 |
#define hash_val | ( | node, | |
type | |||
) | ((node && node->ptr) ? ((type*)(((HASH_NODE*)node->ptr)->data.ptr)) : NULL) |
#define HASH_VAL | ( | node, | |
type | |||
) | ((node && node->data.ptr) ? ((type*)node->data.ptr) : NULL) |
#define ht_foreach | ( | __ITEM_, | |
__HASH_ | |||
) |
ForEach macro helper (classic / old)
#define HT_FOREACH | ( | __ITEM_, | |
__HASH_, | |||
... | |||
) |
ForEach macro helper.
#define HT_FOREACH_R | ( | __ITEM_, | |
__HASH_, | |||
__ITERATOR, | |||
... | |||
) |
ForEach macro helper.
#define ht_foreach_r | ( | __ITEM_, | |
__HASH_, | |||
__ITERATOR_ | |||
) |
ForEach macro helper, reentrant (classic / old)
#define MurmurHash | ( | __key, | |
__len, | |||
__seed, | |||
__out | |||
) | MurmurHash3_x64_128(__key, __len, __seed, __out) |
typedef size_t HASH_VALUE |
int destroy_ht | ( | HASH_TABLE ** | table | ) |
empty a table and destroy it
table | targeted hash table |
Definition at line 2148 of file n_hash.c.
References __n_assert.
Referenced by close_nodup_log(), destroy_config_file_section(), handle_request(), main(), main(), and netw_destroy_pool().
int empty_ht | ( | HASH_TABLE * | table | ) |
empty a table
table | targeted hash table |
Definition at line 2138 of file n_hash.c.
References __n_assert, and empty_ht.
Referenced by empty_nodup_table(), and main().
LIST * ht_get_completion_list | ( | HASH_TABLE * | table, |
const char * | keybud, | ||
size_t | max_results | ||
) |
get next matching keys in table tree
table | targeted hash table |
keybud | starting characters of the keys we want |
max_results | maximum number of matching keys in list. From UNLIMITED_LIST_ITEMS (0) to MAX_LIST_ITEMS (SIZE_MAX). |
Definition at line 2303 of file n_hash.c.
References __n_assert, _ht_depth_first_search(), _ht_get_node_trie(), alphabet_length, alphabet_offset, HASH_NODE::children, Free, HASH_CLASSIC, HASH_TRIE, ht_foreach, key, HASH_NODE::key, list_destroy(), list_push(), LOG_ERR, mode, n_log, LIST::nb_items, new_generic_list(), and root.
Referenced by main(), and main().
int ht_get_double | ( | HASH_TABLE * | table, |
const char * | key, | ||
double * | val | ||
) |
get double at 'key' from 'table'
table | targeted table |
key | key to retrieve |
val | pointer to double storage |
Definition at line 1989 of file n_hash.c.
References __n_assert, ht_get_double, and key.
Referenced by main().
int ht_get_int | ( | HASH_TABLE * | table, |
const char * | key, | ||
int64_t * | val | ||
) |
get node at 'key' from 'table'
table | targeted table |
key | key to retrieve |
val | pointer to int storage |
Definition at line 2002 of file n_hash.c.
References __n_assert, ht_get_int, and key.
Referenced by main().
HASH_NODE * ht_get_node | ( | HASH_TABLE * | table, |
const char * | key | ||
) |
get node at 'key' from 'table'
table | targeted table |
key | key to retrieve |
Definition at line 1976 of file n_hash.c.
References __n_assert, ht_get_node, and key.
Referenced by _n_nodup_log(), _n_nodup_log_indexed(), check_n_log_dup(), and check_n_log_dup_indexed().
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)
table | Targeted hash table |
hash_value | Associated hash_value |
Definition at line 2159 of file n_hash.c.
References __n_assert, HASH_CLASSIC, hash_table, HASH_NODE::hash_value, list_foreach, mode, size, and LIST::start.
Referenced by ht_get_ptr_ex().
size_t 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)
table | targeted table |
Definition at line 2410 of file n_hash.c.
References __n_assert, is_prime(), nb_keys, and next_prime().
Referenced by ht_optimize(), and main().
int ht_get_ptr | ( | HASH_TABLE * | table, |
const char * | key, | ||
void ** | val | ||
) |
get pointer at 'key' from 'table'
table | targeted table |
key | key to retrieve |
val | pointer to pointer storage |
Definition at line 2015 of file n_hash.c.
References __n_assert, ht_get_ptr, and key.
Referenced by get_config_section_value(), get_nb_config_file_sections_entries(), load_config_file(), main(), and netw_pool_add().
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.
Leave val untouched if key is not found. (HASH_CLASSIC only)
table | Targeted hash table |
hash_value | key pre computed numeric hash value |
val | A pointer to an empty pointer store |
Definition at line 2187 of file n_hash.c.
References __n_assert, HASH_NODE::data, HASH_CLASSIC, HASH_PTR, ht_get_node_ex(), ht_node_type(), LOG_ERR, mode, n_log, HASH_DATA::ptr, and HASH_NODE::type.
int ht_get_string | ( | HASH_TABLE * | table, |
const char * | key, | ||
char ** | val | ||
) |
get string at 'key' from 'table'
table | targeted table |
key | key to retrieve |
val | pointer to string storage |
Definition at line 2028 of file n_hash.c.
References __n_assert, ht_get_string, and key.
Referenced by main().
int ht_get_table_collision_percentage | ( | HASH_TABLE * | table | ) |
get table collision percentage (HASH_CLASSIC mode only)
table | targeted table |
Definition at line 2388 of file n_hash.c.
References __n_assert, HASH_CLASSIC, hash_table, mode, LIST::nb_items, and size.
Referenced by ht_optimize(), and main().
char * ht_node_type | ( | HASH_NODE * | node | ) |
get the type of a node , text version
node | node to check |
Definition at line 1249 of file n_hash.c.
References __n_assert, HASH_UNKNOWN, and HASH_NODE::type.
Referenced by _ht_get_double(), _ht_get_double_trie(), _ht_get_int(), _ht_get_int_trie(), _ht_get_ptr(), _ht_get_ptr_trie(), _ht_get_string(), _ht_get_string_trie(), _ht_put_double(), _ht_put_int(), _ht_put_ptr(), _ht_put_string(), _ht_put_string_ptr(), ht_get_ptr_ex(), and ht_put_ptr_ex().
int ht_optimize | ( | HASH_TABLE ** | table | ) |
try an automatic optimization of the table
table | targeted table |
Definition at line 2500 of file n_hash.c.
References __n_assert, ht_get_optimal_size(), ht_get_table_collision_percentage(), and ht_resize().
Referenced by main().
void ht_print | ( | HASH_TABLE * | table | ) |
print contents of table
table | targeted hash table |
Definition at line 2116 of file n_hash.c.
References __n_assert, and ht_print.
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 table |
key | key to retrieve |
value | double value to put |
Definition at line 2041 of file n_hash.c.
References __n_assert, ht_put_double, and key.
Referenced by main().
int ht_put_int | ( | HASH_TABLE * | table, |
const char * | key, | ||
int64_t | value | ||
) |
put an integral value with given key in the targeted hash table
table | targeted hash table |
key | associated value's key |
value | integral value to put |
Definition at line 2054 of file n_hash.c.
References __n_assert, ht_put_int, and key.
Referenced by main().
int ht_put_ptr | ( | 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
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 2068 of file n_hash.c.
References __n_assert, ht_put_ptr, and key.
Referenced by load_config_file(), main(), main(), and netw_pool_add().
int ht_put_ptr_ex | ( | HASH_TABLE * | table, |
HASH_VALUE | hash_value, | ||
void * | val, | ||
void(*)(void *ptr) | destructor | ||
) |
put a pointer value with given key in the targeted hash table (HASH_CLASSIC only)
table | Targeted hash table |
hash_value | numerical hash key |
val | pointer value to put |
destructor | Pointer to the ptr type destructor function. Leave to NULL if there isn't |
Definition at line 2213 of file n_hash.c.
References __n_assert, _ht_node_destroy(), HASH_NODE::data, HASH_NODE::destroy_func, HASH_CLASSIC, HASH_PTR, hash_table, HASH_NODE::hash_value, ht_node_type(), HASH_NODE::key, list_foreach, list_push(), LOG_ERR, Malloc, mode, n_log, nb_keys, HASH_DATA::ptr, size, and HASH_NODE::type.
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
table | targeted hash table |
key | associated value's key |
string | string value to put (copy) |
Definition at line 2081 of file n_hash.c.
References __n_assert, ht_put_string, and key.
Referenced by _n_nodup_log(), _n_nodup_log_indexed(), main(), and netw_parse_post_data().
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
table | targeted hash table |
key | associated value's key |
string | string value to put (pointer) |
Definition at line 2094 of file n_hash.c.
References __n_assert, ht_put_string_ptr, and key.
int ht_remove | ( | HASH_TABLE * | table, |
const char * | key | ||
) |
remove and delete node at key in table
table | targeted hash table |
key | key of node to destroy |
Definition at line 2106 of file n_hash.c.
References __n_assert, ht_remove, and key.
Referenced by netw_pool_remove().
int ht_remove_ex | ( | HASH_TABLE * | table, |
HASH_VALUE | hash_value | ||
) |
Remove a key from a hash table (HASH_CLASSIC only)
table | Targeted hash table |
hash_value | key pre computed numeric hash value |
Definition at line 2262 of file n_hash.c.
References __n_assert, _ht_node_destroy(), HASH_CLASSIC, hash_table, HASH_NODE::hash_value, list_foreach, LOG_ERR, mode, n_log, nb_keys, remove_list_node, size, and LIST::start.
int ht_resize | ( | HASH_TABLE ** | table, |
size_t | size | ||
) |
rehash table according to size (HASH_CLASSIC mode only)
table | targeted table |
size | new hash table size |
Definition at line 2425 of file n_hash.c.
References __n_assert, Free, HASH_NODE::hash_value, HT_FOREACH, list_destroy(), list_node_push(), list_node_shift(), LOG_ERR, MAX_LIST_ITEMS, n_log, HASH_NODE::need_rehash, new_generic_list(), LIST_NODE::next, LIST_NODE::prev, and Realloc.
Referenced by ht_optimize(), and main().
LIST * ht_search | ( | HASH_TABLE * | table, |
int(*)(HASH_NODE *node) | node_is_matching | ||
) |
int is_prime | ( | size_t | nb | ) |
test if number is a prime number or not
nb | number to test |
Definition at line 2349 of file n_hash.c.
Referenced by ht_get_optimal_size(), and next_prime().
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.
The author hereby disclaims copyright to this source code. Note - The x86 and x64 versions do not produce the same results, as the algorithms are optimized for their respective platforms. You can still compile and run any of them on any platform, but your performance with the non-native version will be less than optimal.
key | char *string as the key |
len | size of the key |
seed | seed value for murmur hash |
out | generated hash |
Definition at line 1127 of file n_hash.c.
References FALL_THROUGH, fmix64(), getblock64(), key, and ROTL64.
void MurmurHash3_x86_128 | ( | const void * | key, |
const size_t | len, | ||
const uint32_t | seed, | ||
void * | out | ||
) |
MurmurHash3 was written by Austin Appleby, and is placed in the public domain.
The author hereby disclaims copyright to this source code. Note - The x86 and x64 versions do not produce the same results, as the algorithms are optimized for their respective platforms. You can still compile and run any of them on any platform, but your performance with the non-native version will be less than optimal.
key | char *string as the key |
len | size of the key |
seed | seed value for murmur hash |
out | generated hash |
Definition at line 959 of file n_hash.c.
References FALL_THROUGH, fmix32(), getblock32(), key, and ROTL32.
void MurmurHash3_x86_32 | ( | const void * | key, |
const size_t | len, | ||
const uint32_t | seed, | ||
void * | out | ||
) |
MurmurHash3 was written by Austin Appleby, and is placed in the public domain.
The author hereby disclaims copyright to this source code. Note - The x86 and x64 versions do not produce the same results, as the algorithms are optimized for their respective platforms. You can still compile and run any of them on any platform, but your performance with the non-native version will be less than optimal.
key | char *string as the key |
len | size of the key |
seed | seed value for murmur hash |
out | generated hash |
Definition at line 901 of file n_hash.c.
References FALL_THROUGH, fmix32(), getblock32(), key, and ROTL32.
HASH_TABLE * new_ht | ( | size_t | size | ) |
Create a hash table with the given size.
size | Size of the root hash node table |
Definition at line 1916 of file n_hash.c.
References __n_assert, _destroy_ht(), _empty_ht(), _ht_get_double(), _ht_get_int(), _ht_get_node(), _ht_get_ptr(), _ht_get_string(), _ht_print(), _ht_put_double(), _ht_put_int(), _ht_put_ptr(), _ht_put_string(), _ht_put_string_ptr(), _ht_remove(), _ht_search(), destroy_ht, empty_ht, Free, HASH_CLASSIC, hash_table, ht_get_double, ht_get_int, ht_get_node, ht_get_ptr, ht_get_string, ht_print, ht_put_double, ht_put_int, ht_put_ptr, ht_put_string, ht_put_string_ptr, ht_remove, ht_search, list_destroy(), LOG_ERR, Malloc, MAX_LIST_ITEMS, mode, n_log, nb_keys, new_generic_list(), seed, and size.
Referenced by init_nodup_log(), load_config_file(), main(), netw_new_pool(), and netw_parse_post_data().
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
alphabet_length | of the alphabet |
alphabet_offset | offset of each character in a key (i.e: to have 'a->z' with 'a' starting at zero, offset must be 32. |
Definition at line 1870 of file n_hash.c.
References __n_assert, _destroy_ht_trie(), _empty_ht_trie(), _ht_get_double_trie(), _ht_get_int_trie(), _ht_get_ptr_trie(), _ht_get_string_trie(), _ht_new_node_trie(), _ht_print_trie(), _ht_put_double_trie(), _ht_put_int_trie(), _ht_put_ptr_trie(), _ht_put_string_ptr_trie(), _ht_put_string_trie(), _ht_remove_trie(), _ht_search_trie(), alphabet_length, alphabet_offset, destroy_ht, empty_ht, Free, hash_table, HASH_TRIE, ht_get_double, ht_get_int, ht_get_ptr, ht_get_string, ht_print, ht_put_double, ht_put_int, ht_put_ptr, ht_put_string, ht_put_string_ptr, ht_remove, ht_search, LOG_ERR, Malloc, mode, n_log, nb_keys, root, seed, and size.
Referenced by main(), and main().
size_t next_prime | ( | size_t | nb | ) |
compute next prime number after nb
nb | number to test |
Definition at line 2371 of file n_hash.c.
References is_prime(), and next_prime().
Referenced by ht_get_optimal_size(), and next_prime().