#include <iostream>
#include "hash.h"
HashTable::HashTable( HashFunction *f )
{
mHashFunc = f;
mNumBuckets = HASH_TABLE_SIZE;
for ( int i = 0; i < mNumBuckets; i++ )
mBuckets.push_back(new ElemList);
}
HashTable::HashTable( HashFunction* f, uint buckets )
{
mHashFunc = f;
mNumBuckets = buckets;
for ( int i = 0; i < mNumBuckets; i++ )
mBuckets.push_back(new ElemList);
}
HashTable::~HashTable()
{
}
void HashTable::SetHashFunc( HashFunction* f )
{
mHashFunc = f;
}
HashFunction* HashTable::GetHashFunc() const
{
return mHashFunc;
}
int HashTable::Lookup(const std::string& str )
{
time_t start, end;
bool found = false;
time(&start);
ElemList* list = mBuckets[Hash(str)];
for ( ElemList::iterator iter = list->begin(); iter != list->end(); iter++ )
{
if ( *iter == str )
{
found = true;
break;
}
}
time(&end);
if ( found )
return (int)difftime(end,start);
return -1;
}
void HashTable::Add(const std::string& str)
{
ElemList* list = mBuckets[Hash(str)];
list->push_back(str);
}
uint HashTable::Hash(const std::string& str) const
{
return (mHashFunc(str) % mNumBuckets);
}