From f0824fdebc79fbf3843c2053522107c33e3ce2a3 Mon Sep 17 00:00:00 2001 From: HampusM Date: Mon, 7 Mar 2022 20:20:18 +0100 Subject: refactor: move directions to vector2 & make vector2 hashable --- src/util/hash.hpp | 10 ++++++++++ src/util/hash.tpp | 22 ++++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 src/util/hash.hpp create mode 100644 src/util/hash.tpp (limited to 'src/util') diff --git a/src/util/hash.hpp b/src/util/hash.hpp new file mode 100644 index 0000000..72e9b82 --- /dev/null +++ b/src/util/hash.hpp @@ -0,0 +1,10 @@ +#pragma once + +#include + +constexpr auto GOLDEN_RATIO = 0x9e3779b9; + +template +void hash_combine(std::size_t &seed, const Value &value) noexcept; + +#include "hash.tpp" diff --git a/src/util/hash.tpp b/src/util/hash.tpp new file mode 100644 index 0000000..146cfa0 --- /dev/null +++ b/src/util/hash.tpp @@ -0,0 +1,22 @@ +#pragma once + +#include "hash.hpp" + +#include +#include + +/** + * Combines the hash 'seed' with the hash of 'value'. + * + * @param seed A hash that will be mutated + * @param value A hashable value + */ +template +void hash_combine(std::size_t &seed, const Value &value) noexcept +{ + constexpr uint32_t shift_left = 6; + constexpr uint32_t shift_right = 2; + + seed ^= std::hash()(value) + GOLDEN_RATIO + (seed << shift_left) + + (seed >> shift_right); +} -- cgit v1.2.3-18-g5258