36 #include <citrusleaf/cf_types.h>
46 #define SHASH_ERR_FOUND -4
47 #define SHASH_ERR_NOTFOUND -3
48 #define SHASH_ERR_BUFSZ -2
55 #define SHASH_CR_RESIZE 0x01
60 #define SHASH_CR_GRAB 0x02
65 #define SHASH_CR_MT_BIGLOCK 0x04
70 #define SHASH_CR_MT_MANYLOCK 0x08
76 #define SHASH_CR_UNTRACKED 0x10
81 #define SHASH_REDUCE_DELETE (1)
151 int shash_put(shash *h,
void *key,
void *value);
169 int shash_get(shash *h,
void *key,
void *value);
180 int shash_get_vlock(shash *h,
void *key,
void **value,pthread_mutex_t **vlock);
256 #define SHASH_ELEM_KEY_PTR(_h, _e) ( (void *) _e->data )
257 #define SHASH_ELEM_VALUE_PTR(_h, _e) ( (void *) (_e->data + _h->key_len) )
258 #define SHASH_ELEM_SZ(_h) ( sizeof(shash_elem) + (_h->key_len) + (_h->value_len) )
int shash_delete(shash *h, void *key)
uint32_t(* shash_hash_fn)(void *key)
int shash_delete_lockfree(shash *h, void *key)
int shash_create(shash **h, shash_hash_fn h_fn, uint32_t key_len, uint32_t value_len, uint32_t sz, uint flags)
int shash_return(shash *h, void *value)
int shash_put_duplicate(shash *h, void *key, void *value)
int shash_put(shash *h, void *key, void *value)
struct shash_elem_s * next
int shash_reduce_delete(shash *h, shash_reduce_fn reduce_fn, void *udata)
int shash_get_and_delete(shash *h, void *key, void *value)
int shash_get(shash *h, void *key, void *value)
int shash_grab(shash *h, void *key, uint32_t key_len, void **value, uint32_t *value_len)
int shash_reduce(shash *h, shash_reduce_fn reduce_fn, void *udata)
int(* shash_reduce_fn)(void *key, void *data, void *udata)
int shash_update(shash *h, void *key, void *value_old, void *value_new, shash_update_fn update_fn, void *udata)
void(* shash_update_fn)(void *key, void *value_old, void *value_new, void *udata)
void shash_destroy(shash *h)
int shash_put_unique(shash *h, void *key, void *value)
int shash_get_vlock(shash *h, void *key, void **value, pthread_mutex_t **vlock)
pthread_mutex_t * lock_table
void shash_deleteall_lockfree(shash *h)
uint32_t shash_get_size(shash *h)