extzstd 0.1 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/HISTORY.ja.md +39 -0
- data/README.md +38 -56
- data/contrib/zstd/CHANGELOG +613 -0
- data/contrib/zstd/CODE_OF_CONDUCT.md +5 -0
- data/contrib/zstd/CONTRIBUTING.md +406 -0
- data/contrib/zstd/COPYING +339 -0
- data/contrib/zstd/Makefile +420 -0
- data/contrib/zstd/README.md +179 -41
- data/contrib/zstd/TESTING.md +44 -0
- data/contrib/zstd/appveyor.yml +292 -0
- data/contrib/zstd/lib/BUCK +234 -0
- data/contrib/zstd/lib/Makefile +451 -0
- data/contrib/zstd/lib/README.md +207 -0
- data/contrib/zstd/{common → lib/common}/bitstream.h +187 -138
- data/contrib/zstd/lib/common/compiler.h +288 -0
- data/contrib/zstd/lib/common/cpu.h +213 -0
- data/contrib/zstd/lib/common/debug.c +24 -0
- data/contrib/zstd/lib/common/debug.h +107 -0
- data/contrib/zstd/lib/common/entropy_common.c +362 -0
- data/contrib/zstd/{common → lib/common}/error_private.c +25 -12
- data/contrib/zstd/{common → lib/common}/error_private.h +14 -10
- data/contrib/zstd/{common → lib/common}/fse.h +173 -92
- data/contrib/zstd/{common → lib/common}/fse_decompress.c +149 -85
- data/contrib/zstd/lib/common/huf.h +361 -0
- data/contrib/zstd/{common → lib/common}/mem.h +115 -59
- data/contrib/zstd/lib/common/pool.c +350 -0
- data/contrib/zstd/lib/common/pool.h +84 -0
- data/contrib/zstd/lib/common/threading.c +122 -0
- data/contrib/zstd/lib/common/threading.h +155 -0
- data/contrib/zstd/{common → lib/common}/xxhash.c +55 -96
- data/contrib/zstd/{common → lib/common}/xxhash.h +23 -47
- data/contrib/zstd/lib/common/zstd_common.c +83 -0
- data/contrib/zstd/lib/common/zstd_deps.h +111 -0
- data/contrib/zstd/lib/common/zstd_errors.h +95 -0
- data/contrib/zstd/lib/common/zstd_internal.h +478 -0
- data/contrib/zstd/{compress → lib/compress}/fse_compress.c +214 -319
- data/contrib/zstd/lib/compress/hist.c +181 -0
- data/contrib/zstd/lib/compress/hist.h +75 -0
- data/contrib/zstd/lib/compress/huf_compress.c +913 -0
- data/contrib/zstd/lib/compress/zstd_compress.c +5208 -0
- data/contrib/zstd/lib/compress/zstd_compress_internal.h +1203 -0
- data/contrib/zstd/lib/compress/zstd_compress_literals.c +158 -0
- data/contrib/zstd/lib/compress/zstd_compress_literals.h +29 -0
- data/contrib/zstd/lib/compress/zstd_compress_sequences.c +433 -0
- data/contrib/zstd/lib/compress/zstd_compress_sequences.h +54 -0
- data/contrib/zstd/lib/compress/zstd_compress_superblock.c +849 -0
- data/contrib/zstd/lib/compress/zstd_compress_superblock.h +32 -0
- data/contrib/zstd/lib/compress/zstd_cwksp.h +561 -0
- data/contrib/zstd/lib/compress/zstd_double_fast.c +521 -0
- data/contrib/zstd/lib/compress/zstd_double_fast.h +38 -0
- data/contrib/zstd/lib/compress/zstd_fast.c +496 -0
- data/contrib/zstd/lib/compress/zstd_fast.h +37 -0
- data/contrib/zstd/lib/compress/zstd_lazy.c +1412 -0
- data/contrib/zstd/lib/compress/zstd_lazy.h +87 -0
- data/contrib/zstd/lib/compress/zstd_ldm.c +660 -0
- data/contrib/zstd/lib/compress/zstd_ldm.h +116 -0
- data/contrib/zstd/lib/compress/zstd_opt.c +1345 -0
- data/contrib/zstd/lib/compress/zstd_opt.h +56 -0
- data/contrib/zstd/lib/compress/zstdmt_compress.c +1811 -0
- data/contrib/zstd/lib/compress/zstdmt_compress.h +110 -0
- data/contrib/zstd/lib/decompress/huf_decompress.c +1350 -0
- data/contrib/zstd/lib/decompress/zstd_ddict.c +244 -0
- data/contrib/zstd/lib/decompress/zstd_ddict.h +44 -0
- data/contrib/zstd/lib/decompress/zstd_decompress.c +1930 -0
- data/contrib/zstd/lib/decompress/zstd_decompress_block.c +1540 -0
- data/contrib/zstd/lib/decompress/zstd_decompress_block.h +62 -0
- data/contrib/zstd/lib/decompress/zstd_decompress_internal.h +190 -0
- data/contrib/zstd/{common → lib/deprecated}/zbuff.h +68 -45
- data/contrib/zstd/lib/deprecated/zbuff_common.c +26 -0
- data/contrib/zstd/lib/deprecated/zbuff_compress.c +147 -0
- data/contrib/zstd/lib/deprecated/zbuff_decompress.c +75 -0
- data/contrib/zstd/lib/dictBuilder/cover.c +1245 -0
- data/contrib/zstd/lib/dictBuilder/cover.h +157 -0
- data/contrib/zstd/{dictBuilder → lib/dictBuilder}/divsufsort.c +3 -3
- data/contrib/zstd/{dictBuilder → lib/dictBuilder}/divsufsort.h +0 -0
- data/contrib/zstd/lib/dictBuilder/fastcover.c +758 -0
- data/contrib/zstd/{dictBuilder → lib/dictBuilder}/zdict.c +318 -194
- data/contrib/zstd/lib/dictBuilder/zdict.h +305 -0
- data/contrib/zstd/{legacy → lib/legacy}/zstd_legacy.h +171 -15
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v01.c +191 -124
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v01.h +19 -5
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v02.c +125 -125
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v02.h +19 -5
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v03.c +125 -124
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v03.h +20 -6
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v04.c +151 -299
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v04.h +19 -5
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v05.c +237 -243
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v05.h +19 -6
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v06.c +130 -143
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v06.h +18 -5
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v07.c +158 -157
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v07.h +19 -5
- data/contrib/zstd/lib/libzstd.pc.in +15 -0
- data/contrib/zstd/lib/zstd.h +2391 -0
- data/ext/depend +2 -0
- data/ext/extconf.rb +15 -6
- data/ext/extzstd.c +76 -145
- data/ext/extzstd.h +80 -31
- data/ext/extzstd_stream.c +417 -142
- data/ext/libzstd_conf.h +8 -0
- data/ext/zstd_common.c +10 -7
- data/ext/zstd_compress.c +14 -5
- data/ext/zstd_decompress.c +5 -4
- data/ext/zstd_dictbuilder.c +9 -4
- data/ext/zstd_dictbuilder_fastcover.c +3 -0
- data/ext/zstd_legacy_v01.c +3 -1
- data/ext/zstd_legacy_v02.c +3 -1
- data/ext/zstd_legacy_v03.c +3 -1
- data/ext/zstd_legacy_v04.c +3 -1
- data/ext/zstd_legacy_v05.c +3 -1
- data/ext/zstd_legacy_v06.c +3 -1
- data/ext/zstd_legacy_v07.c +3 -1
- data/gemstub.rb +10 -24
- data/lib/extzstd.rb +64 -179
- data/lib/extzstd/version.rb +6 -1
- data/test/test_basic.rb +9 -6
- metadata +113 -57
- data/HISTORY.ja +0 -5
- data/contrib/zstd/common/entropy_common.c +0 -225
- data/contrib/zstd/common/huf.h +0 -228
- data/contrib/zstd/common/zstd_common.c +0 -83
- data/contrib/zstd/common/zstd_errors.h +0 -60
- data/contrib/zstd/common/zstd_internal.h +0 -267
- data/contrib/zstd/compress/huf_compress.c +0 -533
- data/contrib/zstd/compress/zbuff_compress.c +0 -319
- data/contrib/zstd/compress/zstd_compress.c +0 -3264
- data/contrib/zstd/compress/zstd_opt.h +0 -900
- data/contrib/zstd/decompress/huf_decompress.c +0 -883
- data/contrib/zstd/decompress/zbuff_decompress.c +0 -252
- data/contrib/zstd/decompress/zstd_decompress.c +0 -1842
- data/contrib/zstd/dictBuilder/zdict.h +0 -111
- data/contrib/zstd/zstd.h +0 -640
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under both the BSD-style license (found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree) and the GPLv2 (found
|
|
7
|
+
* in the COPYING file in the root directory of this source tree).
|
|
8
|
+
* You may select, at your option, one of the above-listed licenses.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
#ifndef POOL_H
|
|
12
|
+
#define POOL_H
|
|
13
|
+
|
|
14
|
+
#if defined (__cplusplus)
|
|
15
|
+
extern "C" {
|
|
16
|
+
#endif
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
#include "zstd_deps.h"
|
|
20
|
+
#define ZSTD_STATIC_LINKING_ONLY /* ZSTD_customMem */
|
|
21
|
+
#include "../zstd.h"
|
|
22
|
+
|
|
23
|
+
typedef struct POOL_ctx_s POOL_ctx;
|
|
24
|
+
|
|
25
|
+
/*! POOL_create() :
|
|
26
|
+
* Create a thread pool with at most `numThreads` threads.
|
|
27
|
+
* `numThreads` must be at least 1.
|
|
28
|
+
* The maximum number of queued jobs before blocking is `queueSize`.
|
|
29
|
+
* @return : POOL_ctx pointer on success, else NULL.
|
|
30
|
+
*/
|
|
31
|
+
POOL_ctx* POOL_create(size_t numThreads, size_t queueSize);
|
|
32
|
+
|
|
33
|
+
POOL_ctx* POOL_create_advanced(size_t numThreads, size_t queueSize,
|
|
34
|
+
ZSTD_customMem customMem);
|
|
35
|
+
|
|
36
|
+
/*! POOL_free() :
|
|
37
|
+
* Free a thread pool returned by POOL_create().
|
|
38
|
+
*/
|
|
39
|
+
void POOL_free(POOL_ctx* ctx);
|
|
40
|
+
|
|
41
|
+
/*! POOL_resize() :
|
|
42
|
+
* Expands or shrinks pool's number of threads.
|
|
43
|
+
* This is more efficient than releasing + creating a new context,
|
|
44
|
+
* since it tries to preserve and re-use existing threads.
|
|
45
|
+
* `numThreads` must be at least 1.
|
|
46
|
+
* @return : 0 when resize was successful,
|
|
47
|
+
* !0 (typically 1) if there is an error.
|
|
48
|
+
* note : only numThreads can be resized, queueSize remains unchanged.
|
|
49
|
+
*/
|
|
50
|
+
int POOL_resize(POOL_ctx* ctx, size_t numThreads);
|
|
51
|
+
|
|
52
|
+
/*! POOL_sizeof() :
|
|
53
|
+
* @return threadpool memory usage
|
|
54
|
+
* note : compatible with NULL (returns 0 in this case)
|
|
55
|
+
*/
|
|
56
|
+
size_t POOL_sizeof(POOL_ctx* ctx);
|
|
57
|
+
|
|
58
|
+
/*! POOL_function :
|
|
59
|
+
* The function type that can be added to a thread pool.
|
|
60
|
+
*/
|
|
61
|
+
typedef void (*POOL_function)(void*);
|
|
62
|
+
|
|
63
|
+
/*! POOL_add() :
|
|
64
|
+
* Add the job `function(opaque)` to the thread pool. `ctx` must be valid.
|
|
65
|
+
* Possibly blocks until there is room in the queue.
|
|
66
|
+
* Note : The function may be executed asynchronously,
|
|
67
|
+
* therefore, `opaque` must live until function has been completed.
|
|
68
|
+
*/
|
|
69
|
+
void POOL_add(POOL_ctx* ctx, POOL_function function, void* opaque);
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
/*! POOL_tryAdd() :
|
|
73
|
+
* Add the job `function(opaque)` to thread pool _if_ a worker is available.
|
|
74
|
+
* Returns immediately even if not (does not block).
|
|
75
|
+
* @return : 1 if successful, 0 if not.
|
|
76
|
+
*/
|
|
77
|
+
int POOL_tryAdd(POOL_ctx* ctx, POOL_function function, void* opaque);
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
#if defined (__cplusplus)
|
|
81
|
+
}
|
|
82
|
+
#endif
|
|
83
|
+
|
|
84
|
+
#endif
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2016 Tino Reichardt
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* You can contact the author at:
|
|
6
|
+
* - zstdmt source repository: https://github.com/mcmilk/zstdmt
|
|
7
|
+
*
|
|
8
|
+
* This source code is licensed under both the BSD-style license (found in the
|
|
9
|
+
* LICENSE file in the root directory of this source tree) and the GPLv2 (found
|
|
10
|
+
* in the COPYING file in the root directory of this source tree).
|
|
11
|
+
* You may select, at your option, one of the above-listed licenses.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* This file will hold wrapper for systems, which do not support pthreads
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
#include "threading.h"
|
|
19
|
+
|
|
20
|
+
/* create fake symbol to avoid empty translation unit warning */
|
|
21
|
+
int g_ZSTD_threading_useless_symbol;
|
|
22
|
+
|
|
23
|
+
#if defined(ZSTD_MULTITHREAD) && defined(_WIN32)
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Windows minimalist Pthread Wrapper, based on :
|
|
27
|
+
* http://www.cse.wustl.edu/~schmidt/win32-cv-1.html
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
/* === Dependencies === */
|
|
32
|
+
#include <process.h>
|
|
33
|
+
#include <errno.h>
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
/* === Implementation === */
|
|
37
|
+
|
|
38
|
+
static unsigned __stdcall worker(void *arg)
|
|
39
|
+
{
|
|
40
|
+
ZSTD_pthread_t* const thread = (ZSTD_pthread_t*) arg;
|
|
41
|
+
thread->arg = thread->start_routine(thread->arg);
|
|
42
|
+
return 0;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
int ZSTD_pthread_create(ZSTD_pthread_t* thread, const void* unused,
|
|
46
|
+
void* (*start_routine) (void*), void* arg)
|
|
47
|
+
{
|
|
48
|
+
(void)unused;
|
|
49
|
+
thread->arg = arg;
|
|
50
|
+
thread->start_routine = start_routine;
|
|
51
|
+
thread->handle = (HANDLE) _beginthreadex(NULL, 0, worker, thread, 0, NULL);
|
|
52
|
+
|
|
53
|
+
if (!thread->handle)
|
|
54
|
+
return errno;
|
|
55
|
+
else
|
|
56
|
+
return 0;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
int ZSTD_pthread_join(ZSTD_pthread_t thread, void **value_ptr)
|
|
60
|
+
{
|
|
61
|
+
DWORD result;
|
|
62
|
+
|
|
63
|
+
if (!thread.handle) return 0;
|
|
64
|
+
|
|
65
|
+
result = WaitForSingleObject(thread.handle, INFINITE);
|
|
66
|
+
switch (result) {
|
|
67
|
+
case WAIT_OBJECT_0:
|
|
68
|
+
if (value_ptr) *value_ptr = thread.arg;
|
|
69
|
+
return 0;
|
|
70
|
+
case WAIT_ABANDONED:
|
|
71
|
+
return EINVAL;
|
|
72
|
+
default:
|
|
73
|
+
return GetLastError();
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
#endif /* ZSTD_MULTITHREAD */
|
|
78
|
+
|
|
79
|
+
#if defined(ZSTD_MULTITHREAD) && DEBUGLEVEL >= 1 && !defined(_WIN32)
|
|
80
|
+
|
|
81
|
+
#define ZSTD_DEPS_NEED_MALLOC
|
|
82
|
+
#include "zstd_deps.h"
|
|
83
|
+
|
|
84
|
+
int ZSTD_pthread_mutex_init(ZSTD_pthread_mutex_t* mutex, pthread_mutexattr_t const* attr)
|
|
85
|
+
{
|
|
86
|
+
*mutex = (pthread_mutex_t*)ZSTD_malloc(sizeof(pthread_mutex_t));
|
|
87
|
+
if (!*mutex)
|
|
88
|
+
return 1;
|
|
89
|
+
return pthread_mutex_init(*mutex, attr);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
int ZSTD_pthread_mutex_destroy(ZSTD_pthread_mutex_t* mutex)
|
|
93
|
+
{
|
|
94
|
+
if (!*mutex)
|
|
95
|
+
return 0;
|
|
96
|
+
{
|
|
97
|
+
int const ret = pthread_mutex_destroy(*mutex);
|
|
98
|
+
ZSTD_free(*mutex);
|
|
99
|
+
return ret;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
int ZSTD_pthread_cond_init(ZSTD_pthread_cond_t* cond, pthread_condattr_t const* attr)
|
|
104
|
+
{
|
|
105
|
+
*cond = (pthread_cond_t*)ZSTD_malloc(sizeof(pthread_cond_t));
|
|
106
|
+
if (!*cond)
|
|
107
|
+
return 1;
|
|
108
|
+
return pthread_cond_init(*cond, attr);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
int ZSTD_pthread_cond_destroy(ZSTD_pthread_cond_t* cond)
|
|
112
|
+
{
|
|
113
|
+
if (!*cond)
|
|
114
|
+
return 0;
|
|
115
|
+
{
|
|
116
|
+
int const ret = pthread_cond_destroy(*cond);
|
|
117
|
+
ZSTD_free(*cond);
|
|
118
|
+
return ret;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
#endif
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2016 Tino Reichardt
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* You can contact the author at:
|
|
6
|
+
* - zstdmt source repository: https://github.com/mcmilk/zstdmt
|
|
7
|
+
*
|
|
8
|
+
* This source code is licensed under both the BSD-style license (found in the
|
|
9
|
+
* LICENSE file in the root directory of this source tree) and the GPLv2 (found
|
|
10
|
+
* in the COPYING file in the root directory of this source tree).
|
|
11
|
+
* You may select, at your option, one of the above-listed licenses.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
#ifndef THREADING_H_938743
|
|
15
|
+
#define THREADING_H_938743
|
|
16
|
+
|
|
17
|
+
#include "debug.h"
|
|
18
|
+
|
|
19
|
+
#if defined (__cplusplus)
|
|
20
|
+
extern "C" {
|
|
21
|
+
#endif
|
|
22
|
+
|
|
23
|
+
#if defined(ZSTD_MULTITHREAD) && defined(_WIN32)
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Windows minimalist Pthread Wrapper, based on :
|
|
27
|
+
* http://www.cse.wustl.edu/~schmidt/win32-cv-1.html
|
|
28
|
+
*/
|
|
29
|
+
#ifdef WINVER
|
|
30
|
+
# undef WINVER
|
|
31
|
+
#endif
|
|
32
|
+
#define WINVER 0x0600
|
|
33
|
+
|
|
34
|
+
#ifdef _WIN32_WINNT
|
|
35
|
+
# undef _WIN32_WINNT
|
|
36
|
+
#endif
|
|
37
|
+
#define _WIN32_WINNT 0x0600
|
|
38
|
+
|
|
39
|
+
#ifndef WIN32_LEAN_AND_MEAN
|
|
40
|
+
# define WIN32_LEAN_AND_MEAN
|
|
41
|
+
#endif
|
|
42
|
+
|
|
43
|
+
#undef ERROR /* reported already defined on VS 2015 (Rich Geldreich) */
|
|
44
|
+
#include <windows.h>
|
|
45
|
+
#undef ERROR
|
|
46
|
+
#define ERROR(name) ZSTD_ERROR(name)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
/* mutex */
|
|
50
|
+
#define ZSTD_pthread_mutex_t CRITICAL_SECTION
|
|
51
|
+
#define ZSTD_pthread_mutex_init(a, b) ((void)(b), InitializeCriticalSection((a)), 0)
|
|
52
|
+
#define ZSTD_pthread_mutex_destroy(a) DeleteCriticalSection((a))
|
|
53
|
+
#define ZSTD_pthread_mutex_lock(a) EnterCriticalSection((a))
|
|
54
|
+
#define ZSTD_pthread_mutex_unlock(a) LeaveCriticalSection((a))
|
|
55
|
+
|
|
56
|
+
/* condition variable */
|
|
57
|
+
#define ZSTD_pthread_cond_t CONDITION_VARIABLE
|
|
58
|
+
#define ZSTD_pthread_cond_init(a, b) ((void)(b), InitializeConditionVariable((a)), 0)
|
|
59
|
+
#define ZSTD_pthread_cond_destroy(a) ((void)(a))
|
|
60
|
+
#define ZSTD_pthread_cond_wait(a, b) SleepConditionVariableCS((a), (b), INFINITE)
|
|
61
|
+
#define ZSTD_pthread_cond_signal(a) WakeConditionVariable((a))
|
|
62
|
+
#define ZSTD_pthread_cond_broadcast(a) WakeAllConditionVariable((a))
|
|
63
|
+
|
|
64
|
+
/* ZSTD_pthread_create() and ZSTD_pthread_join() */
|
|
65
|
+
typedef struct {
|
|
66
|
+
HANDLE handle;
|
|
67
|
+
void* (*start_routine)(void*);
|
|
68
|
+
void* arg;
|
|
69
|
+
} ZSTD_pthread_t;
|
|
70
|
+
|
|
71
|
+
int ZSTD_pthread_create(ZSTD_pthread_t* thread, const void* unused,
|
|
72
|
+
void* (*start_routine) (void*), void* arg);
|
|
73
|
+
|
|
74
|
+
int ZSTD_pthread_join(ZSTD_pthread_t thread, void** value_ptr);
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* add here more wrappers as required
|
|
78
|
+
*/
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
#elif defined(ZSTD_MULTITHREAD) /* posix assumed ; need a better detection method */
|
|
82
|
+
/* === POSIX Systems === */
|
|
83
|
+
# include <pthread.h>
|
|
84
|
+
|
|
85
|
+
#if DEBUGLEVEL < 1
|
|
86
|
+
|
|
87
|
+
#define ZSTD_pthread_mutex_t pthread_mutex_t
|
|
88
|
+
#define ZSTD_pthread_mutex_init(a, b) pthread_mutex_init((a), (b))
|
|
89
|
+
#define ZSTD_pthread_mutex_destroy(a) pthread_mutex_destroy((a))
|
|
90
|
+
#define ZSTD_pthread_mutex_lock(a) pthread_mutex_lock((a))
|
|
91
|
+
#define ZSTD_pthread_mutex_unlock(a) pthread_mutex_unlock((a))
|
|
92
|
+
|
|
93
|
+
#define ZSTD_pthread_cond_t pthread_cond_t
|
|
94
|
+
#define ZSTD_pthread_cond_init(a, b) pthread_cond_init((a), (b))
|
|
95
|
+
#define ZSTD_pthread_cond_destroy(a) pthread_cond_destroy((a))
|
|
96
|
+
#define ZSTD_pthread_cond_wait(a, b) pthread_cond_wait((a), (b))
|
|
97
|
+
#define ZSTD_pthread_cond_signal(a) pthread_cond_signal((a))
|
|
98
|
+
#define ZSTD_pthread_cond_broadcast(a) pthread_cond_broadcast((a))
|
|
99
|
+
|
|
100
|
+
#define ZSTD_pthread_t pthread_t
|
|
101
|
+
#define ZSTD_pthread_create(a, b, c, d) pthread_create((a), (b), (c), (d))
|
|
102
|
+
#define ZSTD_pthread_join(a, b) pthread_join((a),(b))
|
|
103
|
+
|
|
104
|
+
#else /* DEBUGLEVEL >= 1 */
|
|
105
|
+
|
|
106
|
+
/* Debug implementation of threading.
|
|
107
|
+
* In this implementation we use pointers for mutexes and condition variables.
|
|
108
|
+
* This way, if we forget to init/destroy them the program will crash or ASAN
|
|
109
|
+
* will report leaks.
|
|
110
|
+
*/
|
|
111
|
+
|
|
112
|
+
#define ZSTD_pthread_mutex_t pthread_mutex_t*
|
|
113
|
+
int ZSTD_pthread_mutex_init(ZSTD_pthread_mutex_t* mutex, pthread_mutexattr_t const* attr);
|
|
114
|
+
int ZSTD_pthread_mutex_destroy(ZSTD_pthread_mutex_t* mutex);
|
|
115
|
+
#define ZSTD_pthread_mutex_lock(a) pthread_mutex_lock(*(a))
|
|
116
|
+
#define ZSTD_pthread_mutex_unlock(a) pthread_mutex_unlock(*(a))
|
|
117
|
+
|
|
118
|
+
#define ZSTD_pthread_cond_t pthread_cond_t*
|
|
119
|
+
int ZSTD_pthread_cond_init(ZSTD_pthread_cond_t* cond, pthread_condattr_t const* attr);
|
|
120
|
+
int ZSTD_pthread_cond_destroy(ZSTD_pthread_cond_t* cond);
|
|
121
|
+
#define ZSTD_pthread_cond_wait(a, b) pthread_cond_wait(*(a), *(b))
|
|
122
|
+
#define ZSTD_pthread_cond_signal(a) pthread_cond_signal(*(a))
|
|
123
|
+
#define ZSTD_pthread_cond_broadcast(a) pthread_cond_broadcast(*(a))
|
|
124
|
+
|
|
125
|
+
#define ZSTD_pthread_t pthread_t
|
|
126
|
+
#define ZSTD_pthread_create(a, b, c, d) pthread_create((a), (b), (c), (d))
|
|
127
|
+
#define ZSTD_pthread_join(a, b) pthread_join((a),(b))
|
|
128
|
+
|
|
129
|
+
#endif
|
|
130
|
+
|
|
131
|
+
#else /* ZSTD_MULTITHREAD not defined */
|
|
132
|
+
/* No multithreading support */
|
|
133
|
+
|
|
134
|
+
typedef int ZSTD_pthread_mutex_t;
|
|
135
|
+
#define ZSTD_pthread_mutex_init(a, b) ((void)(a), (void)(b), 0)
|
|
136
|
+
#define ZSTD_pthread_mutex_destroy(a) ((void)(a))
|
|
137
|
+
#define ZSTD_pthread_mutex_lock(a) ((void)(a))
|
|
138
|
+
#define ZSTD_pthread_mutex_unlock(a) ((void)(a))
|
|
139
|
+
|
|
140
|
+
typedef int ZSTD_pthread_cond_t;
|
|
141
|
+
#define ZSTD_pthread_cond_init(a, b) ((void)(a), (void)(b), 0)
|
|
142
|
+
#define ZSTD_pthread_cond_destroy(a) ((void)(a))
|
|
143
|
+
#define ZSTD_pthread_cond_wait(a, b) ((void)(a), (void)(b))
|
|
144
|
+
#define ZSTD_pthread_cond_signal(a) ((void)(a))
|
|
145
|
+
#define ZSTD_pthread_cond_broadcast(a) ((void)(a))
|
|
146
|
+
|
|
147
|
+
/* do not use ZSTD_pthread_t */
|
|
148
|
+
|
|
149
|
+
#endif /* ZSTD_MULTITHREAD */
|
|
150
|
+
|
|
151
|
+
#if defined (__cplusplus)
|
|
152
|
+
}
|
|
153
|
+
#endif
|
|
154
|
+
|
|
155
|
+
#endif /* THREADING_H_938743 */
|
|
@@ -1,35 +1,15 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* xxHash - Fast Hash algorithm
|
|
3
|
-
* Copyright (
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
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 homepage: http://www.xxhash.com
|
|
32
|
-
* - xxHash source repository : https://github.com/Cyan4973/xxHash
|
|
2
|
+
* xxHash - Fast Hash algorithm
|
|
3
|
+
* Copyright (c) 2012-2020, Yann Collet, Facebook, Inc.
|
|
4
|
+
*
|
|
5
|
+
* You can contact the author at :
|
|
6
|
+
* - xxHash homepage: http://www.xxhash.com
|
|
7
|
+
* - xxHash source repository : https://github.com/Cyan4973/xxHash
|
|
8
|
+
*
|
|
9
|
+
* This source code is licensed under both the BSD-style license (found in the
|
|
10
|
+
* LICENSE file in the root directory of this source tree) and the GPLv2 (found
|
|
11
|
+
* in the COPYING file in the root directory of this source tree).
|
|
12
|
+
* You may select, at your option, one of the above-listed licenses.
|
|
33
13
|
*/
|
|
34
14
|
|
|
35
15
|
|
|
@@ -53,7 +33,8 @@
|
|
|
53
33
|
# if defined(__GNUC__) && ( defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) )
|
|
54
34
|
# define XXH_FORCE_MEMORY_ACCESS 2
|
|
55
35
|
# elif (defined(__INTEL_COMPILER) && !defined(WIN32)) || \
|
|
56
|
-
(defined(__GNUC__) && ( defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) ))
|
|
36
|
+
(defined(__GNUC__) && ( defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) )) || \
|
|
37
|
+
defined(__ICCARM__)
|
|
57
38
|
# define XXH_FORCE_MEMORY_ACCESS 1
|
|
58
39
|
# endif
|
|
59
40
|
#endif
|
|
@@ -66,10 +47,10 @@
|
|
|
66
47
|
/* #define XXH_ACCEPT_NULL_INPUT_POINTER 1 */
|
|
67
48
|
|
|
68
49
|
/*!XXH_FORCE_NATIVE_FORMAT :
|
|
69
|
-
* By default, xxHash library provides endian-
|
|
50
|
+
* By default, xxHash library provides endian-independent Hash values, based on little-endian convention.
|
|
70
51
|
* Results are therefore identical for little-endian and big-endian CPU.
|
|
71
52
|
* This comes at a performance cost for big-endian CPU, since some swapping is required to emulate little-endian format.
|
|
72
|
-
* Should endian-
|
|
53
|
+
* Should endian-independence be of no importance for your application, you may set the #define below to 1,
|
|
73
54
|
* to improve speed for Big-endian CPU.
|
|
74
55
|
* This option has no impact on Little_Endian CPU.
|
|
75
56
|
*/
|
|
@@ -96,58 +77,29 @@
|
|
|
96
77
|
* Includes & Memory related functions
|
|
97
78
|
***************************************/
|
|
98
79
|
/* Modify the local functions below should you wish to use some other memory routines */
|
|
99
|
-
/* for
|
|
100
|
-
#
|
|
101
|
-
|
|
102
|
-
static void
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
#define XXH_STATIC_LINKING_ONLY
|
|
80
|
+
/* for ZSTD_malloc(), ZSTD_free() */
|
|
81
|
+
#define ZSTD_DEPS_NEED_MALLOC
|
|
82
|
+
#include "zstd_deps.h" /* size_t, ZSTD_malloc, ZSTD_free, ZSTD_memcpy */
|
|
83
|
+
static void* XXH_malloc(size_t s) { return ZSTD_malloc(s); }
|
|
84
|
+
static void XXH_free (void* p) { ZSTD_free(p); }
|
|
85
|
+
static void* XXH_memcpy(void* dest, const void* src, size_t size) { return ZSTD_memcpy(dest,src,size); }
|
|
86
|
+
|
|
87
|
+
#ifndef XXH_STATIC_LINKING_ONLY
|
|
88
|
+
# define XXH_STATIC_LINKING_ONLY
|
|
89
|
+
#endif
|
|
108
90
|
#include "xxhash.h"
|
|
109
91
|
|
|
110
92
|
|
|
111
93
|
/* *************************************
|
|
112
94
|
* Compiler Specific Options
|
|
113
95
|
***************************************/
|
|
114
|
-
#
|
|
115
|
-
# pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */
|
|
116
|
-
# define FORCE_INLINE static __forceinline
|
|
117
|
-
#else
|
|
118
|
-
# if defined (__cplusplus) || defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */
|
|
119
|
-
# ifdef __GNUC__
|
|
120
|
-
# define FORCE_INLINE static inline __attribute__((always_inline))
|
|
121
|
-
# else
|
|
122
|
-
# define FORCE_INLINE static inline
|
|
123
|
-
# endif
|
|
124
|
-
# else
|
|
125
|
-
# define FORCE_INLINE static
|
|
126
|
-
# endif /* __STDC_VERSION__ */
|
|
127
|
-
#endif
|
|
96
|
+
#include "compiler.h"
|
|
128
97
|
|
|
129
98
|
|
|
130
99
|
/* *************************************
|
|
131
100
|
* Basic Types
|
|
132
101
|
***************************************/
|
|
133
|
-
#
|
|
134
|
-
# define MEM_MODULE
|
|
135
|
-
# if !defined (__VMS) && (defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) )
|
|
136
|
-
# include <stdint.h>
|
|
137
|
-
typedef uint8_t BYTE;
|
|
138
|
-
typedef uint16_t U16;
|
|
139
|
-
typedef uint32_t U32;
|
|
140
|
-
typedef int32_t S32;
|
|
141
|
-
typedef uint64_t U64;
|
|
142
|
-
# else
|
|
143
|
-
typedef unsigned char BYTE;
|
|
144
|
-
typedef unsigned short U16;
|
|
145
|
-
typedef unsigned int U32;
|
|
146
|
-
typedef signed int S32;
|
|
147
|
-
typedef unsigned long long U64; /* if your compiler doesn't support unsigned long long, replace by another 64-bit type here. Note that xxhash.h will also need to be updated. */
|
|
148
|
-
# endif
|
|
149
|
-
#endif
|
|
150
|
-
|
|
102
|
+
#include "mem.h" /* BYTE, U32, U64, size_t */
|
|
151
103
|
|
|
152
104
|
#if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==2))
|
|
153
105
|
|
|
@@ -173,14 +125,14 @@ static U64 XXH_read64(const void* ptr) { return ((const unalign*)ptr)->u64; }
|
|
|
173
125
|
static U32 XXH_read32(const void* memPtr)
|
|
174
126
|
{
|
|
175
127
|
U32 val;
|
|
176
|
-
|
|
128
|
+
ZSTD_memcpy(&val, memPtr, sizeof(val));
|
|
177
129
|
return val;
|
|
178
130
|
}
|
|
179
131
|
|
|
180
132
|
static U64 XXH_read64(const void* memPtr)
|
|
181
133
|
{
|
|
182
134
|
U64 val;
|
|
183
|
-
|
|
135
|
+
ZSTD_memcpy(&val, memPtr, sizeof(val));
|
|
184
136
|
return val;
|
|
185
137
|
}
|
|
186
138
|
|
|
@@ -197,7 +149,12 @@ static U64 XXH_read64(const void* memPtr)
|
|
|
197
149
|
# define XXH_rotl32(x,r) _rotl(x,r)
|
|
198
150
|
# define XXH_rotl64(x,r) _rotl64(x,r)
|
|
199
151
|
#else
|
|
152
|
+
#if defined(__ICCARM__)
|
|
153
|
+
# include <intrinsics.h>
|
|
154
|
+
# define XXH_rotl32(x,r) __ROR(x,(32 - r))
|
|
155
|
+
#else
|
|
200
156
|
# define XXH_rotl32(x,r) ((x << r) | (x >> (32 - r)))
|
|
157
|
+
#endif
|
|
201
158
|
# define XXH_rotl64(x,r) ((x << r) | (x >> (64 - r)))
|
|
202
159
|
#endif
|
|
203
160
|
|
|
@@ -246,7 +203,7 @@ typedef enum { XXH_bigEndian=0, XXH_littleEndian=1 } XXH_endianess;
|
|
|
246
203
|
*****************************/
|
|
247
204
|
typedef enum { XXH_aligned, XXH_unaligned } XXH_alignment;
|
|
248
205
|
|
|
249
|
-
|
|
206
|
+
FORCE_INLINE_TEMPLATE U32 XXH_readLE32_align(const void* ptr, XXH_endianess endian, XXH_alignment align)
|
|
250
207
|
{
|
|
251
208
|
if (align==XXH_unaligned)
|
|
252
209
|
return endian==XXH_littleEndian ? XXH_read32(ptr) : XXH_swap32(XXH_read32(ptr));
|
|
@@ -254,7 +211,7 @@ FORCE_INLINE U32 XXH_readLE32_align(const void* ptr, XXH_endianess endian, XXH_a
|
|
|
254
211
|
return endian==XXH_littleEndian ? *(const U32*)ptr : XXH_swap32(*(const U32*)ptr);
|
|
255
212
|
}
|
|
256
213
|
|
|
257
|
-
|
|
214
|
+
FORCE_INLINE_TEMPLATE U32 XXH_readLE32(const void* ptr, XXH_endianess endian)
|
|
258
215
|
{
|
|
259
216
|
return XXH_readLE32_align(ptr, endian, XXH_unaligned);
|
|
260
217
|
}
|
|
@@ -264,7 +221,7 @@ static U32 XXH_readBE32(const void* ptr)
|
|
|
264
221
|
return XXH_CPU_LITTLE_ENDIAN ? XXH_swap32(XXH_read32(ptr)) : XXH_read32(ptr);
|
|
265
222
|
}
|
|
266
223
|
|
|
267
|
-
|
|
224
|
+
FORCE_INLINE_TEMPLATE U64 XXH_readLE64_align(const void* ptr, XXH_endianess endian, XXH_alignment align)
|
|
268
225
|
{
|
|
269
226
|
if (align==XXH_unaligned)
|
|
270
227
|
return endian==XXH_littleEndian ? XXH_read64(ptr) : XXH_swap64(XXH_read64(ptr));
|
|
@@ -272,7 +229,7 @@ FORCE_INLINE U64 XXH_readLE64_align(const void* ptr, XXH_endianess endian, XXH_a
|
|
|
272
229
|
return endian==XXH_littleEndian ? *(const U64*)ptr : XXH_swap64(*(const U64*)ptr);
|
|
273
230
|
}
|
|
274
231
|
|
|
275
|
-
|
|
232
|
+
FORCE_INLINE_TEMPLATE U64 XXH_readLE64(const void* ptr, XXH_endianess endian)
|
|
276
233
|
{
|
|
277
234
|
return XXH_readLE64_align(ptr, endian, XXH_unaligned);
|
|
278
235
|
}
|
|
@@ -312,12 +269,12 @@ XXH_PUBLIC_API unsigned XXH_versionNumber (void) { return XXH_VERSION_NUMBER; }
|
|
|
312
269
|
****************************/
|
|
313
270
|
XXH_PUBLIC_API void XXH32_copyState(XXH32_state_t* restrict dstState, const XXH32_state_t* restrict srcState)
|
|
314
271
|
{
|
|
315
|
-
|
|
272
|
+
ZSTD_memcpy(dstState, srcState, sizeof(*dstState));
|
|
316
273
|
}
|
|
317
274
|
|
|
318
275
|
XXH_PUBLIC_API void XXH64_copyState(XXH64_state_t* restrict dstState, const XXH64_state_t* restrict srcState)
|
|
319
276
|
{
|
|
320
|
-
|
|
277
|
+
ZSTD_memcpy(dstState, srcState, sizeof(*dstState));
|
|
321
278
|
}
|
|
322
279
|
|
|
323
280
|
|
|
@@ -333,7 +290,7 @@ static U32 XXH32_round(U32 seed, U32 input)
|
|
|
333
290
|
return seed;
|
|
334
291
|
}
|
|
335
292
|
|
|
336
|
-
|
|
293
|
+
FORCE_INLINE_TEMPLATE U32 XXH32_endian_align(const void* input, size_t len, U32 seed, XXH_endianess endian, XXH_alignment align)
|
|
337
294
|
{
|
|
338
295
|
const BYTE* p = (const BYTE*)input;
|
|
339
296
|
const BYTE* bEnd = p + len;
|
|
@@ -433,7 +390,7 @@ static U64 XXH64_mergeRound(U64 acc, U64 val)
|
|
|
433
390
|
return acc;
|
|
434
391
|
}
|
|
435
392
|
|
|
436
|
-
|
|
393
|
+
FORCE_INLINE_TEMPLATE U64 XXH64_endian_align(const void* input, size_t len, U64 seed, XXH_endianess endian, XXH_alignment align)
|
|
437
394
|
{
|
|
438
395
|
const BYTE* p = (const BYTE*)input;
|
|
439
396
|
const BYTE* const bEnd = p + len;
|
|
@@ -559,12 +516,12 @@ XXH_PUBLIC_API XXH_errorcode XXH64_freeState(XXH64_state_t* statePtr)
|
|
|
559
516
|
XXH_PUBLIC_API XXH_errorcode XXH32_reset(XXH32_state_t* statePtr, unsigned int seed)
|
|
560
517
|
{
|
|
561
518
|
XXH32_state_t state; /* using a local state to memcpy() in order to avoid strict-aliasing warnings */
|
|
562
|
-
|
|
519
|
+
ZSTD_memset(&state, 0, sizeof(state)-4); /* do not write into reserved, for future removal */
|
|
563
520
|
state.v1 = seed + PRIME32_1 + PRIME32_2;
|
|
564
521
|
state.v2 = seed + PRIME32_2;
|
|
565
522
|
state.v3 = seed + 0;
|
|
566
523
|
state.v4 = seed - PRIME32_1;
|
|
567
|
-
|
|
524
|
+
ZSTD_memcpy(statePtr, &state, sizeof(state));
|
|
568
525
|
return XXH_OK;
|
|
569
526
|
}
|
|
570
527
|
|
|
@@ -572,17 +529,17 @@ XXH_PUBLIC_API XXH_errorcode XXH32_reset(XXH32_state_t* statePtr, unsigned int s
|
|
|
572
529
|
XXH_PUBLIC_API XXH_errorcode XXH64_reset(XXH64_state_t* statePtr, unsigned long long seed)
|
|
573
530
|
{
|
|
574
531
|
XXH64_state_t state; /* using a local state to memcpy() in order to avoid strict-aliasing warnings */
|
|
575
|
-
|
|
532
|
+
ZSTD_memset(&state, 0, sizeof(state)-8); /* do not write into reserved, for future removal */
|
|
576
533
|
state.v1 = seed + PRIME64_1 + PRIME64_2;
|
|
577
534
|
state.v2 = seed + PRIME64_2;
|
|
578
535
|
state.v3 = seed + 0;
|
|
579
536
|
state.v4 = seed - PRIME64_1;
|
|
580
|
-
|
|
537
|
+
ZSTD_memcpy(statePtr, &state, sizeof(state));
|
|
581
538
|
return XXH_OK;
|
|
582
539
|
}
|
|
583
540
|
|
|
584
541
|
|
|
585
|
-
|
|
542
|
+
FORCE_INLINE_TEMPLATE XXH_errorcode XXH32_update_endian (XXH32_state_t* state, const void* input, size_t len, XXH_endianess endian)
|
|
586
543
|
{
|
|
587
544
|
const BYTE* p = (const BYTE*)input;
|
|
588
545
|
const BYTE* const bEnd = p + len;
|
|
@@ -652,7 +609,7 @@ XXH_PUBLIC_API XXH_errorcode XXH32_update (XXH32_state_t* state_in, const void*
|
|
|
652
609
|
|
|
653
610
|
|
|
654
611
|
|
|
655
|
-
|
|
612
|
+
FORCE_INLINE_TEMPLATE U32 XXH32_digest_endian (const XXH32_state_t* state, XXH_endianess endian)
|
|
656
613
|
{
|
|
657
614
|
const BYTE * p = (const BYTE*)state->mem32;
|
|
658
615
|
const BYTE* const bEnd = (const BYTE*)(state->mem32) + state->memsize;
|
|
@@ -702,7 +659,7 @@ XXH_PUBLIC_API unsigned int XXH32_digest (const XXH32_state_t* state_in)
|
|
|
702
659
|
|
|
703
660
|
/* **** XXH64 **** */
|
|
704
661
|
|
|
705
|
-
|
|
662
|
+
FORCE_INLINE_TEMPLATE XXH_errorcode XXH64_update_endian (XXH64_state_t* state, const void* input, size_t len, XXH_endianess endian)
|
|
706
663
|
{
|
|
707
664
|
const BYTE* p = (const BYTE*)input;
|
|
708
665
|
const BYTE* const bEnd = p + len;
|
|
@@ -714,7 +671,9 @@ FORCE_INLINE XXH_errorcode XXH64_update_endian (XXH64_state_t* state, const void
|
|
|
714
671
|
state->total_len += len;
|
|
715
672
|
|
|
716
673
|
if (state->memsize + len < 32) { /* fill in tmp buffer */
|
|
717
|
-
|
|
674
|
+
if (input != NULL) {
|
|
675
|
+
XXH_memcpy(((BYTE*)state->mem64) + state->memsize, input, len);
|
|
676
|
+
}
|
|
718
677
|
state->memsize += (U32)len;
|
|
719
678
|
return XXH_OK;
|
|
720
679
|
}
|
|
@@ -769,7 +728,7 @@ XXH_PUBLIC_API XXH_errorcode XXH64_update (XXH64_state_t* state_in, const void*
|
|
|
769
728
|
|
|
770
729
|
|
|
771
730
|
|
|
772
|
-
|
|
731
|
+
FORCE_INLINE_TEMPLATE U64 XXH64_digest_endian (const XXH64_state_t* state, XXH_endianess endian)
|
|
773
732
|
{
|
|
774
733
|
const BYTE * p = (const BYTE*)state->mem64;
|
|
775
734
|
const BYTE* const bEnd = (const BYTE*)state->mem64 + state->memsize;
|
|
@@ -846,14 +805,14 @@ XXH_PUBLIC_API void XXH32_canonicalFromHash(XXH32_canonical_t* dst, XXH32_hash_t
|
|
|
846
805
|
{
|
|
847
806
|
XXH_STATIC_ASSERT(sizeof(XXH32_canonical_t) == sizeof(XXH32_hash_t));
|
|
848
807
|
if (XXH_CPU_LITTLE_ENDIAN) hash = XXH_swap32(hash);
|
|
849
|
-
|
|
808
|
+
ZSTD_memcpy(dst, &hash, sizeof(*dst));
|
|
850
809
|
}
|
|
851
810
|
|
|
852
811
|
XXH_PUBLIC_API void XXH64_canonicalFromHash(XXH64_canonical_t* dst, XXH64_hash_t hash)
|
|
853
812
|
{
|
|
854
813
|
XXH_STATIC_ASSERT(sizeof(XXH64_canonical_t) == sizeof(XXH64_hash_t));
|
|
855
814
|
if (XXH_CPU_LITTLE_ENDIAN) hash = XXH_swap64(hash);
|
|
856
|
-
|
|
815
|
+
ZSTD_memcpy(dst, &hash, sizeof(*dst));
|
|
857
816
|
}
|
|
858
817
|
|
|
859
818
|
XXH_PUBLIC_API XXH32_hash_t XXH32_hashFromCanonical(const XXH32_canonical_t* src)
|