Added std::hash for tuples, because why not.
This commit is contained in:
parent
bf53622b19
commit
40c0d888e6
@ -6,6 +6,8 @@
|
||||
#define MIJIN_UTIL_HASH_HPP_INCLUDED 1
|
||||
|
||||
#include <functional>
|
||||
#include <tuple>
|
||||
#include <utility>
|
||||
|
||||
namespace mijin
|
||||
{
|
||||
@ -16,4 +18,21 @@ inline void hashCombine(std::size_t& seed, const T& value, const THasher& hasher
|
||||
}
|
||||
}
|
||||
|
||||
template<typename... T>
|
||||
struct std::hash<std::tuple<T...>>
|
||||
{
|
||||
std::size_t operator()(const std::tuple<T...>& tuple) const noexcept
|
||||
{
|
||||
return hashImpl(tuple, std::index_sequence_for<T...>());
|
||||
}
|
||||
|
||||
template<std::size_t... indices>
|
||||
std::size_t hashImpl(const std::tuple<T...>& tuple, std::index_sequence<indices...>) const noexcept
|
||||
{
|
||||
std::size_t result = 0;
|
||||
(mijin::hashCombine(result, std::get<indices>(tuple)), ...);
|
||||
return result;
|
||||
}
|
||||
};
|
||||
|
||||
#endif // MIJIN_UTIL_HASH_HPP_INCLUDED
|
||||
|
Loading…
x
Reference in New Issue
Block a user