-
Whitney Armstrong authoredWhitney Armstrong authored
FRHash.hxx 3.27 KiB
/************************************************
* FRHashTable's member functions.
*
************************************************/
template <class K, class T>
FRHashTable<K, T>::FRHashTable() : hashFuncPtr(NULL)
{
}
template <class K, class T>
FRHashTable<K, T>::FRHashTable(const FRHashTable<K, T> &rhs)
{
FRHashIterator<K, T> itr;
FRHashEntry<K, T> *entryPtr;
for (itr = rhs; itr; itr++) {
entryPtr = itr.get();
create(entryPtr->getKey())->setValue(entryPtr->getValue());
}
}
template <class K, class T>
FRHashTable<K, T>::FRHashTable(unsigned (*func)(const K &)) : hashFuncPtr(func)
{
}
template <class K, class T>
FRHashTable<K, T>::~FRHashTable()
{
}
template <class K, class T>
FRHashEntry<K, T>* FRHashTable<K, T>::create(const K &key)
{
FRBoolean dummy;
return (FRHashEntry<K, T> *) createEntry((const void *) &key, dummy);
}
template <class K, class T>
FRHashEntry<K, T>* FRHashTable<K, T>::create(const K &key, FRBoolean &newflag)
{
return (FRHashEntry<K, T> *) createEntry((const void *) &key, newflag);
}
template <class K, class T>
const FRHashEntry<K, T>* FRHashTable<K, T>::find(const K &key) const
{
return (FRHashEntry<K, T> *) findEntry((const void *) &key);
}
template <class K, class T>
void FRHashTable<K, T>::remove(const K &key)
{
deleteEntry((const void *) &key);
}
template <class K, class T>
void FRHashTable<K, T>::setFunction(unsigned (*func)(const K &))
{ hashFuncPtr = func;
}
template <class K, class T>
FRHashTable<K, T>& FRHashTable<K, T>::operator = (const FRHashTable<K, T> &rhs)
{
if (&rhs == this)
return *this;
deleteAllEntries();
FRHashIterator<K, T> itr;
FRHashEntry<K, T> *entryPtr;
for (itr = rhs; itr; itr++) {
entryPtr = itr.get();
create(entryPtr->getKey())->setValue(entryPtr->getValue());
}
return *this;
}
template <class K, class T>
FR_HashEntry* FRHashTable<K, T>::instanceEntry(const void *key)
{
FRHashEntry<K, T> *entry = new FRHashEntry<K, T>;
entry->key = *((const K *) key);
return (FR_HashEntry*)entry;
}
template <class K, class T>
int FRHashTable<K, T>::compareKey(const void *key1, const void *key2) const
{
const K *k1, *k2;
k1 = (const K *) key1;
k2 = (const K *) key2;
return *k1 == *k2;
}
template <class K, class T>
unsigned FRHashTable<K, T>::getHashValue(const void *key) const
{
return hashFuncPtr(*((const K *) key));
}
/************************************************
* FRHashIterator's member functions.
*
************************************************/
template <class K, class T>
FRHashIterator<K, T>::FRHashIterator()
{
}
template <class K, class T>
FRHashIterator<K, T>::FRHashIterator(const FRHashTable<K, T> &table)
{ setTable(table);
}
template <class K, class T>
FRHashIterator<K, T>& FRHashIterator<K, T>::operator = (
const FRHashTable<K, T> &table)
{ setTable(table);
return *this;
}
template <class K, class T>
FRHashIterator<K, T>::operator FRBoolean () const
{ return valid();
}
template <class K, class T>
FRHashIterator<K, T> FRHashIterator<K, T>::operator ++ ()
{ searchNextEntry();
return *this;
}
template <class K, class T>
FRHashIterator<K, T> FRHashIterator<K, T>::operator ++ (int)
{ FRHashIterator<K, T> tmp(*this);
searchNextEntry();
return tmp;
}
template <class K, class T>
FRHashEntry<K, T>* FRHashIterator<K, T>::get() const
{ return (FRHashEntry<K, T> *) getEntry();
}