From: Francois Fleuret Date: Mon, 13 Sep 2010 08:20:48 +0000 (+0200) Subject: Added a detection of full hash table. X-Git-Url: https://fleuret.org/cgi-bin/gitweb/gitweb.cgi?a=commitdiff_plain;h=1c1c34b6adc7cf03bf97470ad1180fd61911b4b3;p=selector.git Added a detection of full hash table. --- diff --git a/selector.c b/selector.c index edff2be..b849e65 100644 --- a/selector.c +++ b/selector.c @@ -252,7 +252,7 @@ int add_and_get_previous_index(struct hash_table_t *hash_table, const char *new_string, int new_index, char **strings) { - unsigned int code = 0; + unsigned int code = 0, start; int k; /* This is my recipe. I checked, it seems to work (as long as @@ -264,6 +264,7 @@ int add_and_get_previous_index(struct hash_table_t *hash_table, } code = code % hash_table->size; + start = code; while(hash_table->entries[code] >= 0) { /* There is a string with that code */ @@ -278,6 +279,12 @@ int add_and_get_previous_index(struct hash_table_t *hash_table, /* This collision was not the same string, let's move to the next in the table */ code = (code + 1) % hash_table->size; + /* We came back to our original code, which means that the table + is full */ + if(code == start) { + printf("Full hash table (that should not happen)\n"); + exit(EXIT_FAILURE); + } } /* This string was not already in there, store the index in the