factorize dict and htable
[protos/libecoli.git] / src / ecoli_htable.c
index 4b45a76..a8600e2 100644 (file)
@@ -17,6 +17,7 @@
 #include <ecoli_log.h>
 #include <ecoli_test.h>
 #include <ecoli_murmurhash.h>
+#include <ecoli_htable_private.h>
 #include <ecoli_htable.h>
 
 #define FACTOR 3
@@ -25,30 +26,6 @@ EC_LOG_TYPE_REGISTER(htable);
 
 static uint32_t ec_htable_seed;
 
-struct ec_htable_elt {
-       void *key;
-       size_t key_len;
-       void *val;
-       uint32_t hash;
-       ec_htable_elt_free_t free;
-       unsigned int refcount;
-};
-
-struct ec_htable_elt_ref {
-       TAILQ_ENTRY(ec_htable_elt_ref) next;
-       TAILQ_ENTRY(ec_htable_elt_ref) hnext;
-       struct ec_htable_elt *elt;
-};
-
-TAILQ_HEAD(ec_htable_elt_ref_list, ec_htable_elt_ref);
-
-struct ec_htable {
-       size_t len;
-       size_t table_size;
-       struct ec_htable_elt_ref_list list;
-       struct ec_htable_elt_ref_list *table;
-};
-
 struct ec_htable *ec_htable(void)
 {
        struct ec_htable *htable;
@@ -290,7 +267,7 @@ ec_htable_iter_next(struct ec_htable_elt_ref *iter)
        return TAILQ_NEXT(iter, next);
 }
 
-const char *
+const void *
 ec_htable_iter_get_key(const struct ec_htable_elt_ref *iter)
 {
        if (iter == NULL)
@@ -299,6 +276,15 @@ ec_htable_iter_get_key(const struct ec_htable_elt_ref *iter)
        return iter->elt->key;
 }
 
+size_t
+ec_htable_iter_get_key_len(const struct ec_htable_elt_ref *iter)
+{
+       if (iter == NULL)
+               return 0;
+
+       return iter->elt->key_len;
+}
+
 void *
 ec_htable_iter_get_val(const struct ec_htable_elt_ref *iter)
 {