blob: 571638bd45b849de39a01cfd2dc445ce6936ff68 [file] [log] [blame]
#define HASHSIZE 5000001
struct t_hash {
char* name;
int index;
int count;
t_hash* next;
};
/* name: The string referred to by this hash entry. *
* index: The integer identifier for this entry. *
* count: Number of times an element with this name has been inserted into *
* the table. *
* next: A pointer to the next (string,index) entry that mapped to the *
* same hash value, or NULL if there are no more entries. */
struct t_hash_iterator {
int i;
t_hash* h_ptr;
};
/* i: current "line" of the hash table. That is, hash_table[i] is the *
* start of the hash linked list for this hash value. *
* h_ptr: Pointer to the next hash structure to be examined in the *
* iteration. */
t_hash** alloc_hash_table();
void free_hash_table(t_hash** hash_table);
t_hash_iterator start_hash_table_iterator();
t_hash* get_next_hash(t_hash** hash_table,
t_hash_iterator* hash_iterator);
t_hash* insert_in_hash_table(t_hash** hash_table, const char* name, int next_free_index);
t_hash* get_hash_entry(t_hash** hash_table, const char* name);
int hash_value(const char* name);
void get_hash_stats(t_hash** hash_table, char* hash_table_name);