#ifndef HTABLE_H_ #define HTABLE_H_ #include #include struct hash_table { void *buf; char *flagbuf; int64_t size; int64_t cap; int64_t taken; int64_t elemsz; uint64_t (*hash)(void *); bool (*eq)(void *, void *); }; typedef struct hash_table HashTable; void init_hash_table(HashTable *ht, int64_t elemsz, int64_t cap, uint64_t (*hash)(void *), bool (*eq)(void *, void *)); bool hash_table_insert(HashTable *ht, void *elem); void hash_table_remove(HashTable *ht, void *iter); // return a iterator void *hash_table_find(HashTable *ht, void *elem); void *hash_table_begin(HashTable *ht); void *hash_table_next(HashTable *ht, void *iter); void destroy_hash_table(HashTable *ht); #endif