X-Git-Url: http://git.datanom.net/hashtable.git/blobdiff_plain/1d8fe1f7decd0dcda3bdbddee3bc1b4d24fe5961..refs/heads/master:/hashtable.h diff --git a/hashtable.h b/hashtable.h index f510182..edd91f4 100644 --- a/hashtable.h +++ b/hashtable.h @@ -9,7 +9,25 @@ typedef uint64_t (*HashFunc)(const void*); typedef bool (*EqualFunc)(const void*, const void*); +typedef void (*FreeFunc)(void*); +typedef void (*PrintFunc)(void*); typedef struct _Hashtable Hashtable; +typedef void (*ForeachFunc)(void*, void*, void*); + +typedef struct _HashtableIter { + /* Private */ + void* dummy1; + void* dummy2; + void* dummy3; + int64_t dummy4; +} HashtableIter; + + +typedef struct _List { + void* data; + struct _List* next; +} List; + uint64_t int_hash(const void*); uint64_t str_hash(const void*); @@ -19,12 +37,23 @@ bool str_equal(const void*, const void*); bool ptr_equal(const void*, const void*); Hashtable* hash_table_create(HashFunc hf, EqualFunc ef); -Hashtable* hash_table_create_full(HashFunc hf, EqualFunc ef, uint32_t size); +Hashtable* hash_table_create_notify(HashFunc hf, EqualFunc ef, FreeFunc ff); +Hashtable* hash_table_create_full(HashFunc hf, EqualFunc ef, uint32_t size, FreeFunc ff, PrintFunc pf); void hash_table_destroy(Hashtable* ht); void hash_table_print(Hashtable* ht); bool hash_table_insert(Hashtable* ht, const void* key, void* obj); void* hash_table_lookup(Hashtable* ht, const void* key); void* hash_table_delete(Hashtable* ht, const void* key); +List* hash_table_keys(Hashtable* ht); +List* hash_table_values(Hashtable* ht); +void hash_table_list_free(List* list); +void hash_table_foreach(Hashtable* ht, ForeachFunc, void* userdata); +void hash_table_iter_init(HashtableIter* iter, Hashtable* ht); +bool hash_table_iter_next(HashtableIter* iter, void** key, void** value); +bool hash_table_contains(Hashtable* ht, const void* key); +uint64_t hash_table_size(Hashtable* ht); +bool hash_table_replace(Hashtable* ht, void* key, void* value); +void hash_table_set_print_func(Hashtable* ht, PrintFunc pf); #endif