summaryrefslogtreecommitdiffstats
path: root/libopkg/hash_table.h
diff options
context:
space:
mode:
authorgraham.gower <graham.gower@e8e0d7a0-c8d9-11dd-a880-a1081c7ac358>2009-11-18 19:24:08 (EST)
committer graham.gower <graham.gower@e8e0d7a0-c8d9-11dd-a880-a1081c7ac358>2009-11-18 19:24:08 (EST)
commitc9fc602ad5c318d50707393caf62d1468697f500 (patch)
treed120cc65e972a48cb2ee51349e12834715595868 /libopkg/hash_table.h
parent8d9e0ecb10ca5fd8b3ae1bdcf244291e75654740 (diff)
Simplify hash_table somewhat.
- Use djb2 hash http://www.cse.yorku.ca/~oz/hash.html Performs similarly to the existing function, but removes the need for a prime number of buckets. Doesn't need to do an strlen every insert either. - Add some more heuristics. Collected in realtime (cheap), no postprocessing. git-svn-id: http://opkg.googlecode.com/svn/trunk@336 e8e0d7a0-c8d9-11dd-a880-a1081c7ac358
Diffstat (limited to 'libopkg/hash_table.h')
-rw-r--r--libopkg/hash_table.h12
1 files changed, 9 insertions, 3 deletions
diff --git a/libopkg/hash_table.h b/libopkg/hash_table.h
index c065609..52b44d9 100644
--- a/libopkg/hash_table.h
+++ b/libopkg/hash_table.h
@@ -30,13 +30,19 @@ struct hash_entry {
struct hash_table {
const char *name;
hash_entry_t * entries;
- int n_entries; /* number of buckets */
- int n_elements;
- const char * (*hash_entry_key)(void * data);
+ unsigned int n_buckets;
+ unsigned int n_elements;
+
+ /* useful stats */
+ unsigned int n_used_buckets;
+ unsigned int n_collisions;
+ unsigned int max_bucket_len;
+ unsigned int n_hits, n_misses;
};
int hash_table_init(const char *name, hash_table_t *hash, int len);
void hash_table_deinit(hash_table_t *hash);
+void hash_print_stats(hash_table_t *hash);
void *hash_table_get(hash_table_t *hash, const char *key);
int hash_table_insert(hash_table_t *hash, const char *key, void *value);
int hash_table_remove(hash_table_t *has, const char *key);