diff options
Diffstat (limited to 'src/support/hash.h')
-rw-r--r-- | src/support/hash.h | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/support/hash.h b/src/support/hash.h index fb0e710a5..fc8b358f2 100644 --- a/src/support/hash.h +++ b/src/support/hash.h @@ -61,6 +61,24 @@ template<typename T1, typename T2> struct hash<pair<T1, T2>> { } }; +// And hashing tuples is useful, too. +template<typename T, typename... Ts> struct hash<tuple<T, Ts...>> { +private: + template<size_t... I> + static void rehash(const tuple<T, Ts...>& tup, + size_t& digest, + std::index_sequence<I...>) { + (wasm::rehash(digest, std::get<1 + I>(tup)), ...); + } + +public: + size_t operator()(const tuple<T, Ts...>& tup) const { + auto digest = wasm::hash(std::get<0>(tup)); + rehash(tup, digest, std::index_sequence_for<Ts...>{}); + return digest; + } +}; + } // namespace std #endif // wasm_support_hash_h |