#include "hash_table.hpp" #include "hashed_string.hpp" #include #include Hash_table::Hash_table(Hash_function * hash_function) : hash_function(hash_function) { m = hash_function->get_m(); words = new Hashed_string[m]; } Hash_table::~Hash_table() { delete hash_function; delete[] words; } size_t Hash_table::get_distict_words() { return distinct_words; } void Hash_table::hash(My_string * word) { uint64_t hash = hash_function->hash(word); distinct_words += words[hash].append(new Hashed_string(word)); } void Hash_table::hash(Hashed_string * hs) { uint64_t hash = hash_function->hash( &(hs->string) ); distinct_words += words[hash].append(hs); } void Hash_table::rehash(Hash_function * hash_function) { delete this->hash_function; this->hash_function = hash_function; size_t old_m = m; m = this->hash_function->get_m(); Hashed_string * old_words = this->words; words = new Hashed_string[m]; distinct_words = 0; // reset, because we are hashing all the words once more for (size_t i = 0; i < old_m; i++) { Hashed_string * hs = &(old_words[i]); // skip the initializer Hashed_string while (hs->next != NULL) { hs = hs->next; hash(new Hashed_string(hs)); } } // delete the old stuff delete[] old_words; }