Hasher.H
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration |
5  \\ / A nd | www.openfoam.com
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8  Copyright (C) 2011-2016 OpenFOAM Foundation
9 -------------------------------------------------------------------------------
10 License
11  This file is part of OpenFOAM.
12 
13  OpenFOAM is free software: you can redistribute it and/or modify it
14  under the terms of the GNU General Public License as published by
15  the Free Software Foundation, either version 3 of the License, or
16  (at your option) any later version.
17 
18  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
19  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
20  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
21  for more details.
22 
23  You should have received a copy of the GNU General Public License
24  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
25 
26 InNamespace
27  Foam
28 
29 Description
30  Misc. hashing functions, mostly from Bob Jenkins.
31 
32  The Jenkins hashing function(s) is similar in speed to Paul Hsieh's
33  SuperFast hash, but is public domain, supports incremental hashing
34  and has been reported to have better characteristics.
35  It is also what postgresql seems to be using.
36 
37 See also
38  http://burtleburtle.net/bob/c/lookup3.c
39  and HasherInt.H for a specialized version
40 
41 SourceFiles
42  Hasher.C
43 
44 \*---------------------------------------------------------------------------*/
45 
46 #ifndef Hasher_H
47 #define Hasher_H
48 
49 #include <cstddef>
50 
51 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
52 
53 namespace Foam
54 {
55 
56 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
57 
58 //- Bob Jenkins's 96-bit mixer hashing function (lookup3)
59 // \param[in] data - a character stream
60 // \param[in] len - the number of bytes
61 // \param[in] seed - the previous hash, or an arbitrary value
62 unsigned Hasher(const void* data, size_t len, unsigned seed = 0);
63 
64 
65 //- Hashing of bit-wise internal content of given data object.
66 // For primitives and simple collections of primitives this is reasonable,
67 // but ill-advised for more complex data structures.
68 template<class T>
69 inline unsigned HasherT(const T& obj, unsigned seed = 0)
70 {
71  return Hasher(&obj, sizeof(obj), seed);
72 }
73 
74 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
75 
76 } // End namespace Foam
77 
78 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
79 
80 #endif
81 
82 // ************************************************************************* //
Foam::HasherT
unsigned HasherT(const T &obj, unsigned seed=0)
Hashing of bit-wise internal content of given data object.
Definition: Hasher.H:69
Foam::Hasher
unsigned Hasher(const void *data, size_t len, unsigned seed=0)
Bob Jenkins's 96-bit mixer hashing function (lookup3)
Definition: Hasher.C:473
Foam::T
void T(FieldField< Field, Type > &f1, const FieldField< Field, Type > &f2)
Definition: FieldFieldFunctions.C:58
Foam
Namespace for OpenFOAM.
Definition: atmBoundaryLayer.C:33