X-Git-Url: https://git.liburcu.org/?p=urcu.git;a=blobdiff_plain;f=urcu-ht.h;h=baf144d9086a872aa7f44ccfbaf6a147c73d3f9d;hp=58a2cedc8e887337f173cc17b607236bc457a05f;hb=c4aed19a0ef9f02e474cee682bd261dfaa56a495;hpb=674f7a6983f888438c36f8fba179db1a5349d3e9;ds=sidebyside diff --git a/urcu-ht.h b/urcu-ht.h index 58a2ced..baf144d 100644 --- a/urcu-ht.h +++ b/urcu-ht.h @@ -3,17 +3,24 @@ #include -typedef uint32_t (*ht_hash_fct)(void *key); +/* + * Caution ! + * Ensure writer threads are registered as urcu readers and with urcu-defer. + * Ensure reader threads are registered as urcu readers. + */ + +typedef uint32_t (*ht_hash_fct)(void *key, uint32_t length, uint32_t initval); /* * 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); + unsigned long init_size, uint32_t keylen, + uint32_t hashseed); -void ht_delete_all(struct rcu_ht *ht); +int ht_delete_all(struct rcu_ht *ht); -void ht_destroy(struct rcu_ht *ht); +int ht_destroy(struct rcu_ht *ht); void *ht_lookup(struct rcu_ht *ht, void *key); @@ -23,6 +30,8 @@ int ht_delete(struct rcu_ht *ht, void *key); void *ht_steal(struct rcu_ht *ht, void *key); -uint32_t ht_jhash(void *key, u32 length, u32 initval); +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 */