XROAD
xroad_hash.h
Go to the documentation of this file.
1 
6 #pragma once
7 
8 #include "xroad_common_fwd.h"
9 #include "xroad_common_types.h"
10 #include <stdlib.h>
11 
12 #ifdef __cplusplus
13 extern "C"
14 {
15 #endif
16 
20 typedef uint32_t (*xroad_hash_func_t)(const uint8_t*, uint32_t);
21 
25 typedef int32_t (*xroad_hash_equal_func_t)(const void*, uint32_t, const void*, uint32_t);
26 
30 typedef void (*xroad_hash_free_func_t)(void*, uint32_t, void*, uint32_t);
31 
35 typedef struct
36 {
37  uint32_t size;
38  xroad_hash_func_t hash;
41  xroad_mem_pool_t* pool;
43 
47 typedef struct
48 {
49  xroad_hash_entry_t* entry;
50  xroad_errno_t result;
52 
63  xroad_hash_free_func_t free_func, xroad_mem_pool_t* pool);
64 
65 #define xroad_hash_create(...) \
66 ({ \
67  xroad_hash_va_args_t args = {__VA_ARGS__}; \
68  xroad_hash_create_ex(args.size, args.hash, args.equal, args.dtor, args.pool); \
69 })
70 
76 
77 #define __xroad_hash_dtor__ __dtor__(xroad_hash_destructor)
78 void xroad_hash_destructor(void* hash);
79 
91  xroad_hash_t* hash, const void* key, uint32_t key_size, const void* value, uint32_t value_size);
92 
100 xroad_hash_entry_t* xroad_hash_find(xroad_hash_t* hash, const void* key, uint32_t key_size);
101 
107 
113 uint32_t xroad_hash_entry_get_value_size(const xroad_hash_entry_t* entry);
114 
120 void* xroad_hash_entry_get_value(xroad_hash_entry_t* entry);
121 
130 xroad_hash_entry_t* xroad_hash_entry_set_value(
131  xroad_hash_entry_t* entry, const void* value, uint32_t value_size, xroad_hash_free_func_t free_func);
132 
138 uint32_t xroad_hash_entry_get_key_size(const xroad_hash_entry_t* entry);
139 
145 void* xroad_hash_entry_get_key(xroad_hash_entry_t* entry);
146 
153 xroad_errno_t xroad_hash_entry_delete(xroad_hash_entry_t* entry, xroad_hash_free_func_t free_func);
154 
161 xroad_hash_entry_t* xroad_hash_entry_delete_next(xroad_hash_entry_t* entry, xroad_hash_free_func_t free_func);
162 
167 xroad_hash_entry_t* xroad_hash_get_first(xroad_hash_t* hash);
168 
173 xroad_hash_entry_t* xroad_hash_get_next(xroad_hash_entry_t* entry);
174 
183 xroad_errno_t xroad_hash_delete(xroad_hash_t* hash, const void* key, uint32_t key_size, xroad_hash_free_func_t free_func);
184 
191 
198 
199 #ifdef __cplusplus
200 }
201 #endif
Definition: xroad_hash.h:48
xroad_hash_entry_t * entry
inserted or existing entry
Definition: xroad_hash.h:49
xroad_errno_t result
result of insertion
Definition: xroad_hash.h:50
Definition: xroad_hash.h:36
struct xroad_list_s xroad_list_t
see common/xroad_list.h for deaails
Definition: xroad_common_fwd.h:24
struct xroad_hash_s xroad_hash_t
see common/xroad_hash.h for details
Definition: xroad_common_fwd.h:14
int32_t(* xroad_hash_equal_func_t)(const void *, uint32_t, const void *, uint32_t)
Definition: xroad_hash.h:25
void xroad_hash_destroy(xroad_hash_t *hash)
uint32_t xroad_hash_entry_get_key_size(const xroad_hash_entry_t *entry)
xroad_hash_entry_t * xroad_hash_find(xroad_hash_t *hash, const void *key, uint32_t key_size)
xroad_hash_entry_t * xroad_hash_entry_set_value(xroad_hash_entry_t *entry, const void *value, uint32_t value_size, xroad_hash_free_func_t free_func)
void(* xroad_hash_free_func_t)(void *, uint32_t, void *, uint32_t)
Definition: xroad_hash.h:30
void * xroad_hash_entry_get_value(xroad_hash_entry_t *entry)
xroad_hash_entry_t * xroad_hash_get_next(xroad_hash_entry_t *entry)
xroad_hash_t * xroad_hash_create_ex(uint32_t size, xroad_hash_func_t hash_func, xroad_hash_equal_func_t equal_func, xroad_hash_free_func_t free_func, xroad_mem_pool_t *pool)
void xroad_hash_clear(xroad_hash_t *hash)
xroad_hash_entry_t * xroad_hash_entry_delete_next(xroad_hash_entry_t *entry, xroad_hash_free_func_t free_func)
uint32_t xroad_hash_entry_get_value_size(const xroad_hash_entry_t *entry)
xroad_errno_t xroad_hash_delete(xroad_hash_t *hash, const void *key, uint32_t key_size, xroad_hash_free_func_t free_func)
xroad_list_t * xroad_hash_to_list(xroad_hash_t *hash)
xroad_hash_entry_t * xroad_hash_get_first(xroad_hash_t *hash)
uint32_t xroad_hash_get_size(xroad_hash_t *hash)
xroad_hash_ins_res_t xroad_hash_insert(xroad_hash_t *hash, const void *key, uint32_t key_size, const void *value, uint32_t value_size)
uint32_t(* xroad_hash_func_t)(const uint8_t *, uint32_t)
Definition: xroad_hash.h:20
void * xroad_hash_entry_get_key(xroad_hash_entry_t *entry)
xroad_errno_t xroad_hash_entry_delete(xroad_hash_entry_t *entry, xroad_hash_free_func_t free_func)