#pragma once #include "schema.h" namespace saw { struct schema_hash_combine { static constexpr uint64_t apply(uint64_t seed, uint64_t v){ return (seed ^ v) * 1099511628211u; return seed ^( std::hash{}(v) + 0x9e3779b9 + (seed<<6) + (seed >> 2)); } }; template struct schema_hash { static_assert(always_false, "Not schema_hashable"); }; template<> struct schema_hash> { static constexpr uint64_t base_value = 0u; }; template<> struct schema_hash> { static constexpr uint64_t base_value = 1u; }; template<> struct schema_hash> { static constexpr uint64_t base_value = 2u; }; template<> struct schema_hash> { static constexpr uint64_t base_value = 3u; }; template<> struct schema_hash> { static constexpr uint64_t base_value = 4u; }; template<> struct schema_hash> { static constexpr uint64_t base_value = 5u; }; template<> struct schema_hash> { static constexpr uint64_t base_value = 6u; }; template<> struct schema_hash> { static constexpr uint64_t base_value = 7u; }; template<> struct schema_hash> { static constexpr uint64_t base_value = 8u; }; template<> struct schema_hash> { static constexpr uint64_t base_value = 9u; }; template struct schema_hash> { static constexpr uint64_t base_value = 10u; }; template struct schema_hash...>> { static constexpr uint64_t base_value = 11u; }; template struct schema_hash...>> { static constexpr uint64_t base_value = 12u; }; template struct schema_hash> { static constexpr uint64_t base_value = 13u; }; template<> struct schema_hash { static constexpr uint64_t base_value = 14u; }; template struct schema_hash> { static constexpr uint64_t base_value = 15u; }; template struct schema_hash> { static constexpr uint64_t base_value = 16u; }; }