#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); | |
void free_hash_table(t_hash **hash_table); | |
t_hash_iterator start_hash_table_iterator(void); | |
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); |