zstd-ruby 1.3.0.0 → 1.3.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/ext/zstdruby/libzstd/common/bitstream.h +40 -41
  4. data/ext/zstdruby/libzstd/common/compiler.h +85 -0
  5. data/ext/zstdruby/libzstd/common/error_private.c +8 -10
  6. data/ext/zstdruby/libzstd/common/error_private.h +4 -4
  7. data/ext/zstdruby/libzstd/common/fse.h +11 -5
  8. data/ext/zstdruby/libzstd/common/fse_decompress.c +3 -22
  9. data/ext/zstdruby/libzstd/common/huf.h +5 -6
  10. data/ext/zstdruby/libzstd/common/mem.h +6 -6
  11. data/ext/zstdruby/libzstd/common/pool.c +61 -27
  12. data/ext/zstdruby/libzstd/common/pool.h +10 -10
  13. data/ext/zstdruby/libzstd/common/threading.h +5 -6
  14. data/ext/zstdruby/libzstd/common/xxhash.c +28 -22
  15. data/ext/zstdruby/libzstd/common/zstd_common.c +4 -4
  16. data/ext/zstdruby/libzstd/common/zstd_errors.h +30 -32
  17. data/ext/zstdruby/libzstd/common/zstd_internal.h +57 -56
  18. data/ext/zstdruby/libzstd/compress/fse_compress.c +4 -22
  19. data/ext/zstdruby/libzstd/compress/huf_compress.c +4 -3
  20. data/ext/zstdruby/libzstd/compress/zstd_compress.c +314 -304
  21. data/ext/zstdruby/libzstd/compress/zstd_opt.h +118 -116
  22. data/ext/zstdruby/libzstd/compress/zstdmt_compress.c +223 -156
  23. data/ext/zstdruby/libzstd/compress/zstdmt_compress.h +10 -9
  24. data/ext/zstdruby/libzstd/decompress/huf_decompress.c +8 -24
  25. data/ext/zstdruby/libzstd/decompress/zstd_decompress.c +95 -115
  26. data/ext/zstdruby/libzstd/deprecated/zbuff.h +4 -4
  27. data/ext/zstdruby/libzstd/deprecated/zbuff_common.c +4 -5
  28. data/ext/zstdruby/libzstd/deprecated/zbuff_compress.c +4 -4
  29. data/ext/zstdruby/libzstd/deprecated/zbuff_decompress.c +4 -4
  30. data/ext/zstdruby/libzstd/dictBuilder/cover.c +7 -9
  31. data/ext/zstdruby/libzstd/dictBuilder/zdict.c +5 -5
  32. data/ext/zstdruby/libzstd/dictBuilder/zdict.h +4 -4
  33. data/ext/zstdruby/libzstd/legacy/zstd_legacy.h +8 -4
  34. data/ext/zstdruby/libzstd/legacy/zstd_v01.c +4 -4
  35. data/ext/zstdruby/libzstd/legacy/zstd_v01.h +4 -4
  36. data/ext/zstdruby/libzstd/legacy/zstd_v02.c +4 -4
  37. data/ext/zstdruby/libzstd/legacy/zstd_v02.h +4 -4
  38. data/ext/zstdruby/libzstd/legacy/zstd_v03.c +4 -4
  39. data/ext/zstdruby/libzstd/legacy/zstd_v03.h +4 -4
  40. data/ext/zstdruby/libzstd/legacy/zstd_v04.c +5 -5
  41. data/ext/zstdruby/libzstd/legacy/zstd_v04.h +4 -4
  42. data/ext/zstdruby/libzstd/legacy/zstd_v05.c +5 -5
  43. data/ext/zstdruby/libzstd/legacy/zstd_v05.h +4 -4
  44. data/ext/zstdruby/libzstd/legacy/zstd_v06.c +5 -5
  45. data/ext/zstdruby/libzstd/legacy/zstd_v06.h +4 -4
  46. data/ext/zstdruby/libzstd/legacy/zstd_v07.c +4 -4
  47. data/ext/zstdruby/libzstd/legacy/zstd_v07.h +4 -4
  48. data/ext/zstdruby/libzstd/zstd.h +16 -14
  49. data/lib/zstd-ruby/version.rb +1 -1
  50. metadata +3 -2
