/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #pragma once #include #include namespace facebook::react { template concept Hashable = !std::is_same_v && (requires(T a) { { std::hash{}(a) } -> std::convertible_to; }); template void hash_combine(std::size_t &seed, const T &v, const Rest &...rest) { seed ^= std::hash{}(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2); (hash_combine(seed, rest), ...); } template std::size_t hash_combine(const T &v, const Args &...args) { std::size_t seed = 0; hash_combine(seed, v, args...); return seed; } } // namespace facebook::react