Files

42 lines
1.1 KiB
C++
Raw Permalink Normal View History

2026-07-12 14:22:00 +04:00
#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