xref: /aosp_15_r20/external/lz4/lib/xxhash.h (revision 27162e4e17433d5aa7cb38e7b6a433a09405fc7f)
1*27162e4eSAndroid Build Coastguard Worker /*
2*27162e4eSAndroid Build Coastguard Worker    xxHash - Extremely Fast Hash algorithm
3*27162e4eSAndroid Build Coastguard Worker    Header File
4*27162e4eSAndroid Build Coastguard Worker    Copyright (C) 2012-2016, Yann Collet.
5*27162e4eSAndroid Build Coastguard Worker 
6*27162e4eSAndroid Build Coastguard Worker    BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
7*27162e4eSAndroid Build Coastguard Worker 
8*27162e4eSAndroid Build Coastguard Worker    Redistribution and use in source and binary forms, with or without
9*27162e4eSAndroid Build Coastguard Worker    modification, are permitted provided that the following conditions are
10*27162e4eSAndroid Build Coastguard Worker    met:
11*27162e4eSAndroid Build Coastguard Worker 
12*27162e4eSAndroid Build Coastguard Worker        * Redistributions of source code must retain the above copyright
13*27162e4eSAndroid Build Coastguard Worker    notice, this list of conditions and the following disclaimer.
14*27162e4eSAndroid Build Coastguard Worker        * Redistributions in binary form must reproduce the above
15*27162e4eSAndroid Build Coastguard Worker    copyright notice, this list of conditions and the following disclaimer
16*27162e4eSAndroid Build Coastguard Worker    in the documentation and/or other materials provided with the
17*27162e4eSAndroid Build Coastguard Worker    distribution.
18*27162e4eSAndroid Build Coastguard Worker 
19*27162e4eSAndroid Build Coastguard Worker    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20*27162e4eSAndroid Build Coastguard Worker    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21*27162e4eSAndroid Build Coastguard Worker    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22*27162e4eSAndroid Build Coastguard Worker    A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23*27162e4eSAndroid Build Coastguard Worker    OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24*27162e4eSAndroid Build Coastguard Worker    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25*27162e4eSAndroid Build Coastguard Worker    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26*27162e4eSAndroid Build Coastguard Worker    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27*27162e4eSAndroid Build Coastguard Worker    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28*27162e4eSAndroid Build Coastguard Worker    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29*27162e4eSAndroid Build Coastguard Worker    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30*27162e4eSAndroid Build Coastguard Worker 
31*27162e4eSAndroid Build Coastguard Worker    You can contact the author at :
32*27162e4eSAndroid Build Coastguard Worker    - xxHash source repository : https://github.com/Cyan4973/xxHash
33*27162e4eSAndroid Build Coastguard Worker */
34*27162e4eSAndroid Build Coastguard Worker 
35*27162e4eSAndroid Build Coastguard Worker /* Notice extracted from xxHash homepage :
36*27162e4eSAndroid Build Coastguard Worker 
37*27162e4eSAndroid Build Coastguard Worker xxHash is an extremely fast Hash algorithm, running at RAM speed limits.
38*27162e4eSAndroid Build Coastguard Worker It also successfully passes all tests from the SMHasher suite.
39*27162e4eSAndroid Build Coastguard Worker 
40*27162e4eSAndroid Build Coastguard Worker Comparison (single thread, Windows Seven 32 bits, using SMHasher on a Core 2 Duo @3GHz)
41*27162e4eSAndroid Build Coastguard Worker 
42*27162e4eSAndroid Build Coastguard Worker Name            Speed       Q.Score   Author
43*27162e4eSAndroid Build Coastguard Worker xxHash          5.4 GB/s     10
44*27162e4eSAndroid Build Coastguard Worker CrapWow         3.2 GB/s      2       Andrew
45*27162e4eSAndroid Build Coastguard Worker MumurHash 3a    2.7 GB/s     10       Austin Appleby
46*27162e4eSAndroid Build Coastguard Worker SpookyHash      2.0 GB/s     10       Bob Jenkins
47*27162e4eSAndroid Build Coastguard Worker SBox            1.4 GB/s      9       Bret Mulvey
48*27162e4eSAndroid Build Coastguard Worker Lookup3         1.2 GB/s      9       Bob Jenkins
49*27162e4eSAndroid Build Coastguard Worker SuperFastHash   1.2 GB/s      1       Paul Hsieh
50*27162e4eSAndroid Build Coastguard Worker CityHash64      1.05 GB/s    10       Pike & Alakuijala
51*27162e4eSAndroid Build Coastguard Worker FNV             0.55 GB/s     5       Fowler, Noll, Vo
52*27162e4eSAndroid Build Coastguard Worker CRC32           0.43 GB/s     9
53*27162e4eSAndroid Build Coastguard Worker MD5-32          0.33 GB/s    10       Ronald L. Rivest
54*27162e4eSAndroid Build Coastguard Worker SHA1-32         0.28 GB/s    10
55*27162e4eSAndroid Build Coastguard Worker 
56*27162e4eSAndroid Build Coastguard Worker Q.Score is a measure of quality of the hash function.
57*27162e4eSAndroid Build Coastguard Worker It depends on successfully passing SMHasher test set.
58*27162e4eSAndroid Build Coastguard Worker 10 is a perfect score.
59*27162e4eSAndroid Build Coastguard Worker 
60*27162e4eSAndroid Build Coastguard Worker A 64-bit version, named XXH64, is available since r35.
61*27162e4eSAndroid Build Coastguard Worker It offers much better speed, but for 64-bit applications only.
62*27162e4eSAndroid Build Coastguard Worker Name     Speed on 64 bits    Speed on 32 bits
63*27162e4eSAndroid Build Coastguard Worker XXH64       13.8 GB/s            1.9 GB/s
64*27162e4eSAndroid Build Coastguard Worker XXH32        6.8 GB/s            6.0 GB/s
65*27162e4eSAndroid Build Coastguard Worker */
66*27162e4eSAndroid Build Coastguard Worker 
67*27162e4eSAndroid Build Coastguard Worker #ifndef XXHASH_H_5627135585666179
68*27162e4eSAndroid Build Coastguard Worker #define XXHASH_H_5627135585666179 1
69*27162e4eSAndroid Build Coastguard Worker 
70*27162e4eSAndroid Build Coastguard Worker #if defined (__cplusplus)
71*27162e4eSAndroid Build Coastguard Worker extern "C" {
72*27162e4eSAndroid Build Coastguard Worker #endif
73*27162e4eSAndroid Build Coastguard Worker 
74*27162e4eSAndroid Build Coastguard Worker 
75*27162e4eSAndroid Build Coastguard Worker /* ****************************
76*27162e4eSAndroid Build Coastguard Worker *  Definitions
77*27162e4eSAndroid Build Coastguard Worker ******************************/
78*27162e4eSAndroid Build Coastguard Worker #include <stddef.h>   /* size_t */
79*27162e4eSAndroid Build Coastguard Worker typedef enum { XXH_OK=0, XXH_ERROR } XXH_errorcode;
80*27162e4eSAndroid Build Coastguard Worker 
81*27162e4eSAndroid Build Coastguard Worker 
82*27162e4eSAndroid Build Coastguard Worker /* ****************************
83*27162e4eSAndroid Build Coastguard Worker  *  API modifier
84*27162e4eSAndroid Build Coastguard Worker  ******************************/
85*27162e4eSAndroid Build Coastguard Worker /** XXH_INLINE_ALL (and XXH_PRIVATE_API)
86*27162e4eSAndroid Build Coastguard Worker  *  This is useful to include xxhash functions in `static` mode
87*27162e4eSAndroid Build Coastguard Worker  *  in order to inline them, and remove their symbol from the public list.
88*27162e4eSAndroid Build Coastguard Worker  *  Inlining can offer dramatic performance improvement on small keys.
89*27162e4eSAndroid Build Coastguard Worker  *  Methodology :
90*27162e4eSAndroid Build Coastguard Worker  *     #define XXH_INLINE_ALL
91*27162e4eSAndroid Build Coastguard Worker  *     #include "xxhash.h"
92*27162e4eSAndroid Build Coastguard Worker  * `xxhash.c` is automatically included.
93*27162e4eSAndroid Build Coastguard Worker  *  It's not useful to compile and link it as a separate module.
94*27162e4eSAndroid Build Coastguard Worker  */
95*27162e4eSAndroid Build Coastguard Worker #if defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API)
96*27162e4eSAndroid Build Coastguard Worker #  ifndef XXH_STATIC_LINKING_ONLY
97*27162e4eSAndroid Build Coastguard Worker #    define XXH_STATIC_LINKING_ONLY
98*27162e4eSAndroid Build Coastguard Worker #  endif
99*27162e4eSAndroid Build Coastguard Worker #  if defined(__GNUC__)
100*27162e4eSAndroid Build Coastguard Worker #    define XXH_PUBLIC_API static __inline __attribute__((unused))
101*27162e4eSAndroid Build Coastguard Worker #  elif defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */)
102*27162e4eSAndroid Build Coastguard Worker #    define XXH_PUBLIC_API static inline
103*27162e4eSAndroid Build Coastguard Worker #  elif defined(_MSC_VER)
104*27162e4eSAndroid Build Coastguard Worker #    define XXH_PUBLIC_API static __inline
105*27162e4eSAndroid Build Coastguard Worker #  else
106*27162e4eSAndroid Build Coastguard Worker      /* this version may generate warnings for unused static functions */
107*27162e4eSAndroid Build Coastguard Worker #    define XXH_PUBLIC_API static
108*27162e4eSAndroid Build Coastguard Worker #  endif
109*27162e4eSAndroid Build Coastguard Worker #else
110*27162e4eSAndroid Build Coastguard Worker #  define XXH_PUBLIC_API   /* do nothing */
111*27162e4eSAndroid Build Coastguard Worker #endif /* XXH_INLINE_ALL || XXH_PRIVATE_API */
112*27162e4eSAndroid Build Coastguard Worker 
113*27162e4eSAndroid Build Coastguard Worker /*! XXH_NAMESPACE, aka Namespace Emulation :
114*27162e4eSAndroid Build Coastguard Worker  *
115*27162e4eSAndroid Build Coastguard Worker  * If you want to include _and expose_ xxHash functions from within your own library,
116*27162e4eSAndroid Build Coastguard Worker  * but also want to avoid symbol collisions with other libraries which may also include xxHash,
117*27162e4eSAndroid Build Coastguard Worker  *
118*27162e4eSAndroid Build Coastguard Worker  * you can use XXH_NAMESPACE, to automatically prefix any public symbol from xxhash library
119*27162e4eSAndroid Build Coastguard Worker  * with the value of XXH_NAMESPACE (therefore, avoid NULL and numeric values).
120*27162e4eSAndroid Build Coastguard Worker  *
121*27162e4eSAndroid Build Coastguard Worker  * Note that no change is required within the calling program as long as it includes `xxhash.h` :
122*27162e4eSAndroid Build Coastguard Worker  * regular symbol name will be automatically translated by this header.
123*27162e4eSAndroid Build Coastguard Worker  */
124*27162e4eSAndroid Build Coastguard Worker #ifdef XXH_NAMESPACE
125*27162e4eSAndroid Build Coastguard Worker #  define XXH_CAT(A,B) A##B
126*27162e4eSAndroid Build Coastguard Worker #  define XXH_NAME2(A,B) XXH_CAT(A,B)
127*27162e4eSAndroid Build Coastguard Worker #  define XXH_versionNumber XXH_NAME2(XXH_NAMESPACE, XXH_versionNumber)
128*27162e4eSAndroid Build Coastguard Worker #  define XXH32 XXH_NAME2(XXH_NAMESPACE, XXH32)
129*27162e4eSAndroid Build Coastguard Worker #  define XXH32_createState XXH_NAME2(XXH_NAMESPACE, XXH32_createState)
130*27162e4eSAndroid Build Coastguard Worker #  define XXH32_freeState XXH_NAME2(XXH_NAMESPACE, XXH32_freeState)
131*27162e4eSAndroid Build Coastguard Worker #  define XXH32_reset XXH_NAME2(XXH_NAMESPACE, XXH32_reset)
132*27162e4eSAndroid Build Coastguard Worker #  define XXH32_update XXH_NAME2(XXH_NAMESPACE, XXH32_update)
133*27162e4eSAndroid Build Coastguard Worker #  define XXH32_digest XXH_NAME2(XXH_NAMESPACE, XXH32_digest)
134*27162e4eSAndroid Build Coastguard Worker #  define XXH32_copyState XXH_NAME2(XXH_NAMESPACE, XXH32_copyState)
135*27162e4eSAndroid Build Coastguard Worker #  define XXH32_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH32_canonicalFromHash)
136*27162e4eSAndroid Build Coastguard Worker #  define XXH32_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH32_hashFromCanonical)
137*27162e4eSAndroid Build Coastguard Worker #  define XXH64 XXH_NAME2(XXH_NAMESPACE, XXH64)
138*27162e4eSAndroid Build Coastguard Worker #  define XXH64_createState XXH_NAME2(XXH_NAMESPACE, XXH64_createState)
139*27162e4eSAndroid Build Coastguard Worker #  define XXH64_freeState XXH_NAME2(XXH_NAMESPACE, XXH64_freeState)
140*27162e4eSAndroid Build Coastguard Worker #  define XXH64_reset XXH_NAME2(XXH_NAMESPACE, XXH64_reset)
141*27162e4eSAndroid Build Coastguard Worker #  define XXH64_update XXH_NAME2(XXH_NAMESPACE, XXH64_update)
142*27162e4eSAndroid Build Coastguard Worker #  define XXH64_digest XXH_NAME2(XXH_NAMESPACE, XXH64_digest)
143*27162e4eSAndroid Build Coastguard Worker #  define XXH64_copyState XXH_NAME2(XXH_NAMESPACE, XXH64_copyState)
144*27162e4eSAndroid Build Coastguard Worker #  define XXH64_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH64_canonicalFromHash)
145*27162e4eSAndroid Build Coastguard Worker #  define XXH64_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH64_hashFromCanonical)
146*27162e4eSAndroid Build Coastguard Worker #endif
147*27162e4eSAndroid Build Coastguard Worker 
148*27162e4eSAndroid Build Coastguard Worker 
149*27162e4eSAndroid Build Coastguard Worker /* *************************************
150*27162e4eSAndroid Build Coastguard Worker *  Version
151*27162e4eSAndroid Build Coastguard Worker ***************************************/
152*27162e4eSAndroid Build Coastguard Worker #define XXH_VERSION_MAJOR    0
153*27162e4eSAndroid Build Coastguard Worker #define XXH_VERSION_MINOR    6
154*27162e4eSAndroid Build Coastguard Worker #define XXH_VERSION_RELEASE  5
155*27162e4eSAndroid Build Coastguard Worker #define XXH_VERSION_NUMBER  (XXH_VERSION_MAJOR *100*100 + XXH_VERSION_MINOR *100 + XXH_VERSION_RELEASE)
156*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API unsigned XXH_versionNumber (void);
157*27162e4eSAndroid Build Coastguard Worker 
158*27162e4eSAndroid Build Coastguard Worker 
159*27162e4eSAndroid Build Coastguard Worker /*-**********************************************************************
160*27162e4eSAndroid Build Coastguard Worker *  32-bit hash
161*27162e4eSAndroid Build Coastguard Worker ************************************************************************/
162*27162e4eSAndroid Build Coastguard Worker typedef unsigned int XXH32_hash_t;
163*27162e4eSAndroid Build Coastguard Worker 
164*27162e4eSAndroid Build Coastguard Worker /*! XXH32() :
165*27162e4eSAndroid Build Coastguard Worker     Calculate the 32-bit hash of sequence "length" bytes stored at memory address "input".
166*27162e4eSAndroid Build Coastguard Worker     The memory between input & input+length must be valid (allocated and read-accessible).
167*27162e4eSAndroid Build Coastguard Worker     "seed" can be used to alter the result predictably.
168*27162e4eSAndroid Build Coastguard Worker     Speed on Core 2 Duo @ 3 GHz (single thread, SMHasher benchmark) : 5.4 GB/s */
169*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API XXH32_hash_t XXH32 (const void* input, size_t length, unsigned int seed);
170*27162e4eSAndroid Build Coastguard Worker 
171*27162e4eSAndroid Build Coastguard Worker /*======   Streaming   ======*/
172*27162e4eSAndroid Build Coastguard Worker typedef struct XXH32_state_s XXH32_state_t;   /* incomplete type */
173*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API XXH32_state_t* XXH32_createState(void);
174*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API XXH_errorcode  XXH32_freeState(XXH32_state_t* statePtr);
175*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API void XXH32_copyState(XXH32_state_t* dst_state, const XXH32_state_t* src_state);
176*27162e4eSAndroid Build Coastguard Worker 
177*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API XXH_errorcode XXH32_reset  (XXH32_state_t* statePtr, unsigned int seed);
178*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API XXH_errorcode XXH32_update (XXH32_state_t* statePtr, const void* input, size_t length);
179*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API XXH32_hash_t  XXH32_digest (const XXH32_state_t* statePtr);
180*27162e4eSAndroid Build Coastguard Worker 
181*27162e4eSAndroid Build Coastguard Worker /*
182*27162e4eSAndroid Build Coastguard Worker  * Streaming functions generate the xxHash of an input provided in multiple segments.
183*27162e4eSAndroid Build Coastguard Worker  * Note that, for small input, they are slower than single-call functions, due to state management.
184*27162e4eSAndroid Build Coastguard Worker  * For small inputs, prefer `XXH32()` and `XXH64()`, which are better optimized.
185*27162e4eSAndroid Build Coastguard Worker  *
186*27162e4eSAndroid Build Coastguard Worker  * XXH state must first be allocated, using XXH*_createState() .
187*27162e4eSAndroid Build Coastguard Worker  *
188*27162e4eSAndroid Build Coastguard Worker  * Start a new hash by initializing state with a seed, using XXH*_reset().
189*27162e4eSAndroid Build Coastguard Worker  *
190*27162e4eSAndroid Build Coastguard Worker  * Then, feed the hash state by calling XXH*_update() as many times as necessary.
191*27162e4eSAndroid Build Coastguard Worker  * The function returns an error code, with 0 meaning OK, and any other value meaning there is an error.
192*27162e4eSAndroid Build Coastguard Worker  *
193*27162e4eSAndroid Build Coastguard Worker  * Finally, a hash value can be produced anytime, by using XXH*_digest().
194*27162e4eSAndroid Build Coastguard Worker  * This function returns the nn-bits hash as an int or long long.
195*27162e4eSAndroid Build Coastguard Worker  *
196*27162e4eSAndroid Build Coastguard Worker  * It's still possible to continue inserting input into the hash state after a digest,
197*27162e4eSAndroid Build Coastguard Worker  * and generate some new hashes later on, by calling again XXH*_digest().
198*27162e4eSAndroid Build Coastguard Worker  *
199*27162e4eSAndroid Build Coastguard Worker  * When done, free XXH state space if it was allocated dynamically.
200*27162e4eSAndroid Build Coastguard Worker  */
201*27162e4eSAndroid Build Coastguard Worker 
202*27162e4eSAndroid Build Coastguard Worker /*======   Canonical representation   ======*/
203*27162e4eSAndroid Build Coastguard Worker 
204*27162e4eSAndroid Build Coastguard Worker typedef struct { unsigned char digest[4]; } XXH32_canonical_t;
205*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API void XXH32_canonicalFromHash(XXH32_canonical_t* dst, XXH32_hash_t hash);
206*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API XXH32_hash_t XXH32_hashFromCanonical(const XXH32_canonical_t* src);
207*27162e4eSAndroid Build Coastguard Worker 
208*27162e4eSAndroid Build Coastguard Worker /* Default result type for XXH functions are primitive unsigned 32 and 64 bits.
209*27162e4eSAndroid Build Coastguard Worker  * The canonical representation uses human-readable write convention, aka big-endian (large digits first).
210*27162e4eSAndroid Build Coastguard Worker  * These functions allow transformation of hash result into and from its canonical format.
211*27162e4eSAndroid Build Coastguard Worker  * This way, hash values can be written into a file / memory, and remain comparable on different systems and programs.
212*27162e4eSAndroid Build Coastguard Worker  */
213*27162e4eSAndroid Build Coastguard Worker 
214*27162e4eSAndroid Build Coastguard Worker 
215*27162e4eSAndroid Build Coastguard Worker #ifndef XXH_NO_LONG_LONG
216*27162e4eSAndroid Build Coastguard Worker /*-**********************************************************************
217*27162e4eSAndroid Build Coastguard Worker *  64-bit hash
218*27162e4eSAndroid Build Coastguard Worker ************************************************************************/
219*27162e4eSAndroid Build Coastguard Worker typedef unsigned long long XXH64_hash_t;
220*27162e4eSAndroid Build Coastguard Worker 
221*27162e4eSAndroid Build Coastguard Worker /*! XXH64() :
222*27162e4eSAndroid Build Coastguard Worker     Calculate the 64-bit hash of sequence of length "len" stored at memory address "input".
223*27162e4eSAndroid Build Coastguard Worker     "seed" can be used to alter the result predictably.
224*27162e4eSAndroid Build Coastguard Worker     This function runs faster on 64-bit systems, but slower on 32-bit systems (see benchmark).
225*27162e4eSAndroid Build Coastguard Worker */
226*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API XXH64_hash_t XXH64 (const void* input, size_t length, unsigned long long seed);
227*27162e4eSAndroid Build Coastguard Worker 
228*27162e4eSAndroid Build Coastguard Worker /*======   Streaming   ======*/
229*27162e4eSAndroid Build Coastguard Worker typedef struct XXH64_state_s XXH64_state_t;   /* incomplete type */
230*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API XXH64_state_t* XXH64_createState(void);
231*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API XXH_errorcode  XXH64_freeState(XXH64_state_t* statePtr);
232*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API void XXH64_copyState(XXH64_state_t* dst_state, const XXH64_state_t* src_state);
233*27162e4eSAndroid Build Coastguard Worker 
234*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API XXH_errorcode XXH64_reset  (XXH64_state_t* statePtr, unsigned long long seed);
235*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API XXH_errorcode XXH64_update (XXH64_state_t* statePtr, const void* input, size_t length);
236*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API XXH64_hash_t  XXH64_digest (const XXH64_state_t* statePtr);
237*27162e4eSAndroid Build Coastguard Worker 
238*27162e4eSAndroid Build Coastguard Worker /*======   Canonical representation   ======*/
239*27162e4eSAndroid Build Coastguard Worker typedef struct { unsigned char digest[8]; } XXH64_canonical_t;
240*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API void XXH64_canonicalFromHash(XXH64_canonical_t* dst, XXH64_hash_t hash);
241*27162e4eSAndroid Build Coastguard Worker XXH_PUBLIC_API XXH64_hash_t XXH64_hashFromCanonical(const XXH64_canonical_t* src);
242*27162e4eSAndroid Build Coastguard Worker #endif  /* XXH_NO_LONG_LONG */
243*27162e4eSAndroid Build Coastguard Worker 
244*27162e4eSAndroid Build Coastguard Worker 
245*27162e4eSAndroid Build Coastguard Worker 
246*27162e4eSAndroid Build Coastguard Worker #ifdef XXH_STATIC_LINKING_ONLY
247*27162e4eSAndroid Build Coastguard Worker 
248*27162e4eSAndroid Build Coastguard Worker /* ================================================================================================
249*27162e4eSAndroid Build Coastguard Worker    This section contains declarations which are not guaranteed to remain stable.
250*27162e4eSAndroid Build Coastguard Worker    They may change in future versions, becoming incompatible with a different version of the library.
251*27162e4eSAndroid Build Coastguard Worker    These declarations should only be used with static linking.
252*27162e4eSAndroid Build Coastguard Worker    Never use them in association with dynamic linking !
253*27162e4eSAndroid Build Coastguard Worker =================================================================================================== */
254*27162e4eSAndroid Build Coastguard Worker 
255*27162e4eSAndroid Build Coastguard Worker /* These definitions are only present to allow
256*27162e4eSAndroid Build Coastguard Worker  * static allocation of XXH state, on stack or in a struct for example.
257*27162e4eSAndroid Build Coastguard Worker  * Never **ever** use members directly. */
258*27162e4eSAndroid Build Coastguard Worker 
259*27162e4eSAndroid Build Coastguard Worker #if !defined (__VMS) \
260*27162e4eSAndroid Build Coastguard Worker   && (defined (__cplusplus) \
261*27162e4eSAndroid Build Coastguard Worker   || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) )
262*27162e4eSAndroid Build Coastguard Worker #   include <stdint.h>
263*27162e4eSAndroid Build Coastguard Worker 
264*27162e4eSAndroid Build Coastguard Worker struct XXH32_state_s {
265*27162e4eSAndroid Build Coastguard Worker    uint32_t total_len_32;
266*27162e4eSAndroid Build Coastguard Worker    uint32_t large_len;
267*27162e4eSAndroid Build Coastguard Worker    uint32_t v1;
268*27162e4eSAndroid Build Coastguard Worker    uint32_t v2;
269*27162e4eSAndroid Build Coastguard Worker    uint32_t v3;
270*27162e4eSAndroid Build Coastguard Worker    uint32_t v4;
271*27162e4eSAndroid Build Coastguard Worker    uint32_t mem32[4];
272*27162e4eSAndroid Build Coastguard Worker    uint32_t memsize;
273*27162e4eSAndroid Build Coastguard Worker    uint32_t reserved;   /* never read nor write, might be removed in a future version */
274*27162e4eSAndroid Build Coastguard Worker };   /* typedef'd to XXH32_state_t */
275*27162e4eSAndroid Build Coastguard Worker 
276*27162e4eSAndroid Build Coastguard Worker struct XXH64_state_s {
277*27162e4eSAndroid Build Coastguard Worker    uint64_t total_len;
278*27162e4eSAndroid Build Coastguard Worker    uint64_t v1;
279*27162e4eSAndroid Build Coastguard Worker    uint64_t v2;
280*27162e4eSAndroid Build Coastguard Worker    uint64_t v3;
281*27162e4eSAndroid Build Coastguard Worker    uint64_t v4;
282*27162e4eSAndroid Build Coastguard Worker    uint64_t mem64[4];
283*27162e4eSAndroid Build Coastguard Worker    uint32_t memsize;
284*27162e4eSAndroid Build Coastguard Worker    uint32_t reserved[2];          /* never read nor write, might be removed in a future version */
285*27162e4eSAndroid Build Coastguard Worker };   /* typedef'd to XXH64_state_t */
286*27162e4eSAndroid Build Coastguard Worker 
287*27162e4eSAndroid Build Coastguard Worker # else
288*27162e4eSAndroid Build Coastguard Worker 
289*27162e4eSAndroid Build Coastguard Worker struct XXH32_state_s {
290*27162e4eSAndroid Build Coastguard Worker    unsigned total_len_32;
291*27162e4eSAndroid Build Coastguard Worker    unsigned large_len;
292*27162e4eSAndroid Build Coastguard Worker    unsigned v1;
293*27162e4eSAndroid Build Coastguard Worker    unsigned v2;
294*27162e4eSAndroid Build Coastguard Worker    unsigned v3;
295*27162e4eSAndroid Build Coastguard Worker    unsigned v4;
296*27162e4eSAndroid Build Coastguard Worker    unsigned mem32[4];
297*27162e4eSAndroid Build Coastguard Worker    unsigned memsize;
298*27162e4eSAndroid Build Coastguard Worker    unsigned reserved;   /* never read nor write, might be removed in a future version */
299*27162e4eSAndroid Build Coastguard Worker };   /* typedef'd to XXH32_state_t */
300*27162e4eSAndroid Build Coastguard Worker 
301*27162e4eSAndroid Build Coastguard Worker #   ifndef XXH_NO_LONG_LONG  /* remove 64-bit support */
302*27162e4eSAndroid Build Coastguard Worker struct XXH64_state_s {
303*27162e4eSAndroid Build Coastguard Worker    unsigned long long total_len;
304*27162e4eSAndroid Build Coastguard Worker    unsigned long long v1;
305*27162e4eSAndroid Build Coastguard Worker    unsigned long long v2;
306*27162e4eSAndroid Build Coastguard Worker    unsigned long long v3;
307*27162e4eSAndroid Build Coastguard Worker    unsigned long long v4;
308*27162e4eSAndroid Build Coastguard Worker    unsigned long long mem64[4];
309*27162e4eSAndroid Build Coastguard Worker    unsigned memsize;
310*27162e4eSAndroid Build Coastguard Worker    unsigned reserved[2];     /* never read nor write, might be removed in a future version */
311*27162e4eSAndroid Build Coastguard Worker };   /* typedef'd to XXH64_state_t */
312*27162e4eSAndroid Build Coastguard Worker #    endif
313*27162e4eSAndroid Build Coastguard Worker 
314*27162e4eSAndroid Build Coastguard Worker # endif
315*27162e4eSAndroid Build Coastguard Worker 
316*27162e4eSAndroid Build Coastguard Worker 
317*27162e4eSAndroid Build Coastguard Worker #if defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API)
318*27162e4eSAndroid Build Coastguard Worker #  include "xxhash.c"   /* include xxhash function bodies as `static`, for inlining */
319*27162e4eSAndroid Build Coastguard Worker #endif
320*27162e4eSAndroid Build Coastguard Worker 
321*27162e4eSAndroid Build Coastguard Worker #endif /* XXH_STATIC_LINKING_ONLY */
322*27162e4eSAndroid Build Coastguard Worker 
323*27162e4eSAndroid Build Coastguard Worker 
324*27162e4eSAndroid Build Coastguard Worker #if defined (__cplusplus)
325*27162e4eSAndroid Build Coastguard Worker }
326*27162e4eSAndroid Build Coastguard Worker #endif
327*27162e4eSAndroid Build Coastguard Worker 
328*27162e4eSAndroid Build Coastguard Worker #endif /* XXHASH_H_5627135585666179 */
329