xref: /aosp_15_r20/external/lzma/C/Xxh64.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker /* Xxh64.h -- XXH64 hash calculation interfaces
2*f6dc9357SAndroid Build Coastguard Worker 2023-08-18 : Igor Pavlov : Public domain */
3*f6dc9357SAndroid Build Coastguard Worker 
4*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_XXH64_H
5*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_XXH64_H
6*f6dc9357SAndroid Build Coastguard Worker 
7*f6dc9357SAndroid Build Coastguard Worker #include "7zTypes.h"
8*f6dc9357SAndroid Build Coastguard Worker 
9*f6dc9357SAndroid Build Coastguard Worker EXTERN_C_BEGIN
10*f6dc9357SAndroid Build Coastguard Worker 
11*f6dc9357SAndroid Build Coastguard Worker #define Z7_XXH64_BLOCK_SIZE  (4 * 8)
12*f6dc9357SAndroid Build Coastguard Worker 
13*f6dc9357SAndroid Build Coastguard Worker typedef struct
14*f6dc9357SAndroid Build Coastguard Worker {
15*f6dc9357SAndroid Build Coastguard Worker   UInt64 v[4];
16*f6dc9357SAndroid Build Coastguard Worker } CXxh64State;
17*f6dc9357SAndroid Build Coastguard Worker 
18*f6dc9357SAndroid Build Coastguard Worker void Xxh64State_Init(CXxh64State *p);
19*f6dc9357SAndroid Build Coastguard Worker 
20*f6dc9357SAndroid Build Coastguard Worker // end != data && end == data + Z7_XXH64_BLOCK_SIZE * numBlocks
21*f6dc9357SAndroid Build Coastguard Worker void Z7_FASTCALL Xxh64State_UpdateBlocks(CXxh64State *p, const void *data, const void *end);
22*f6dc9357SAndroid Build Coastguard Worker 
23*f6dc9357SAndroid Build Coastguard Worker /*
24*f6dc9357SAndroid Build Coastguard Worker Xxh64State_Digest():
25*f6dc9357SAndroid Build Coastguard Worker data:
26*f6dc9357SAndroid Build Coastguard Worker   the function processes only
27*f6dc9357SAndroid Build Coastguard Worker     (totalCount & (Z7_XXH64_BLOCK_SIZE - 1)) bytes in (data): (smaller than 32 bytes).
28*f6dc9357SAndroid Build Coastguard Worker totalCount: total size of hashed stream:
29*f6dc9357SAndroid Build Coastguard Worker   it includes total size of data processed by previous Xxh64State_UpdateBlocks() calls,
30*f6dc9357SAndroid Build Coastguard Worker   and it also includes current processed size in (data).
31*f6dc9357SAndroid Build Coastguard Worker */
32*f6dc9357SAndroid Build Coastguard Worker UInt64 Xxh64State_Digest(const CXxh64State *p, const void *data, UInt64 totalCount);
33*f6dc9357SAndroid Build Coastguard Worker 
34*f6dc9357SAndroid Build Coastguard Worker 
35*f6dc9357SAndroid Build Coastguard Worker typedef struct
36*f6dc9357SAndroid Build Coastguard Worker {
37*f6dc9357SAndroid Build Coastguard Worker   CXxh64State state;
38*f6dc9357SAndroid Build Coastguard Worker   UInt64 count;
39*f6dc9357SAndroid Build Coastguard Worker   UInt64 buf64[4];
40*f6dc9357SAndroid Build Coastguard Worker } CXxh64;
41*f6dc9357SAndroid Build Coastguard Worker 
42*f6dc9357SAndroid Build Coastguard Worker void Xxh64_Init(CXxh64 *p);
43*f6dc9357SAndroid Build Coastguard Worker void Xxh64_Update(CXxh64 *p, const void *data, size_t size);
44*f6dc9357SAndroid Build Coastguard Worker 
45*f6dc9357SAndroid Build Coastguard Worker #define Xxh64_Digest(p) \
46*f6dc9357SAndroid Build Coastguard Worker   Xxh64State_Digest(&(p)->state, (p)->buf64, (p)->count)
47*f6dc9357SAndroid Build Coastguard Worker 
48*f6dc9357SAndroid Build Coastguard Worker EXTERN_C_END
49*f6dc9357SAndroid Build Coastguard Worker 
50*f6dc9357SAndroid Build Coastguard Worker #endif
51