X-Git-Url: https://git.liburcu.org/?p=urcu.git;a=blobdiff_plain;f=urcu-ht.h;h=7e3c36cb2126bfe654b93c512dbf6d494d1402d1;hp=0cbd1e648799171be694865895e0d712fa29721d;hb=1e52eccf3cb657dccb197132f7cb47b683902538;hpb=ab7d5fc6ff3128b5699e1871e9726f4e79b8f2e6 diff --git a/urcu-ht.h b/urcu-ht.h index 0cbd1e6..7e3c36c 100644 --- a/urcu-ht.h +++ b/urcu-ht.h @@ -1,14 +1,27 @@ #ifndef _URCU_HT_H #define _URCU_HT_H -#define HASH_SIZE 4096 -typedef unsigned long (*ht_hash_fct)(void *key); +#include -struct rcu_ht *ht_new(ht_hash_fct hash_fct, void (*free_fct)(void *data)); +/* + * Caution ! + * Ensure writer threads are registered as urcu readers and with with + * urcu-defer. + * Ensure reader threads are registered as urcu readers. + */ -void ht_delete_all(struct rcu_ht *ht); +typedef uint32_t (*ht_hash_fct)(void *key, uint32_t length, uint32_t initval); -void ht_destroy(struct rcu_ht *ht); +/* + * init_size must be power of two. + */ +struct rcu_ht *ht_new(ht_hash_fct hash_fct, void (*free_fct)(void *data), + unsigned long init_size, uint32_t keylen, + uint32_t hashseed); + +int ht_delete_all(struct rcu_ht *ht); + +int ht_destroy(struct rcu_ht *ht); void *ht_lookup(struct rcu_ht *ht, void *key); @@ -18,6 +31,8 @@ int ht_delete(struct rcu_ht *ht, void *key); void *ht_steal(struct rcu_ht *ht, void *key); -unsigned long stupid_hash(void *key); +void ht_resize(struct rcu_ht *ht, int growth); + +uint32_t ht_jhash(void *key, uint32_t length, uint32_t initval); #endif /* _URCU_HT_H */