
typedef struct hash_node
{
   struct hash_node* next;
   char* key;
   void* value;
} hash_node_t;

typedef struct hash
{
	unsigned int buckets_num;
	unsigned int elements_num;
	hash_node_t** buckets;
} hash_t;

hash_t* hash_new ();
void hash_destroy (hash_t* shash, void (*destroy_cb) (void*) );

void* hash_find (const hash_t* shash, const char* key);

bool hash_insert (hash_t* shash, char* key, void* value);
bool hash_delete (hash_t* shash, char* key);