@@ -1,10 +1,10 @@
1
- /**
1
+ /*
2
2
  * Copyright (c) 2016-present, Yann Collet, Facebook, Inc.
3
3
  * All rights reserved.
4
4
  *
5
- * This source code is licensed under the BSD-style license found in the
6
- * LICENSE file in the root directory of this source tree. An additional grant
7
- * of patent rights can be found in the PATENTS file in the same directory.
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
8
  */
9
9
 
10
10
  #ifndef MEM_H_MODULE
@@ -110,7 +110,7 @@ Only use if no other choice to achieve best performance on target platform */
110
110
  MEM_STATIC U16 MEM_read16(const void* memPtr) { return *(const U16*) memPtr; }
111
111
  MEM_STATIC U32 MEM_read32(const void* memPtr) { return *(const U32*) memPtr; }
112
112
  MEM_STATIC U64 MEM_read64(const void* memPtr) { return *(const U64*) memPtr; }
113
- MEM_STATIC U64 MEM_readST(const void* memPtr) { return *(const size_t*) memPtr; }
113
+ MEM_STATIC size_t MEM_readST(const void* memPtr) { return *(const size_t*) memPtr; }
114
114
 
115
115
  MEM_STATIC void MEM_write16(void* memPtr, U16 value) { *(U16*)memPtr = value; }
116
116
  MEM_STATIC void MEM_write32(void* memPtr, U32 value) { *(U32*)memPtr = value; }
@@ -131,7 +131,7 @@ MEM_STATIC void MEM_write64(void* memPtr, U64 value) { *(U64*)memPtr = value; }
131
131
  MEM_STATIC U16 MEM_read16(const void* ptr) { return ((const unalign*)ptr)->u16; }
132
132
  MEM_STATIC U32 MEM_read32(const void* ptr) { return ((const unalign*)ptr)->u32; }
133
133
  MEM_STATIC U64 MEM_read64(const void* ptr) { return ((const unalign*)ptr)->u64; }
134
- MEM_STATIC U64 MEM_readST(const void* ptr) { return ((const unalign*)ptr)->st; }
134
+ MEM_STATIC size_t MEM_readST(const void* ptr) { return ((const unalign*)ptr)->st; }
135
135
 
136
136
  MEM_STATIC void MEM_write16(void* memPtr, U16 value) { ((unalign*)memPtr)->u16 = value; }
137
137
  MEM_STATIC void MEM_write32(void* memPtr, U32 value) { ((unalign*)memPtr)->u32 = value; }
@@ -1,10 +1,10 @@
1
- /**
2
- * Copyright (c) 2016-present, Facebook, Inc.
1
+ /*
2
+ * Copyright (c) 2016-present, Yann Collet, Facebook, Inc.
3
3
  * All rights reserved.
4
4
  *
5
- * This source code is licensed under the BSD-style license found in the
6
- * LICENSE file in the root directory of this source tree. An additional grant
7
- * of patent rights can be found in the PATENTS file in the same directory.
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
8
  */
9
9
 
10
10
 
