mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-20 11:05:54 +00:00
* is_contiguous_hashable trait identifies optimizable types * hash_append() function overloads for basic types: - scalars, floats - array, C array - pair, tuple - boost array and tuple (if configured) * Provided Spooky hash wrapper for use with hash_append * Use hash_append in hardened_hash and other places * New Utility meta functions for working with variadics: - static_and - static_sum * Added type_name utility function for diagnostics * hash_metrics suite of functions to evalulate hash functions * Test suites to measure hash function performance * Various fixes
66 lines
1.9 KiB
C++
66 lines
1.9 KiB
C++
//------------------------------------------------------------------------------
|
|
/*
|
|
This file is part of Beast: https://github.com/vinniefalco/Beast
|
|
Copyright 2014, Howard Hinnant <howard.hinnant@gmail.com>
|
|
|
|
Permission to use, copy, modify, and/or distribute this software for any
|
|
purpose with or without fee is hereby granted, provided that the above
|
|
copyright notice and this permission notice appear in all copies.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
*/
|
|
//==============================================================================
|
|
|
|
#ifndef BEAST_UTILITY_META_H_INCLUDED
|
|
#define BEAST_UTILITY_META_H_INCLUDED
|
|
|
|
#include <type_traits>
|
|
|
|
namespace beast {
|
|
|
|
template <bool ...> struct static_and;
|
|
|
|
template <bool b0, bool ... bN>
|
|
struct static_and <b0, bN...>
|
|
: public std::integral_constant <
|
|
bool, b0 && static_and<bN...>::value>
|
|
{
|
|
};
|
|
|
|
template <>
|
|
struct static_and<>
|
|
: public std::true_type
|
|
{
|
|
};
|
|
|
|
static_assert( static_and<true, true, true>::value, "");
|
|
static_assert(!static_and<true, false, true>::value, "");
|
|
|
|
template <std::size_t ...>
|
|
struct static_sum;
|
|
|
|
template <std::size_t s0, std::size_t ...sN>
|
|
struct static_sum <s0, sN...>
|
|
: public std::integral_constant <
|
|
std::size_t, s0 + static_sum<sN...>::value>
|
|
{
|
|
};
|
|
|
|
template <>
|
|
struct static_sum<>
|
|
: public std::integral_constant<std::size_t, 0>
|
|
{
|
|
};
|
|
|
|
static_assert(static_sum<5, 2, 17, 0>::value == 24, "");
|
|
|
|
} // beast
|
|
|
|
#endif // BEAST_UTILITY_META_H_INCLUDED
|