]> git.ozlabs.org Git - ccan/blobdiff - ccan/htable/htable.h
htable: reduce size of htable by storing perfect bitnum, not mask.
[ccan] / ccan / htable / htable.h
index 53c447c09b952b198913efa25a48b82d34777242..938b43afc89ce5a6603c45761da17d26b748475e 100644 (file)
 struct htable {
        size_t (*rehash)(const void *elem, void *priv);
        void *priv;
-       unsigned int bits;
-       size_t elems, deleted, max, max_with_deleted;
+       unsigned int bits, perfect_bitnum;
+       size_t elems, deleted;
        /* These are the bits which are the same in all pointers. */
        uintptr_t common_mask, common_bits;
-       uintptr_t perfect_bit;
        uintptr_t *table;
 };
 
@@ -50,7 +49,7 @@ struct htable {
  *     static struct htable ht = HTABLE_INITIALIZER(ht, rehash, NULL);
  */
 #define HTABLE_INITIALIZER(name, rehash, priv)                         \
-       { rehash, priv, 0, 0, 0, 0, 0, -1, 0, 0, &name.perfect_bit }
+       { rehash, priv, 0, 0, 0, 0, -1, 0, &name.common_bits }
 
 /**
  * htable_init - initialize an empty hash table.
@@ -259,4 +258,11 @@ void *htable_prev_(const struct htable *htable, struct htable_iter *i);
        htable_delval_(htable_debug(htable, HTABLE_LOC), i)
 void htable_delval_(struct htable *ht, struct htable_iter *i);
 
+/**
+ * htable_set_allocator - set calloc/free functions.
+ * @alloc: allocator to use, must zero memory!
+ * @free: unallocator to use (@p is NULL or a return from @alloc)
+ */
+void htable_set_allocator(void *(*alloc)(struct htable *, size_t len),
+                         void (*free)(struct htable *, void *p));
 #endif /* CCAN_HTABLE_H */