Teuchos Package Browser (Single Doxygen Collection)
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
core
src
Teuchos_HashUtils.cpp
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
#include "
Teuchos_HashUtils.hpp
"
43
#include "
Teuchos_Assert.hpp
"
44
#include "
Teuchos_CompilerCodeTweakMacros.hpp
"
45
46
using namespace
Teuchos
;
47
48
49
const
int
HashUtils::primeCount_
= 33;
50
const
int
HashUtils::primes_
[]
51
= {11, 19, 37, 59, 101, 163, 271, 443, 733, 1187, 1907, 3061,
52
4919, 7759, 12379, 19543, 30841, 48487, 75989,
53
119089, 185971, 290347, 452027, 703657, 1093237,
54
1695781, 2627993, 4067599, 6290467, 9718019,
55
15000607, 23133937, 35650091};
56
57
58
int
HashUtils::nextPrime
(
int
newCapacity)
59
{
60
TEUCHOS_TEST_FOR_EXCEPTION
(newCapacity >
primes_
[
primeCount_
-1],
61
std::logic_error,
62
"HashUtils::nextPrime() overflow"
);
63
64
for
(
int
i=0; i<
primeCount_
; i++)
65
{
66
if
(newCapacity <=
primes_
[i])
67
{
68
return
primes_
[i];
69
}
70
}
71
72
TEUCHOS_TEST_FOR_EXCEPTION
(
true
,
73
std::logic_error,
74
"unexpected case in HashUtils::nextPrime()"
);
75
TEUCHOS_UNREACHABLE_RETURN
(0);
76
}
77
84
int
HashUtils::getHashCode
(
const
unsigned
char
*a,
size_t
len)
85
{
86
int
total=0;
87
unsigned
char
*to =
reinterpret_cast<
unsigned
char
*
>
(&total);
88
int
c=0;
89
for
(
size_t
i=0; i < len; i++){
90
to[c++] += a[i];
91
if
(c ==
sizeof
(
int
))
92
c = 0;
93
}
94
if
(total < 0)
95
{
96
/* Convert the largest -ve int to zero and -1 to
97
* std::numeric_limits<int>::max()
98
* */
99
size_t
maxIntBeforeWrap = std::numeric_limits<int>::max();
100
maxIntBeforeWrap ++;
101
total += maxIntBeforeWrap;
102
}
103
return
total;
104
}
Teuchos_Assert.hpp
Teuchos_CompilerCodeTweakMacros.hpp
TEUCHOS_UNREACHABLE_RETURN
#define TEUCHOS_UNREACHABLE_RETURN(dummyReturnVal)
Avoid warning about unreachable or missing return from function.
Definition
Teuchos_CompilerCodeTweakMacros.hpp:131
Teuchos_HashUtils.hpp
Utilities for generating hashcodes.
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::primes_
static const int primes_[]
Definition
Teuchos_HashUtils.hpp:78
TEUCHOS_TEST_FOR_EXCEPTION
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Macro for throwing an exception with breakpointing to ease debugging.
Definition
Teuchos_TestForException.hpp:178
Teuchos
Definition
Teuchos_AbstractFactory.hpp:47
Generated by
1.17.0