.. _program_listing_file_Source_Common_Inc_Utils_Hash.h: Program Listing for File Hash.h =============================== |exhale_lsh| :ref:`Return to documentation for file ` (``Source\Common\Inc\Utils\Hash.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #pragma once #include "Types.h" namespace Azura { constexpr SizeType DEFAULT_SEED{2166136261}; constexpr SizeType DEFAULT_PRIME{0x01000193}; constexpr SizeType FNVHash(const void* bytes, U32 numBytes, SizeType seed, SizeType prime) { const auto* ptr = static_cast(bytes); SizeType hashValue = seed; for (auto itr = 0U; itr < numBytes; itr++) { hashValue = (ptr[itr] ^ hashValue) * prime; } return hashValue; } #define HASH(str) FNVHash(str, sizeof(str), DEFAULT_SEED, DEFAULT_PRIME) class HashOperator { public: virtual ~HashOperator() = default; HashOperator() = default; HashOperator(const HashOperator& other) = default; HashOperator(HashOperator&& other) noexcept = default; HashOperator& operator=(const HashOperator& other) = default; HashOperator& operator=(HashOperator&& other) noexcept = default; HashOperator(SizeType seed); virtual SizeType evaluate(const void* bytes, U32 numBytes) const = 0; virtual SizeType evaluate(const char* bytes, U32 len) const = 0; virtual SizeType evaluate(const int& num) const = 0; protected: SizeType mSeed{2166136261}; }; class FNVHashOperator : public HashOperator { SizeType mPrime{0x01000193}; // 16777619 public: FNVHashOperator() = default; FNVHashOperator(SizeType seed); FNVHashOperator(SizeType seed, SizeType prime); SizeType evaluate(const void* bytes, U32 numBytes) const override; SizeType evaluate(const char* bytes, U32 len) const override; SizeType evaluate(const int& num) const override; }; } // namespace Azura