@@ -39,6 +39,12 @@ struct POOL_ctx_s {
39
39
  size_t queueHead;
40
40
  size_t queueTail;
41
41
  size_t queueSize;
42
+
43
+ /* The number of threads working on jobs */
44
+ size_t numThreadsBusy;
45
+ /* Indicates if the queue is empty */
46
+ int queueEmpty;
47
+
42
48
  /* The mutex protects the queue */
43
49
  pthread_mutex_t queueMutex;
44
50
  /* Condition variable for pushers to wait on when the queue is full */
@@ -60,30 +66,41 @@ static void* POOL_thread(void* opaque) {
60
66
  for (;;) {
61
67
  /* Lock the mutex and wait for a non-empty queue or until shutdown */
62
68
  pthread_mutex_lock(&ctx->queueMutex);
63
- while (ctx->queueHead == ctx->queueTail && !ctx->shutdown) {
69
+
70
+ while (ctx->queueEmpty && !ctx->shutdown) {
64
71
  pthread_cond_wait(&ctx->queuePopCond, &ctx->queueMutex);
65
72
  }
66
73
  /* empty => shutting down: so stop */
67
- if (ctx->queueHead == ctx->queueTail) {
74
+ if (ctx->queueEmpty) {
68
75
  pthread_mutex_unlock(&ctx->queueMutex);
69
76
  return opaque;
70
77
  }
71
78
  /* Pop a job off the queue */
72
79
  { POOL_job const job = ctx->queue[ctx->queueHead];
73
80
  ctx->queueHead = (ctx->queueHead + 1) % ctx->queueSize;
81
+ ctx->numThreadsBusy++;
82
+ ctx->queueEmpty = ctx->queueHead == ctx->queueTail;
74
83
  /* Unlock the mutex, signal a pusher, and run the job */
75
84
  pthread_mutex_unlock(&ctx->queueMutex);
76
85
  pthread_cond_signal(&ctx->queuePushCond);
86
+
77
87
  job.function(job.opaque);
78
- }
79
- }
88
+
89
+ /* If the intended queue size was 0, signal after finishing job */
90
+ if (ctx->queueSize == 1) {
91
+ pthread_mutex_lock(&ctx->queueMutex);
92
+ ctx->numThreadsBusy--;
93
+ pthread_mutex_unlock(&ctx->queueMutex);
94
+ pthread_cond_signal(&ctx->queuePushCond);
95
+ } }
96
+ } /* for (;;) */
80
97
  /* Unreachable */
81
98
  }
82
99
 
83
100
  POOL_ctx *POOL_create(size_t numThreads, size_t queueSize) {
84
101
  POOL_ctx *ctx;
85
102
  /* Check the parameters */
86
- if (!numThreads || !queueSize) { return NULL; }
103
+ if (!numThreads) { return NULL; }
87
104
  /* Allocate the context and zero initialize */
88
105
  ctx = (POOL_ctx *)calloc(1, sizeof(POOL_ctx));
89
106
  if (!ctx) { return NULL; }
@@ -92,15 +109,17 @@ POOL_ctx *POOL_create(size_t numThreads, size_t queueSize) {
92
109
  * and full queues.
93
110
  */
94
111
  ctx->queueSize = queueSize + 1;
95
- ctx->queue = (POOL_job *)malloc(ctx->queueSize * sizeof(POOL_job));
112
+ ctx->queue = (POOL_job*) malloc(ctx->queueSize * sizeof(POOL_job));
96
113
  ctx->queueHead = 0;
97
114
  ctx->queueTail = 0;
98
- pthread_mutex_init(&ctx->queueMutex, NULL);
99
- pthread_cond_init(&ctx->queuePushCond, NULL);
100
- pthread_cond_init(&ctx->queuePopCond, NULL);
115
+ ctx->numThreadsBusy = 0;
116
+ ctx->queueEmpty = 1;
117
+ (void)pthread_mutex_init(&ctx->queueMutex, NULL);
118
+ (void)pthread_cond_init(&ctx->queuePushCond, NULL);
119
+ (void)pthread_cond_init(&ctx->queuePopCond, NULL);
101
120
  ctx->shutdown = 0;
102
121
  /* Allocate space for the thread handles */
103
- ctx->threads = (pthread_t *)malloc(numThreads * sizeof(pthread_t));
122
+ ctx->threads = (pthread_t*)malloc(numThreads * sizeof(pthread_t));
104
123
  ctx->numThreads = 0;
105
124
  /* Check for errors */
106
125
  if (!ctx->threads || !ctx->queue) { POOL_free(ctx); return NULL; }
@@ -153,22 +172,37 @@ size_t POOL_sizeof(POOL_ctx *ctx) {
153
172
  + ctx->numThreads * sizeof(pthread_t);
154
173
  }
155
174
 
156
- void POOL_add(void *ctxVoid, POOL_function function, void *opaque) {
157
- POOL_ctx *ctx = (POOL_ctx *)ctxVoid;
175
+ /**
176
+ * Returns 1 if the queue is full and 0 otherwise.
177
+ *
178
+ * If the queueSize is 1 (the pool was created with an intended queueSize of 0),
179
+ * then a queue is empty if there is a thread free and no job is waiting.
180
+ */
181
+ static int isQueueFull(POOL_ctx const* ctx) {
182
+ if (ctx->queueSize > 1) {
183
+ return ctx->queueHead == ((ctx->queueTail + 1) % ctx->queueSize);
184
+ } else {
185
+ return ctx->numThreadsBusy == ctx->numThreads ||
186
+ !ctx->queueEmpty;
187
+ }
188
+ }
189
+
190
+ void POOL_add(void* ctxVoid, POOL_function function, void *opaque) {
191
+ POOL_ctx* const ctx = (POOL_ctx*)ctxVoid;
158
192
  if (!ctx) { return; }
159
193
 
160
194
  pthread_mutex_lock(&ctx->queueMutex);
161
195
  { POOL_job const job = {function, opaque};
196
+
162
197
  /* Wait until there is space in the queue for the new job */
163
- size_t newTail = (ctx->queueTail + 1) % ctx->queueSize;
164
- while (ctx->queueHead == newTail && !ctx->shutdown) {
198
+ while (isQueueFull(ctx) && !ctx->shutdown) {
165
199
  pthread_cond_wait(&ctx->queuePushCond, &ctx->queueMutex);
166
- newTail = (ctx->queueTail + 1) % ctx->queueSize;
167
200
  }
168
201
  /* The queue is still going => there is space */
169
202
  if (!ctx->shutdown) {
203
+ ctx->queueEmpty = 0;
170
204
  ctx->queue[ctx->queueTail] = job;
171
- ctx->queueTail = newTail;
205
+ ctx->queueTail = (ctx->queueTail + 1) % ctx->queueSize;
172
206
  }
173
207
  }
174
208
  pthread_mutex_unlock(&ctx->queueMutex);
@@ -183,22 +217,22 @@ struct POOL_ctx_s {
183
217
  int data;
184
218
  };
185
219
 
186
- POOL_ctx *POOL_create(size_t numThreads, size_t queueSize) {
220
+ POOL_ctx* POOL_create(size_t numThreads, size_t queueSize) {
187
221
  (void)numThreads;
188
222
  (void)queueSize;
189
- return (POOL_ctx *)malloc(sizeof(POOL_ctx));
223
+ return (POOL_ctx*)malloc(sizeof(POOL_ctx));
190
224
  }
191
225
 
192
- void POOL_free(POOL_ctx *ctx) {
193
- if (ctx) free(ctx);
226
+ void POOL_free(POOL_ctx* ctx) {
227
+ free(ctx);
194
228
  }
195
229
 
196
- void POOL_add(void *ctx, POOL_function function, void *opaque) {
230
+ void POOL_add(void* ctx, POOL_function function, void* opaque) {
197
231
  (void)ctx;
198
232
  function(opaque);
199
233
  }
200
234
 
201
- size_t POOL_sizeof(POOL_ctx *ctx) {
235
+ size_t POOL_sizeof(POOL_ctx* ctx) {
202
236
  if (ctx==NULL) return 0; /* supports sizeof NULL */
203
237
  return sizeof(*ctx);
204
238
  }
@@ -1,11 +1,12 @@
1
- /**
2
- * Copyright (c) 2016-present, Facebook, Inc.
1
+ /*
2
+ * Copyright (c) 2016-present, Yann Collet, Facebook, Inc.
3
3
  * All rights reserved.
4
4
  *
5
- * This source code is licensed under the BSD-style license found in the
6
- * LICENSE file in the root directory of this source tree. An additional grant
7
- * of patent rights can be found in the PATENTS file in the same directory.
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
8
  */
9
+
9
10
  #ifndef POOL_H
10
11
  #define POOL_H
11
12
 
@@ -19,11 +20,10 @@ extern "C" {
19
20
  typedef struct POOL_ctx_s POOL_ctx;
20
21
 
21
22
  /*! POOL_create() :
22
- Create a thread pool with at most `numThreads` threads.
23
- `numThreads` must be at least 1.
24
- The maximum number of queued jobs before blocking is `queueSize`.
25
- `queueSize` must be at least 1.
26
- @return : The POOL_ctx pointer on success else NULL.
23
+ * Create a thread pool with at most `numThreads` threads.
24
+ * `numThreads` must be at least 1.
25
+ * The maximum number of queued jobs before blocking is `queueSize`.
26
+ * @return : POOL_ctx pointer on success, else NULL.
27
27
  */
28
28
  POOL_ctx *POOL_create(size_t numThreads, size_t queueSize);
29
29
 
@@ -1,4 +1,3 @@
1
-
2
1
  /**
3
2
  * Copyright (c) 2016 Tino Reichardt
4
3
  * All rights reserved.
@@ -42,14 +41,14 @@ extern "C" {
42
41
 
43
42
  /* mutex */
44
43
  #define pthread_mutex_t CRITICAL_SECTION
45
- #define pthread_mutex_init(a,b) InitializeCriticalSection((a))
44
+ #define pthread_mutex_init(a,b) (InitializeCriticalSection((a)), 0)
46
45
  #define pthread_mutex_destroy(a) DeleteCriticalSection((a))
47
46
  #define pthread_mutex_lock(a) EnterCriticalSection((a))
48
47
  #define pthread_mutex_unlock(a) LeaveCriticalSection((a))
49
48
 
50
49
  /* condition variable */
51
50
  #define pthread_cond_t CONDITION_VARIABLE
52
- #define pthread_cond_init(a, b) InitializeConditionVariable((a))
51
+ #define pthread_cond_init(a, b) (InitializeConditionVariable((a)), 0)
53
52
  #define pthread_cond_destroy(a) /* No delete */
54
53
  #define pthread_cond_wait(a, b) SleepConditionVariableCS((a), (b), INFINITE)
55
54
  #define pthread_cond_signal(a) WakeConditionVariable((a))
@@ -80,14 +79,14 @@ int _pthread_join(pthread_t* thread, void** value_ptr);
80
79
  #else /* ZSTD_MULTITHREAD not defined */
81
80
  /* No multithreading support */
82
81
 
83
- #define pthread_mutex_t int /* #define rather than typedef, as sometimes pthread support is implicit, resulting in duplicated symbols */
84
- #define pthread_mutex_init(a,b)
82
+ #define pthread_mutex_t int /* #define rather than typedef, because sometimes pthread support is implicit, resulting in duplicated symbols */
83
+ #define pthread_mutex_init(a,b) ((void)a, 0)
85
84
  #define pthread_mutex_destroy(a)
86
85
  #define pthread_mutex_lock(a)
87
86
  #define pthread_mutex_unlock(a)
88
87
 
89
88
  #define pthread_cond_t int
90
- #define pthread_cond_init(a,b)
89
+ #define pthread_cond_init(a,b) ((void)a, 0)
91
90
  #define pthread_cond_destroy(a)
92
91
  #define pthread_cond_wait(a,b)
93
92
  #define pthread_cond_signal(a)
@@ -113,19 +113,25 @@ static void* XXH_memcpy(void* dest, const void* src, size_t size) { return memcp
113
113
  /* *************************************
114
114
  * Compiler Specific Options
115
115
  ***************************************/
116
- #ifdef _MSC_VER /* Visual Studio */
117
- # pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */
118
- # define FORCE_INLINE static __forceinline
116
+ #if defined (__GNUC__) || defined(__cplusplus) || defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */
117
+ # define INLINE_KEYWORD inline
119
118
  #else
120
- # if defined (__cplusplus) || defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */
121
- # ifdef __GNUC__
122
- # define FORCE_INLINE static inline __attribute__((always_inline))
123
- # else
124
- # define FORCE_INLINE static inline
125
- # endif
126
- # else
127
- # define FORCE_INLINE static
128
- # endif /* __STDC_VERSION__ */
119
+ # define INLINE_KEYWORD
120
+ #endif
121
+
122
+ #if defined(__GNUC__)
123
+ # define FORCE_INLINE_ATTR __attribute__((always_inline))
124
+ #elif defined(_MSC_VER)
125
+ # define FORCE_INLINE_ATTR __forceinline
126
+ #else
127
+ # define FORCE_INLINE_ATTR
128
+ #endif
129
+
130
+ #define FORCE_INLINE_TEMPLATE static INLINE_KEYWORD FORCE_INLINE_ATTR
131
+
132
+
133
+ #ifdef _MSC_VER
134
+ # pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */
129
135
  #endif
130
136
 
131
137
 
@@ -248,7 +254,7 @@ typedef enum { XXH_bigEndian=0, XXH_littleEndian=1 } XXH_endianess;
248
254
  *****************************/
249
255
  typedef enum { XXH_aligned, XXH_unaligned } XXH_alignment;
250
256
 
251
- FORCE_INLINE U32 XXH_readLE32_align(const void* ptr, XXH_endianess endian, XXH_alignment align)
257
+ FORCE_INLINE_TEMPLATE U32 XXH_readLE32_align(const void* ptr, XXH_endianess endian, XXH_alignment align)
252
258
  {
253
259
  if (align==XXH_unaligned)
254
260
  return endian==XXH_littleEndian ? XXH_read32(ptr) : XXH_swap32(XXH_read32(ptr));
@@ -256,7 +262,7 @@ FORCE_INLINE U32 XXH_readLE32_align(const void* ptr, XXH_endianess endian, XXH_a
256
262
  return endian==XXH_littleEndian ? *(const U32*)ptr : XXH_swap32(*(const U32*)ptr);
257
263
  }
258
264
 
259
- FORCE_INLINE U32 XXH_readLE32(const void* ptr, XXH_endianess endian)
265
+ FORCE_INLINE_TEMPLATE U32 XXH_readLE32(const void* ptr, XXH_endianess endian)
260
266
  {
261
267
  return XXH_readLE32_align(ptr, endian, XXH_unaligned);
262
268
  }
@@ -266,7 +272,7 @@ static U32 XXH_readBE32(const void* ptr)
266
272
  return XXH_CPU_LITTLE_ENDIAN ? XXH_swap32(XXH_read32(ptr)) : XXH_read32(ptr);
267
273
  }
268
274
 
269
- FORCE_INLINE U64 XXH_readLE64_align(const void* ptr, XXH_endianess endian, XXH_alignment align)
275
+ FORCE_INLINE_TEMPLATE U64 XXH_readLE64_align(const void* ptr, XXH_endianess endian, XXH_alignment align)
270
276
  {
271
277
  if (align==XXH_unaligned)
272
278
  return endian==XXH_littleEndian ? XXH_read64(ptr) : XXH_swap64(XXH_read64(ptr));
@@ -274,7 +280,7 @@ FORCE_INLINE U64 XXH_readLE64_align(const void* ptr, XXH_endianess endian, XXH_a
274
280
  return endian==XXH_littleEndian ? *(const U64*)ptr : XXH_swap64(*(const U64*)ptr);
275
281
  }
276
282
 
277
- FORCE_INLINE U64 XXH_readLE64(const void* ptr, XXH_endianess endian)
283
+ FORCE_INLINE_TEMPLATE U64 XXH_readLE64(const void* ptr, XXH_endianess endian)
278
284
  {
279
285
  return XXH_readLE64_align(ptr, endian, XXH_unaligned);
280
286
  }
@@ -335,7 +341,7 @@ static U32 XXH32_round(U32 seed, U32 input)
335
341
  return seed;
336
342
  }
337
343
 
338
- FORCE_INLINE U32 XXH32_endian_align(const void* input, size_t len, U32 seed, XXH_endianess endian, XXH_alignment align)
344
+ FORCE_INLINE_TEMPLATE U32 XXH32_endian_align(const void* input, size_t len, U32 seed, XXH_endianess endian, XXH_alignment align)
339
345
  {
340
346
  const BYTE* p = (const BYTE*)input;
341
347
  const BYTE* bEnd = p + len;
@@ -435,7 +441,7 @@ static U64 XXH64_mergeRound(U64 acc, U64 val)
435
441
  return acc;
436
442
  }
437
443
 
438
- FORCE_INLINE U64 XXH64_endian_align(const void* input, size_t len, U64 seed, XXH_endianess endian, XXH_alignment align)
444
+ FORCE_INLINE_TEMPLATE U64 XXH64_endian_align(const void* input, size_t len, U64 seed, XXH_endianess endian, XXH_alignment align)
439
445
  {
440
446
  const BYTE* p = (const BYTE*)input;
441
447
  const BYTE* const bEnd = p + len;
@@ -584,7 +590,7 @@ XXH_PUBLIC_API XXH_errorcode XXH64_reset(XXH64_state_t* statePtr, unsigned long
584
590
  }
585
591
 
586
592
 
587
- FORCE_INLINE XXH_errorcode XXH32_update_endian (XXH32_state_t* state, const void* input, size_t len, XXH_endianess endian)
593
+ FORCE_INLINE_TEMPLATE XXH_errorcode XXH32_update_endian (XXH32_state_t* state, const void* input, size_t len, XXH_endianess endian)
588
594
  {
589
595
  const BYTE* p = (const BYTE*)input;
590
596
  const BYTE* const bEnd = p + len;
@@ -654,7 +660,7 @@ XXH_PUBLIC_API XXH_errorcode XXH32_update (XXH32_state_t* state_in, const void*
654
660
 
655
661
 
656
662
 
657
- FORCE_INLINE U32 XXH32_digest_endian (const XXH32_state_t* state, XXH_endianess endian)
663
+ FORCE_INLINE_TEMPLATE U32 XXH32_digest_endian (const XXH32_state_t* state, XXH_endianess endian)
658
664
  {
659
665
  const BYTE * p = (const BYTE*)state->mem32;
660
666
  const BYTE* const bEnd = (const BYTE*)(state->mem32) + state->memsize;
@@ -704,7 +710,7 @@ XXH_PUBLIC_API unsigned int XXH32_digest (const XXH32_state_t* state_in)
704
710
 
705
711
  /* **** XXH64 **** */
706
712
 
707
- FORCE_INLINE XXH_errorcode XXH64_update_endian (XXH64_state_t* state, const void* input, size_t len, XXH_endianess endian)
713
+ FORCE_INLINE_TEMPLATE XXH_errorcode XXH64_update_endian (XXH64_state_t* state, const void* input, size_t len, XXH_endianess endian)
708
714
  {
709
715
  const BYTE* p = (const BYTE*)input;
710
716
  const BYTE* const bEnd = p + len;
@@ -771,7 +777,7 @@ XXH_PUBLIC_API XXH_errorcode XXH64_update (XXH64_state_t* state_in, const void*
771
777
 
772
778
 
773
779
 
774
- FORCE_INLINE U64 XXH64_digest_endian (const XXH64_state_t* state, XXH_endianess endian)
780
+ FORCE_INLINE_TEMPLATE U64 XXH64_digest_endian (const XXH64_state_t* state, XXH_endianess endian)
775
781
  {
776
782
  const BYTE * p = (const BYTE*)state->mem64;
777
783
  const BYTE* const bEnd = (const BYTE*)state->mem64 + state->memsize;
@@ -1,10 +1,10 @@
1
- /**
1
+ /*
2
2
  * Copyright (c) 2016-present, Yann Collet, Facebook, Inc.
3
3
  * All rights reserved.
4
4
  *
5
- * This source code is licensed under the BSD-style license found in the
6
- * LICENSE file in the root directory of this source tree. An additional grant
7
- * of patent rights can be found in the PATENTS file in the same directory.
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
8
  */
9
9
 
10
10
 
@@ -1,10 +1,10 @@
1
- /**
1
+ /*
2
2
  * Copyright (c) 2016-present, Yann Collet, Facebook, Inc.
3
3
  * All rights reserved.
4
4
  *
5
- * This source code is licensed under the BSD-style license found in the
6
- * LICENSE file in the root directory of this source tree. An additional grant
7
- * of patent rights can be found in the PATENTS file in the same directory.
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
8
  */
9
9
 
10
10
  #ifndef ZSTD_ERRORS_H_398273423
@@ -37,43 +37,41 @@ extern "C" {
37
37
  /*-****************************************
38
38
  * error codes list
39
39
  * note : this API is still considered unstable
40
- * it should not be used with a dynamic library
40
+ * and shall not be used with a dynamic library.
41
41
  * only static linking is allowed
42
42
  ******************************************/
43
43
  typedef enum {
44
- ZSTD_error_no_error,
45
- ZSTD_error_GENERIC,
46
- ZSTD_error_prefix_unknown,
47
- ZSTD_error_version_unsupported,
48
- ZSTD_error_parameter_unknown,
49
- ZSTD_error_frameParameter_unsupported,
50
- ZSTD_error_frameParameter_unsupportedBy32bits,
51
- ZSTD_error_frameParameter_windowTooLarge,
52
- ZSTD_error_compressionParameter_unsupported,
53
- ZSTD_error_compressionParameter_outOfBound,
54
- ZSTD_error_init_missing,
55
- ZSTD_error_memory_allocation,
56
- ZSTD_error_stage_wrong,
57
- ZSTD_error_dstSize_tooSmall,
58
- ZSTD_error_srcSize_wrong,
59
- ZSTD_error_corruption_detected,
60
- ZSTD_error_checksum_wrong,
61
- ZSTD_error_tableLog_tooLarge,
62
- ZSTD_error_maxSymbolValue_tooLarge,
63
- ZSTD_error_maxSymbolValue_tooSmall,
64
- ZSTD_error_dictionary_corrupted,
65
- ZSTD_error_dictionary_wrong,
66
- ZSTD_error_dictionaryCreation_failed,
67
- ZSTD_error_frameIndex_tooLarge,
68
- ZSTD_error_seekableIO,
69
- ZSTD_error_maxCode
44
+ ZSTD_error_no_error = 0,
45
+ ZSTD_error_GENERIC = 1,
46
+ ZSTD_error_prefix_unknown = 10,
47
+ ZSTD_error_version_unsupported = 12,
48
+ ZSTD_error_frameParameter_unsupported = 14,
49
+ ZSTD_error_frameParameter_windowTooLarge = 16,
50
+ ZSTD_error_corruption_detected = 20,
51
+ ZSTD_error_checksum_wrong = 22,
52
+ ZSTD_error_dictionary_corrupted = 30,
53
+ ZSTD_error_dictionary_wrong = 32,
54
+ ZSTD_error_dictionaryCreation_failed = 34,
55
+ ZSTD_error_parameter_unsupported = 40,
56
+ ZSTD_error_parameter_outOfBound = 42,
57
+ ZSTD_error_tableLog_tooLarge = 44,
58
+ ZSTD_error_maxSymbolValue_tooLarge = 46,
59
+ ZSTD_error_maxSymbolValue_tooSmall = 48,
60
+ ZSTD_error_stage_wrong = 60,
61
+ ZSTD_error_init_missing = 62,
62
+ ZSTD_error_memory_allocation = 64,
63
+ ZSTD_error_dstSize_tooSmall = 70,
64
+ ZSTD_error_srcSize_wrong = 72,
65
+ ZSTD_error_frameIndex_tooLarge = 100,
66
+ ZSTD_error_seekableIO = 102,
67
+ ZSTD_error_maxCode = 120 /* never EVER use this value directly, it may change in future versions! Use ZSTD_isError() instead */
70
68
  } ZSTD_ErrorCode;
71
69
 
72
70
  /*! ZSTD_getErrorCode() :
73
71
  convert a `size_t` function result into a `ZSTD_ErrorCode` enum type,
74
72
  which can be used to compare with enum list published above */
75
73
  ZSTDERRORLIB_API ZSTD_ErrorCode ZSTD_getErrorCode(size_t functionResult);
76
- ZSTDERRORLIB_API const char* ZSTD_getErrorString(ZSTD_ErrorCode code);
74
+ ZSTDERRORLIB_API const char* ZSTD_getErrorString(ZSTD_ErrorCode code); /**< Same as ZSTD_getErrorName, but using a `ZSTD_ErrorCode` enum argument */
77
75
 
78
76
 
79
77
  #if defined (__cplusplus)