extern char * alloc_string(char * str);
extern HashEntry * hash_copy_entry(HashEntry * e);
extern HashTable * hash_copy_table(HashTable * table);
extern void hash_delete(HashTable * table, char * key);
extern char * hash_find(HashTable * table, char * key);
extern void hash_init(HashTable * table, int size, EqualFunction equal, HashcodeFunction hash_code);
extern void free_hash(HashTable * table, FreeFunction free_fun);
extern void hash_insert(HashTable * table, char * data, char * key);
extern void hash_map(HashTable * table, MappableFunction func);
extern char * hash_replace(HashTable * table, char * data, char * key);
extern int string_equal(char * s1, char * s2);
extern int string_hash(char * s, int size);
