Add mulxp_hash to benchmark/unordered_flat.cpp

This commit is contained in:
Peter Dimov
2022-11-25 20:24:38 +02:00
parent 16546190f6
commit 8ab83c1cd4

View File

@@ -3,6 +3,7 @@
// https://www.boost.org/LICENSE_1_0.txt // https://www.boost.org/LICENSE_1_0.txt
#define _SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING #define _SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING
#define _SILENCE_CXX20_CISO646_REMOVED_WARNING
#include <boost/unordered/unordered_flat_map.hpp> #include <boost/unordered/unordered_flat_map.hpp>
#include <boost/core/detail/splitmix64.hpp> #include <boost/core/detail/splitmix64.hpp>
@@ -10,6 +11,9 @@
#ifdef HAVE_ABSEIL #ifdef HAVE_ABSEIL
# include "absl/hash/hash.h" # include "absl/hash/hash.h"
#endif #endif
#ifdef HAVE_MULXP_HASH
# include "mulxp_hash.hpp"
#endif
#include <vector> #include <vector>
#include <memory> #include <memory>
#include <cstdint> #include <cstdint>
@@ -400,6 +404,51 @@ struct absl_hash: absl::Hash<std::string>
using is_avalanching = void; using is_avalanching = void;
}; };
#endif
// mulxp_hash
#ifdef HAVE_MULXP_HASH
struct mulxp0_hash_
{
using is_avalanching = void;
std::size_t operator()( std::string const& st ) const BOOST_NOEXCEPT
{
return mulxp0_hash( (unsigned char const*)st.data(), st.size(), 0 );
}
};
struct mulxp1_hash_
{
using is_avalanching = void;
std::size_t operator()( std::string const& st ) const BOOST_NOEXCEPT
{
return mulxp1_hash( (unsigned char const*)st.data(), st.size(), 0 );
}
};
struct mulxp2_hash_
{
using is_avalanching = void;
std::size_t operator()( std::string const& st ) const BOOST_NOEXCEPT
{
return mulxp2_hash( (unsigned char const*)st.data(), st.size(), 0 );
}
};
struct mulxp3_hash_
{
using is_avalanching = void;
std::size_t operator()( std::string const& st ) const BOOST_NOEXCEPT
{
return mulxp3_hash( (unsigned char const*)st.data(), st.size(), 0 );
}
};
#endif #endif
@@ -415,8 +464,20 @@ int main()
test< mul31_unrolled_hash >( "mul31_unrolled_hash" ); test< mul31_unrolled_hash >( "mul31_unrolled_hash" );
test< fnv1a_hash >( "fnv1a_hash" ); test< fnv1a_hash >( "fnv1a_hash" );
test< old_boost_hash >( "old_boost_hash" ); test< old_boost_hash >( "old_boost_hash" );
#ifdef HAVE_ABSEIL #ifdef HAVE_ABSEIL
test< absl_hash >( "absl::Hash" ); test< absl_hash >( "absl::Hash" );
#endif
#ifdef HAVE_MULXP_HASH
test< mulxp0_hash_ >( "mulxp0_hash" );
test< mulxp1_hash_ >( "mulxp1_hash" );
test< mulxp2_hash_ >( "mulxp2_hash" );
test< mulxp3_hash_ >( "mulxp3_hash" );
#endif #endif
std::cout << "---\n\n"; std::cout << "---\n\n";