21 #ifndef BEAST_HASH_HASH_APPEND_H_INCLUDED
22 #define BEAST_HASH_HASH_APPEND_H_INCLUDED
24 #include <ripple/beast/hash/meta.h>
25 #include <boost/container/flat_set.hpp>
26 #include <boost/endian/conversion.hpp>
53 unsigned char* bytes =
static_cast<unsigned char*
>(
55 for (
unsigned i = 0; i <
sizeof(T) / 2; ++i)
56 std::swap(bytes[i], bytes[
sizeof(T) - 1 - i]);
74 template <
class T,
class Hasher>
83 Hasher::endian != boost::endian::order::native>{});
99 std::is_integral<T>::value || std::is_enum<T>::value ||
100 std::is_pointer<T>::value>
126 template <
class T,
class U>
130 is_uniquely_represented<T>::value &&
131 is_uniquely_represented<U>::value &&
132 sizeof(T) + sizeof(U) == sizeof(std::pair<T, U>)>
139 template <
class... T>
143 static_and<is_uniquely_represented<T>::value...>::value &&
144 static_sum<sizeof(T)...>::value == sizeof(std::tuple<T...>)>
151 template <
class T, std::
size_t N>
159 template <
class T, std::
size_t N>
163 is_uniquely_represented<T>::value &&
164 sizeof(T) * N == sizeof(std::array<T, N>)>
183 template <
class T,
class HashAlgorithm>
187 is_uniquely_represented<T>::value &&
189 HashAlgorithm::endian == boost::endian::order::native)>
194 template <
class T, std::
size_t N,
class HashAlgorithm>
198 is_uniquely_represented<T[N]>::value &&
200 HashAlgorithm::endian == boost::endian::order::native)>
235 template <
class Hasher,
class T>
242 template <
class Hasher,
class T>
244 !is_contiguously_hashable<T, Hasher>::value &&
253 template <
class Hasher,
class T>
263 template <
class Hasher>
267 void const* p =
nullptr;
274 template <
class Hasher,
class T, std::
size_t N>
278 template <
class Hasher,
class CharT,
class Traits,
class Alloc>
284 template <
class Hasher,
class CharT,
class Traits,
class Alloc>
290 template <
class Hasher,
class T,
class U>
294 template <
class Hasher,
class T,
class Alloc>
298 template <
class Hasher,
class T,
class Alloc>
302 template <
class Hasher,
class T, std::
size_t N>
306 template <
class Hasher,
class... T>
310 template <
class Hasher,
class Key,
class T,
class Hash,
class Pred,
class Alloc>
314 template <
class Hasher,
class Key,
class Hash,
class Pred,
class Alloc>
318 template <
class Hasher,
class Key,
class Compare,
class Alloc>
322 boost::container::flat_set<Key, Compare, Alloc>
const& v) noexcept;
323 template <
class Hasher,
class Key,
class Compare,
class Alloc>
327 boost::container::flat_set<Key, Compare, Alloc>
const& v) noexcept;
328 template <
class Hasher,
class T0,
class T1,
class... T>
330 hash_append(Hasher& h, T0
const& t0, T1
const& t1, T
const&... t) noexcept;
334 template <
class Hasher,
class T, std::
size_t N>
338 for (
auto const& t : a)
344 template <
class Hasher,
class CharT,
class Traits,
class Alloc>
355 template <
class Hasher,
class CharT,
class Traits,
class Alloc>
361 h(s.data(), s.size() *
sizeof(CharT));
367 template <
class Hasher,
class T,
class U>
369 !is_contiguously_hashable<std::pair<T, U>, Hasher>::value>
377 template <
class Hasher,
class T,
class Alloc>
381 for (
auto const& t : v)
386 template <
class Hasher,
class T,
class Alloc>
390 h(v.data(), v.size() *
sizeof(T));
396 template <
class Hasher,
class T, std::
size_t N>
400 for (
auto const& t : a)
404 template <
class Hasher,
class Key,
class Compare,
class Alloc>
408 boost::container::flat_set<Key, Compare, Alloc>
const& v) noexcept
410 for (
auto const& t : v)
413 template <
class Hasher,
class Key,
class Compare,
class Alloc>
417 boost::container::flat_set<Key, Compare, Alloc>
const& v) noexcept
419 h(&(v.begin()), v.size() *
sizeof(Key));
430 template <
class Hasher,
class T>
438 template <
class Hasher,
class... T,
std::size_t... I>
450 template <
class Hasher,
class... T>
452 !is_contiguously_hashable<
std::tuple<T...>, Hasher>::value>
460 template <
class Hasher,
class T>
469 template <
class Hasher,
class Rep,
class Period>
476 template <
class Hasher,
class Clock,
class Duration>
487 template <
class Hasher,
class T0,
class T1,
class... T>
489 hash_append(Hasher& h, T0
const& t0, T1
const& t1, T
const&... t) noexcept
497 template <
class HashAlgorithm>