Fixed -Wshadow warning
[libcds.git] / test / include / cds_test / hash_func.h
1 /*
2     This file is a part of libcds - Concurrent Data Structures library
3
4     (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2017
5
6     Source code repo: http://github.com/khizmax/libcds/
7     Download: http://sourceforge.net/projects/libcds/files/
8
9     Redistribution and use in source and binary forms, with or without
10     modification, are permitted provided that the following conditions are met:
11
12     * Redistributions of source code must retain the above copyright notice, this
13       list of conditions and the following disclaimer.
14
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.
18
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.
29 */
30
31 #ifndef CDSUNIT_HASH_FUNC_H
32 #define CDSUNIT_HASH_FUNC_H
33
34 #include <cds/details/defs.h>
35
36 #if CDS_BUILD_BITS == 64
37 #   include <cds_test/city.h>
38 #endif
39
40 namespace cds_test {
41
42 #if CDS_BUILD_BITS == 64
43     class city32 {
44     public:
45         typedef uint32_t hash_type;
46         typedef hash_type result_type;
47
48         hash_type operator()( void const * pBuf, size_t len ) const
49         {
50             return CityHash32( reinterpret_cast<char const *>( pBuf ), len );
51         }
52
53         hash_type operator()( std::string const& s ) const
54         {
55             return CityHash32( s.c_str(), s.length());
56         }
57
58         template <typename T>
59         hash_type operator()( T const& s ) const
60         {
61             return CityHash32( reinterpret_cast<char const *>( &s ), sizeof(s));
62         }
63
64         struct less
65         {
66             bool operator()( hash_type lhs, hash_type rhs ) const
67             {
68                 return lhs < rhs;
69             }
70         };
71     };
72
73     class city64 {
74     public:
75         typedef uint64_t hash_type;
76         typedef hash_type result_type;
77
78         hash_type operator()( void const * pBuf, size_t len ) const
79         {
80             return CityHash64( reinterpret_cast<char const *>( pBuf ), len );
81         }
82
83         hash_type operator()( std::string const& s ) const
84         {
85             return CityHash64( s.c_str(), s.length());
86         }
87
88         template <typename T>
89         hash_type operator()( T const& s ) const
90         {
91             return CityHash64( reinterpret_cast<char const *>( &s ), sizeof(s));
92         }
93
94         struct less
95         {
96             bool operator()( hash_type lhs, hash_type rhs ) const
97             {
98                 return lhs < rhs;
99             }
100         };
101     };
102
103     class city128 {
104     public:
105         typedef uint128 hash_type;
106         typedef hash_type result_type;
107
108         hash_type operator()( void const * pBuf, size_t len ) const
109         {
110             return CityHash128( reinterpret_cast<char const *>( pBuf ), len );
111         }
112
113         hash_type operator()( std::string const& s ) const
114         {
115             return CityHash128( s.c_str(), s.length());
116         }
117
118         template <typename T>
119         hash_type operator()( T const& s ) const
120         {
121             return CityHash128( reinterpret_cast<char const *>( &s ), sizeof(s));
122         }
123
124         struct less
125         {
126             bool operator()( hash_type const& lhs, hash_type const& rhs ) const
127             {
128                 if ( lhs.first != rhs.first )
129                     return lhs.second < rhs.second;
130                 return lhs.first < rhs.first;
131             }
132         };
133     };
134 #endif // #if CDS_BUILD_BITS == 64
135
136
137 } // namespace cds_test
138
139 #endif // #ifndef CDSUNIT_HASH_FUNC_H