2 This file is a part of libcds - Concurrent Data Structures library
4 (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
6 Source code repo: http://github.com/khizmax/libcds/
7 Download: http://sourceforge.net/projects/libcds/files/
9 Redistribution and use in source and binary forms, with or without
10 modification, are permitted provided that the following conditions are met:
12 * Redistributions of source code must retain the above copyright notice, this
13 list of conditions and the following disclaimer.
15 * Redistributions in binary form must reproduce the above copyright notice,
16 this list of conditions and the following disclaimer in the documentation
17 and/or other materials provided with the distribution.
19 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 #ifndef CDSUNIT_HASH_FUNC_H
32 #define CDSUNIT_HASH_FUNC_H
34 #include <cds/details/defs.h>
36 #if CDS_BUILD_BITS == 64
37 # include <cds_test/city.h>
42 #if CDS_BUILD_BITS == 64
45 typedef uint32_t hash_type;
46 typedef hash_type result_type;
48 hash_type operator()( void const * pBuf, size_t len ) const
50 return CityHash32( reinterpret_cast<char const *>( pBuf ), len );
53 hash_type operator()( std::string const& s ) const
55 return CityHash32( s.c_str(), s.length() );
59 hash_type operator()( T const& s ) const
61 return CityHash32( reinterpret_cast<char const *>( &s ), sizeof(s));
66 bool operator()( hash_type lhs, hash_type rhs ) const
75 typedef uint64_t hash_type;
76 typedef hash_type result_type;
78 hash_type operator()( void const * pBuf, size_t len ) const
80 return CityHash64( reinterpret_cast<char const *>( pBuf ), len );
83 hash_type operator()( std::string const& s ) const
85 return CityHash64( s.c_str(), s.length() );
89 hash_type operator()( T const& s ) const
91 return CityHash64( reinterpret_cast<char const *>( &s ), sizeof(s));
96 bool operator()( hash_type lhs, hash_type rhs ) const
105 typedef uint128 hash_type;
106 typedef hash_type result_type;
108 hash_type operator()( void const * pBuf, size_t len ) const
110 return CityHash128( reinterpret_cast<char const *>( pBuf ), len );
113 hash_type operator()( std::string const& s ) const
115 return CityHash128( s.c_str(), s.length() );
118 template <typename T>
119 hash_type operator()( T const& s ) const
121 return CityHash128( reinterpret_cast<char const *>( &s ), sizeof(s));
126 bool operator()( hash_type const& lhs, hash_type const& rhs ) const
128 if ( lhs.first != rhs.first )
129 return lhs.second < rhs.second;
130 return lhs.first < rhs.first;
134 #endif // #if CDS_BUILD_BITS == 64
137 } // namespace cds_test
139 #endif // #ifndef CDSUNIT_HASH_FUNC_H