42 lines
1.1 KiB
C++
42 lines
1.1 KiB
C++
#ifndef ALGHORITHM_DOUBLE_HASHING_H
|
|
#define ALGHORITHM_DOUBLE_HASHING_H
|
|
|
|
#include "family.h"
|
|
|
|
BEGIN_NAMESPACE(BusinessLogic)
|
|
BEGIN_NAMESPACE(Hash)
|
|
BEGIN_NAMESPACE(Algorithm)
|
|
BEGIN_NAMESPACE(DoubleHashing)
|
|
|
|
class Product final : public Family::Product
|
|
{
|
|
private:
|
|
size_t m_firstHashFunction;
|
|
size_t m_secondHashFunction;
|
|
size_t m_multiplier;
|
|
private:
|
|
friend Creator;
|
|
Product(size_t first, size_t second) : m_firstHashFunction(first), m_secondHashFunction(second)
|
|
{
|
|
if (first == second) {
|
|
throw std::invalid_argument("hash functions must be different");
|
|
}
|
|
}
|
|
|
|
protected:
|
|
virtual size_t getFirstCoefficient() override {
|
|
m_multiplier = m_hashFunction->getHash(m_convertValue, m_firstHashFunction);
|
|
return m_hashFunction->getHash(m_convertValue, m_firstHashFunction);
|
|
}
|
|
virtual size_t getSecondCoefficient(size_t counter) override {
|
|
return counter * m_multiplier;
|
|
}
|
|
};
|
|
|
|
END_NAMESPACE // DoubleHashing
|
|
END_NAMESPACE // Algorithm
|
|
END_NAMESPACE // Hash
|
|
END_NAMESPACE // BusinessLogic
|
|
|
|
#endif // !ALGHORITHM_DOUBLE_HASHING_H
|