Teuchos Package Browser (Single Doxygen Collection)
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
core
src
Teuchos_HashUtils.hpp
Go to the documentation of this file.
1
// @HEADER
2
// ***********************************************************************
3
//
4
// Teuchos: Common Tools Package
5
// Copyright (2004) Sandia Corporation
6
//
7
// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8
// license for use of this work by or on behalf of the U.S. Government.
9
//
10
// Redistribution and use in source and binary forms, with or without
11
// modification, are permitted provided that the following conditions are
12
// met:
13
//
14
// 1. Redistributions of source code must retain the above copyright
15
// notice, this list of conditions and the following disclaimer.
16
//
17
// 2. Redistributions in binary form must reproduce the above copyright
18
// notice, this list of conditions and the following disclaimer in the
19
// documentation and/or other materials provided with the distribution.
20
//
21
// 3. Neither the name of the Corporation nor the names of the
22
// contributors may be used to endorse or promote products derived from
23
// this software without specific prior written permission.
24
//
25
// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
//
37
// Questions? Contact Michael A. Heroux (maherou@sandia.gov)
38
//
39
// ***********************************************************************
40
// @HEADER
41
42
#ifndef TEUCHOS_HASHUTILS_H
43
#define TEUCHOS_HASHUTILS_H
44
48
49
#include "
Teuchos_ConfigDefs.hpp
"
50
51
namespace
Teuchos
52
{
53
using
std::string;
54
65
66
class
TEUCHOSCORE_LIB_DLL_EXPORT
HashUtils
67
{
68
public
:
69
/* Get the next prime in a sequence of hashtable sizes */
70
static
int
nextPrime
(
int
newCapacity);
71
static
int
getHashCode
(
const
unsigned
char
*a,
size_t
len);
72
73
private
:
74
75
// sequence of primes generated via mathematica:
76
// Table[Prime[Round[1.5^x]], {x, 8, 36}]
77
static
const
int
primeCount_
;
78
static
const
int
primes_
[];
79
/*={101, 163, 271, 443, 733, 1187, 1907, 3061,
80
4919, 7759, 12379, 19543, 30841, 48487, 75989,
81
119089, 185971, 290347, 452027, 703657, 1093237,
82
1695781, 2627993, 4067599, 6290467, 9718019,
83
15000607, 23133937, 35650091};*/
84
};
85
86
90
template
<
class
T>
int
hashCode
(
const
T& x);
91
95
template
<>
inline
int
hashCode
(
const
int
& x)
96
{
97
return
x;
98
}
99
103
template
<>
inline
int
hashCode
(
const
unsigned
& x)
104
{
105
return
HashUtils::getHashCode
(
106
reinterpret_cast<
const
unsigned
char
*
>
(&x),
sizeof
(
unsigned
));
107
}
108
112
template
<>
inline
int
hashCode
(
const
double
& x)
113
{
114
return
HashUtils::getHashCode
(
115
reinterpret_cast<
const
unsigned
char
*
>
(&x),
sizeof
(
double
));
116
}
117
121
template
<>
inline
int
hashCode
(
const
bool
& x)
122
{
123
return
(
int
) x;
124
}
125
129
template
<>
inline
int
hashCode
(
const
long
long
& x)
130
{
131
return
HashUtils::getHashCode
(
132
reinterpret_cast<
const
unsigned
char
*
>
(&x),
sizeof
(
long
long
));
133
}
134
138
template
<>
inline
int
hashCode
(
const
long
& x)
139
{
140
return
HashUtils::getHashCode
(
141
reinterpret_cast<
const
unsigned
char
*
>
(&x),
sizeof
(
long
));
142
}
143
147
template
<>
inline
int
hashCode
(
const
std::string& x)
148
{
149
/* This specialization could use the HashUtils::getHashCode as well,
150
* but they are both true hashes anyway, so leaving it !
151
* */
152
const
char
* str = x.c_str();
153
int
len =
static_cast<
int
>
(x.length());
154
int
step = len/4 + 1;
155
int
base = 1;
156
int
rtn = 0;
157
158
for
(
int
i=0; i<len/2; i+=step)
159
{
160
rtn += base*(int) str[i];
161
base *= 128;
162
rtn += base*(int) str[len-i-1];
163
base *= 128;
164
}
165
166
if
(rtn < 0)
167
{
168
/* Convert the largest -ve int to zero and -1 to
169
* std::numeric_limits<int>::max()
170
* */
171
size_t
maxIntBeforeWrap = std::numeric_limits<int>::max();
172
maxIntBeforeWrap ++;
173
rtn += maxIntBeforeWrap;
174
}
175
return
rtn;
176
}
177
178
}
179
#endif
// TEUCHOS_HASHUTILS_H
Teuchos_ConfigDefs.hpp
Teuchos header file which uses auto-configuration information to include necessary C++ headers.
TEUCHOSCORE_LIB_DLL_EXPORT
#define TEUCHOSCORE_LIB_DLL_EXPORT
Definition
Teuchos_DLLExportMacro.h:9
Teuchos::HashUtils
Utilities for generating hashcodes. This is not a true hash ! For all ints and types less than ints i...
Definition
Teuchos_HashUtils.hpp:67
Teuchos::HashUtils::hashCode
int hashCode(const T &x)
Standard interface for getting the hash code of an object.
Teuchos::HashUtils::hashCode
int hashCode(const std::string &x)
Get the hash code of a std::string.
Definition
Teuchos_HashUtils.hpp:147
Teuchos::HashUtils::hashCode
int hashCode(const double &x)
Get the hash code of a double.
Definition
Teuchos_HashUtils.hpp:112
Teuchos::HashUtils::hashCode
int hashCode(const long &x)
Get the hash code of a long.
Definition
Teuchos_HashUtils.hpp:138
Teuchos::HashUtils::getHashCode
static int getHashCode(const unsigned char *a, size_t len)
Definition
Teuchos_HashUtils.cpp:84
Teuchos::HashUtils::nextPrime
static int nextPrime(int newCapacity)
Definition
Teuchos_HashUtils.cpp:58
Teuchos::HashUtils::primeCount_
static const int primeCount_
Definition
Teuchos_HashUtils.hpp:77
Teuchos::HashUtils::hashCode
int hashCode(const long long &x)
Get the hash code of a long long.
Definition
Teuchos_HashUtils.hpp:129
Teuchos::HashUtils::hashCode
int hashCode(const int &x)
Get the hash code of an int.
Definition
Teuchos_HashUtils.hpp:95
Teuchos::HashUtils::primes_
static const int primes_[]
Definition
Teuchos_HashUtils.hpp:78
Teuchos::HashUtils::hashCode
int hashCode(const unsigned &x)
Get the hash code of an unsigned.
Definition
Teuchos_HashUtils.hpp:103
Teuchos::HashUtils::hashCode
int hashCode(const bool &x)
Get the hash code of a bool.
Definition
Teuchos_HashUtils.hpp:121
Teuchos
Definition
Teuchos_AbstractFactory.hpp:47
Generated by
1.17.0