rippled
xxhash.h
1 /*
2  xxHash - Extremely Fast Hash algorithm
3  Header File
4  Copyright (C) 2012-2014, Yann Collet.
5  BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
6 
7  Redistribution and use in source and binary forms, with or without
8  modification, are permitted provided that the following conditions are
9  met:
10 
11  * Redistributions of source code must retain the above copyright
12  notice, this list of conditions and the following disclaimer.
13  * Redistributions in binary form must reproduce the above
14  copyright notice, this list of conditions and the following disclaimer
15  in the documentation and/or other materials provided with the
16  distribution.
17 
18  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  (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  You can contact the author at :
31  - xxHash source repository : http://code.google.com/p/xxhash/
32 */
33 
34 /* Notice extracted from xxHash homepage :
35 
36 xxHash is an extremely fast Hash algorithm, running at RAM speed limits.
37 It also successfully passes all tests from the SMHasher suite.
38 
39 Comparison (single thread, Windows Seven 32 bits, using SMHasher on a Core 2 Duo @3GHz)
40 
41 Name Speed Q.Score Author
42 xxHash 5.4 GB/s 10
43 CrapWow 3.2 GB/s 2 Andrew
44 MumurHash 3a 2.7 GB/s 10 Austin Appleby
45 SpookyHash 2.0 GB/s 10 Bob Jenkins
46 SBox 1.4 GB/s 9 Bret Mulvey
47 Lookup3 1.2 GB/s 9 Bob Jenkins
48 SuperFastHash 1.2 GB/s 1 Paul Hsieh
49 CityHash64 1.05 GB/s 10 Pike & Alakuijala
50 FNV 0.55 GB/s 5 Fowler, Noll, Vo
51 CRC32 0.43 GB/s 9
52 MD5-32 0.33 GB/s 10 Ronald L. Rivest
53 SHA1-32 0.28 GB/s 10
54 
55 Q.Score is a measure of quality of the hash function.
56 It depends on successfully passing SMHasher test set.
57 10 is a perfect score.
58 */
59 
60 #ifndef BEAST_HASH_XXHASH_H_INCLUDED
61 #define BEAST_HASH_XXHASH_H_INCLUDED
62 
63 /*****************************
64  Includes
65 *****************************/
66 #include <stddef.h> /* size_t */
67 
68 namespace beast {
69 namespace detail {
70 
71 /*****************************
72  Type
73 *****************************/
74 typedef enum { XXH_OK=0, XXH_ERROR } XXH_errorcode;
75 
76 
77 
78 /*****************************
79  Simple Hash Functions
80 *****************************/
81 
82 unsigned int XXH32 (const void* input, size_t length, unsigned seed);
83 unsigned long long XXH64 (const void* input, size_t length, unsigned long long seed);
84 
85 /*
86 XXH32() :
87  Calculate the 32-bits hash of sequence "length" bytes stored at memory address "input".
88  The memory between input & input+length must be valid (allocated and read-accessible).
89  "seed" can be used to alter the result predictably.
90  This function successfully passes all SMHasher tests.
91  Speed on Core 2 Duo @ 3 GHz (single thread, SMHasher benchmark) : 5.4 GB/s
92 XXH64() :
93  Calculate the 64-bits hash of sequence of length "len" stored at memory address "input".
94 */
95 
96 
97 
98 /*****************************
99  Advanced Hash Functions
100 *****************************/
101 typedef struct { long long ll[ 6]; } XXH32_state_t;
102 typedef struct { long long ll[11]; } XXH64_state_t;
103 
104 /*
105 These structures allow static allocation of XXH states.
106 States must then be initialized using XXHnn_reset() before first use.
107 
108 If you prefer dynamic allocation, please refer to functions below.
109 */
110 
113 
116 
117 /*
118 These functions create and release memory for XXH state.
119 States must then be initialized using XXHnn_reset() before first use.
120 */
121 
122 
123 XXH_errorcode XXH32_reset (XXH32_state_t* statePtr, unsigned seed);
124 XXH_errorcode XXH32_update (XXH32_state_t* statePtr, const void* input, size_t length);
125 unsigned int XXH32_digest (const XXH32_state_t* statePtr);
126 
127 XXH_errorcode XXH64_reset (XXH64_state_t* statePtr, unsigned long long seed);
128 XXH_errorcode XXH64_update (XXH64_state_t* statePtr, const void* input, size_t length);
129 unsigned long long XXH64_digest (const XXH64_state_t* statePtr);
130 
131 /*
132 These functions calculate the xxHash of an input provided in multiple smaller packets,
133 as opposed to an input provided as a single block.
134 
135 XXH state space must first be allocated, using either static or dynamic method provided above.
136 
137 Start a new hash by initializing state with a seed, using XXHnn_reset().
138 
139 Then, feed the hash state by calling XXHnn_update() as many times as necessary.
140 Obviously, input must be valid, meaning allocated and read accessible.
141 The function returns an error code, with 0 meaning OK, and any other value meaning there is an error.
142 
143 Finally, you can produce a hash anytime, by using XXHnn_digest().
144 This function returns the final nn-bits hash.
145 You can nonetheless continue feeding the hash state with more input,
146 and therefore get some new hashes, by calling again XXHnn_digest().
147 
148 When you are done, don't forget to free XXH state space, using typically XXHnn_freeState().
149 */
150 
151 } // detail
152 } // beast
153 
154 #endif
beast::detail::XXH32_freeState
XXH_errorcode XXH32_freeState(XXH32_state_t *statePtr)
Definition: xxhash.cpp:538
beast::detail::XXH_errorcode
XXH_errorcode
Definition: xxhash.h:78
beast::detail::XXH64_update
XXH_errorcode XXH64_update(XXH64_state_t *state_in, const void *input, size_t len)
Definition: xxhash.cpp:828
beast::detail::XXH32_digest
U32 XXH32_digest(const XXH32_state_t *state_in)
Definition: xxhash.cpp:728
beast::detail::XXH64_reset
XXH_errorcode XXH64_reset(XXH64_state_t *state_in, unsigned long long seed)
Definition: xxhash.cpp:571
beast::detail::XXH_OK
@ XXH_OK
Definition: xxhash.h:82
beast::detail::XXH64_digest
unsigned long long XXH64_digest(const XXH64_state_t *state_in)
Definition: xxhash.cpp:922
beast::detail::XXH64_freeState
XXH_errorcode XXH64_freeState(XXH64_state_t *statePtr)
Definition: xxhash.cpp:549
beast::detail::XXH32_update
XXH_errorcode XXH32_update(XXH32_state_t *state_in, const void *input, size_t len)
Definition: xxhash.cpp:674
beast::detail::XXH_ERROR
@ XXH_ERROR
Definition: xxhash.h:82
beast::detail::XXH32_reset
XXH_errorcode XXH32_reset(XXH32_state_t *state_in, U32 seed)
Definition: xxhash.cpp:558
beast::detail::XXH32_state_t
Definition: xxhash.h:105
beast::detail::XXH32
unsigned int XXH32(const void *input, size_t len, unsigned seed)
Definition: xxhash.cpp:335
beast::detail::XXH64_createState
XXH64_state_t * XXH64_createState(void)
Definition: xxhash.cpp:544
beast::detail::XXH32_createState
XXH32_state_t * XXH32_createState(void)
Definition: xxhash.cpp:533
beast::detail::XXH64
unsigned long long XXH64(const void *input, size_t len, unsigned long long seed)
Definition: xxhash.cpp:475
beast::detail::XXH64_state_t
Definition: xxhash.h:106
beast
Definition: base_uint.h:582