zstdlib 0.13.0-x86-linux

Sign up to get free protection for your applications and to get access to all the features.
Files changed (129) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +6 -0
  3. data/CHANGES.md +107 -0
  4. data/Gemfile +3 -0
  5. data/README.md +107 -0
  6. data/Rakefile +59 -0
  7. data/ext/zstdlib_c/extconf.rb +59 -0
  8. data/ext/zstdlib_c/ruby/zlib-2.2/zstdlib.c +4675 -0
  9. data/ext/zstdlib_c/ruby/zlib-2.3/zstdlib.c +4702 -0
  10. data/ext/zstdlib_c/ruby/zlib-2.4/zstdlib.c +4859 -0
  11. data/ext/zstdlib_c/ruby/zlib-2.5/zstdlib.c +4864 -0
  12. data/ext/zstdlib_c/ruby/zlib-2.6/zstdlib.c +4906 -0
  13. data/ext/zstdlib_c/ruby/zlib-2.7/zstdlib.c +4895 -0
  14. data/ext/zstdlib_c/ruby/zlib-3.0/zstdlib.c +4994 -0
  15. data/ext/zstdlib_c/ruby/zlib-3.1/zstdlib.c +5076 -0
  16. data/ext/zstdlib_c/ruby/zlib-3.2/zstdlib.c +5090 -0
  17. data/ext/zstdlib_c/ruby/zlib-3.3/zstdlib.c +5090 -0
  18. data/ext/zstdlib_c/zlib-1.3.1/adler32.c +164 -0
  19. data/ext/zstdlib_c/zlib-1.3.1/compress.c +75 -0
  20. data/ext/zstdlib_c/zlib-1.3.1/crc32.c +1049 -0
  21. data/ext/zstdlib_c/zlib-1.3.1/crc32.h +9446 -0
  22. data/ext/zstdlib_c/zlib-1.3.1/deflate.c +2139 -0
  23. data/ext/zstdlib_c/zlib-1.3.1/deflate.h +377 -0
  24. data/ext/zstdlib_c/zlib-1.3.1/gzclose.c +23 -0
  25. data/ext/zstdlib_c/zlib-1.3.1/gzguts.h +214 -0
  26. data/ext/zstdlib_c/zlib-1.3.1/gzlib.c +582 -0
  27. data/ext/zstdlib_c/zlib-1.3.1/gzread.c +602 -0
  28. data/ext/zstdlib_c/zlib-1.3.1/gzwrite.c +631 -0
  29. data/ext/zstdlib_c/zlib-1.3.1/infback.c +628 -0
  30. data/ext/zstdlib_c/zlib-1.3.1/inffast.c +320 -0
  31. data/ext/zstdlib_c/zlib-1.3.1/inffast.h +11 -0
  32. data/ext/zstdlib_c/zlib-1.3.1/inffixed.h +94 -0
  33. data/ext/zstdlib_c/zlib-1.3.1/inflate.c +1526 -0
  34. data/ext/zstdlib_c/zlib-1.3.1/inflate.h +126 -0
  35. data/ext/zstdlib_c/zlib-1.3.1/inftrees.c +299 -0
  36. data/ext/zstdlib_c/zlib-1.3.1/inftrees.h +62 -0
  37. data/ext/zstdlib_c/zlib-1.3.1/trees.c +1117 -0
  38. data/ext/zstdlib_c/zlib-1.3.1/trees.h +128 -0
  39. data/ext/zstdlib_c/zlib-1.3.1/uncompr.c +85 -0
  40. data/ext/zstdlib_c/zlib-1.3.1/zconf.h +543 -0
  41. data/ext/zstdlib_c/zlib-1.3.1/zlib.h +1938 -0
  42. data/ext/zstdlib_c/zlib-1.3.1/zutil.c +299 -0
  43. data/ext/zstdlib_c/zlib-1.3.1/zutil.h +254 -0
  44. data/ext/zstdlib_c/zlib.mk +14 -0
  45. data/ext/zstdlib_c/zlibwrapper/zlibwrapper.c +10 -0
  46. data/ext/zstdlib_c/zlibwrapper.mk +14 -0
  47. data/ext/zstdlib_c/zstd-1.5.6/lib/common/allocations.h +55 -0
  48. data/ext/zstdlib_c/zstd-1.5.6/lib/common/bits.h +200 -0
  49. data/ext/zstdlib_c/zstd-1.5.6/lib/common/bitstream.h +457 -0
  50. data/ext/zstdlib_c/zstd-1.5.6/lib/common/compiler.h +450 -0
  51. data/ext/zstdlib_c/zstd-1.5.6/lib/common/cpu.h +249 -0
  52. data/ext/zstdlib_c/zstd-1.5.6/lib/common/debug.c +30 -0
  53. data/ext/zstdlib_c/zstd-1.5.6/lib/common/debug.h +116 -0
  54. data/ext/zstdlib_c/zstd-1.5.6/lib/common/entropy_common.c +340 -0
  55. data/ext/zstdlib_c/zstd-1.5.6/lib/common/error_private.c +63 -0
  56. data/ext/zstdlib_c/zstd-1.5.6/lib/common/error_private.h +168 -0
  57. data/ext/zstdlib_c/zstd-1.5.6/lib/common/fse.h +640 -0
  58. data/ext/zstdlib_c/zstd-1.5.6/lib/common/fse_decompress.c +313 -0
  59. data/ext/zstdlib_c/zstd-1.5.6/lib/common/huf.h +286 -0
  60. data/ext/zstdlib_c/zstd-1.5.6/lib/common/mem.h +426 -0
  61. data/ext/zstdlib_c/zstd-1.5.6/lib/common/pool.c +371 -0
  62. data/ext/zstdlib_c/zstd-1.5.6/lib/common/pool.h +90 -0
  63. data/ext/zstdlib_c/zstd-1.5.6/lib/common/portability_macros.h +158 -0
  64. data/ext/zstdlib_c/zstd-1.5.6/lib/common/threading.c +182 -0
  65. data/ext/zstdlib_c/zstd-1.5.6/lib/common/threading.h +150 -0
  66. data/ext/zstdlib_c/zstd-1.5.6/lib/common/xxhash.c +18 -0
  67. data/ext/zstdlib_c/zstd-1.5.6/lib/common/xxhash.h +7020 -0
  68. data/ext/zstdlib_c/zstd-1.5.6/lib/common/zstd_common.c +48 -0
  69. data/ext/zstdlib_c/zstd-1.5.6/lib/common/zstd_deps.h +111 -0
  70. data/ext/zstdlib_c/zstd-1.5.6/lib/common/zstd_internal.h +392 -0
  71. data/ext/zstdlib_c/zstd-1.5.6/lib/common/zstd_trace.h +163 -0
  72. data/ext/zstdlib_c/zstd-1.5.6/lib/compress/clevels.h +134 -0
  73. data/ext/zstdlib_c/zstd-1.5.6/lib/compress/fse_compress.c +625 -0
  74. data/ext/zstdlib_c/zstd-1.5.6/lib/compress/hist.c +181 -0
  75. data/ext/zstdlib_c/zstd-1.5.6/lib/compress/hist.h +75 -0
  76. data/ext/zstdlib_c/zstd-1.5.6/lib/compress/huf_compress.c +1464 -0
  77. data/ext/zstdlib_c/zstd-1.5.6/lib/compress/zstd_compress.c +7153 -0
  78. data/ext/zstdlib_c/zstd-1.5.6/lib/compress/zstd_compress_internal.h +1534 -0
  79. data/ext/zstdlib_c/zstd-1.5.6/lib/compress/zstd_compress_literals.c +235 -0
  80. data/ext/zstdlib_c/zstd-1.5.6/lib/compress/zstd_compress_literals.h +39 -0
  81. data/ext/zstdlib_c/zstd-1.5.6/lib/compress/zstd_compress_sequences.c +442 -0
  82. data/ext/zstdlib_c/zstd-1.5.6/lib/compress/zstd_compress_sequences.h +54 -0
  83. data/ext/zstdlib_c/zstd-1.5.6/lib/compress/zstd_compress_superblock.c +688 -0
  84. data/ext/zstdlib_c/zstd-1.5.6/lib/compress/zstd_compress_superblock.h +32 -0
  85. data/ext/zstdlib_c/zstd-1.5.6/lib/compress/zstd_cwksp.h +748 -0
  86. data/ext/zstdlib_c/zstd-1.5.6/lib/compress/zstd_double_fast.c +770 -0
  87. data/ext/zstdlib_c/zstd-1.5.6/lib/compress/zstd_double_fast.h +50 -0
  88. data/ext/zstdlib_c/zstd-1.5.6/lib/compress/zstd_fast.c +968 -0
  89. data/ext/zstdlib_c/zstd-1.5.6/lib/compress/zstd_fast.h +38 -0
  90. data/ext/zstdlib_c/zstd-1.5.6/lib/compress/zstd_lazy.c +2199 -0
  91. data/ext/zstdlib_c/zstd-1.5.6/lib/compress/zstd_lazy.h +202 -0
  92. data/ext/zstdlib_c/zstd-1.5.6/lib/compress/zstd_ldm.c +730 -0
  93. data/ext/zstdlib_c/zstd-1.5.6/lib/compress/zstd_ldm.h +117 -0
  94. data/ext/zstdlib_c/zstd-1.5.6/lib/compress/zstd_ldm_geartab.h +106 -0
  95. data/ext/zstdlib_c/zstd-1.5.6/lib/compress/zstd_opt.c +1576 -0
  96. data/ext/zstdlib_c/zstd-1.5.6/lib/compress/zstd_opt.h +80 -0
  97. data/ext/zstdlib_c/zstd-1.5.6/lib/compress/zstdmt_compress.c +1882 -0
  98. data/ext/zstdlib_c/zstd-1.5.6/lib/compress/zstdmt_compress.h +113 -0
  99. data/ext/zstdlib_c/zstd-1.5.6/lib/decompress/huf_decompress.c +1944 -0
  100. data/ext/zstdlib_c/zstd-1.5.6/lib/decompress/huf_decompress_amd64.S +595 -0
  101. data/ext/zstdlib_c/zstd-1.5.6/lib/decompress/zstd_ddict.c +244 -0
  102. data/ext/zstdlib_c/zstd-1.5.6/lib/decompress/zstd_ddict.h +44 -0
  103. data/ext/zstdlib_c/zstd-1.5.6/lib/decompress/zstd_decompress.c +2407 -0
  104. data/ext/zstdlib_c/zstd-1.5.6/lib/decompress/zstd_decompress_block.c +2215 -0
  105. data/ext/zstdlib_c/zstd-1.5.6/lib/decompress/zstd_decompress_block.h +73 -0
  106. data/ext/zstdlib_c/zstd-1.5.6/lib/decompress/zstd_decompress_internal.h +240 -0
  107. data/ext/zstdlib_c/zstd-1.5.6/lib/zdict.h +474 -0
  108. data/ext/zstdlib_c/zstd-1.5.6/lib/zstd.h +3089 -0
  109. data/ext/zstdlib_c/zstd-1.5.6/lib/zstd_errors.h +114 -0
  110. data/ext/zstdlib_c/zstd-1.5.6/zlibWrapper/gzclose.c +26 -0
  111. data/ext/zstdlib_c/zstd-1.5.6/zlibWrapper/gzcompatibility.h +68 -0
  112. data/ext/zstdlib_c/zstd-1.5.6/zlibWrapper/gzguts.h +229 -0
  113. data/ext/zstdlib_c/zstd-1.5.6/zlibWrapper/gzlib.c +587 -0
  114. data/ext/zstdlib_c/zstd-1.5.6/zlibWrapper/gzread.c +637 -0
  115. data/ext/zstdlib_c/zstd-1.5.6/zlibWrapper/gzwrite.c +631 -0
  116. data/ext/zstdlib_c/zstd-1.5.6/zlibWrapper/zstd_zlibwrapper.c +1200 -0
  117. data/ext/zstdlib_c/zstd-1.5.6/zlibWrapper/zstd_zlibwrapper.h +91 -0
  118. data/ext/zstdlib_c/zstd.mk +15 -0
  119. data/lib/2.4/zstdlib_c.so +0 -0
  120. data/lib/2.5/zstdlib_c.so +0 -0
  121. data/lib/2.6/zstdlib_c.so +0 -0
  122. data/lib/2.7/zstdlib_c.so +0 -0
  123. data/lib/3.0/zstdlib_c.so +0 -0
  124. data/lib/3.1/zstdlib_c.so +0 -0
  125. data/lib/3.2/zstdlib_c.so +0 -0
  126. data/lib/3.3/zstdlib_c.so +0 -0
  127. data/lib/zstdlib.rb +6 -0
  128. data/test/zstdlib_test.rb +21 -0
  129. metadata +243 -0
@@ -0,0 +1,181 @@
1
+ /* ******************************************************************
2
+ * hist : Histogram functions
3
+ * part of Finite State Entropy project
4
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
5
+ *
6
+ * You can contact the author at :
7
+ * - FSE source repository : https://github.com/Cyan4973/FiniteStateEntropy
8
+ * - Public forum : https://groups.google.com/forum/#!forum/lz4c
9
+ *
10
+ * This source code is licensed under both the BSD-style license (found in the
11
+ * LICENSE file in the root directory of this source tree) and the GPLv2 (found
12
+ * in the COPYING file in the root directory of this source tree).
13
+ * You may select, at your option, one of the above-listed licenses.
14
+ ****************************************************************** */
15
+
16
+ /* --- dependencies --- */
17
+ #include "../common/mem.h" /* U32, BYTE, etc. */
18
+ #include "../common/debug.h" /* assert, DEBUGLOG */
19
+ #include "../common/error_private.h" /* ERROR */
20
+ #include "hist.h"
21
+
22
+
23
+ /* --- Error management --- */
24
+ unsigned HIST_isError(size_t code) { return ERR_isError(code); }
25
+
26
+ /*-**************************************************************
27
+ * Histogram functions
28
+ ****************************************************************/
29
+ unsigned HIST_count_simple(unsigned* count, unsigned* maxSymbolValuePtr,
30
+ const void* src, size_t srcSize)
31
+ {
32
+ const BYTE* ip = (const BYTE*)src;
33
+ const BYTE* const end = ip + srcSize;
34
+ unsigned maxSymbolValue = *maxSymbolValuePtr;
35
+ unsigned largestCount=0;
36
+
37
+ ZSTD_memset(count, 0, (maxSymbolValue+1) * sizeof(*count));
38
+ if (srcSize==0) { *maxSymbolValuePtr = 0; return 0; }
39
+
40
+ while (ip<end) {
41
+ assert(*ip <= maxSymbolValue);
42
+ count[*ip++]++;
43
+ }
44
+
45
+ while (!count[maxSymbolValue]) maxSymbolValue--;
46
+ *maxSymbolValuePtr = maxSymbolValue;
47
+
48
+ { U32 s;
49
+ for (s=0; s<=maxSymbolValue; s++)
50
+ if (count[s] > largestCount) largestCount = count[s];
51
+ }
52
+
53
+ return largestCount;
54
+ }
55
+
56
+ typedef enum { trustInput, checkMaxSymbolValue } HIST_checkInput_e;
57
+
58
+ /* HIST_count_parallel_wksp() :
59
+ * store histogram into 4 intermediate tables, recombined at the end.
60
+ * this design makes better use of OoO cpus,
61
+ * and is noticeably faster when some values are heavily repeated.
62
+ * But it needs some additional workspace for intermediate tables.
63
+ * `workSpace` must be a U32 table of size >= HIST_WKSP_SIZE_U32.
64
+ * @return : largest histogram frequency,
65
+ * or an error code (notably when histogram's alphabet is larger than *maxSymbolValuePtr) */
66
+ static size_t HIST_count_parallel_wksp(
67
+ unsigned* count, unsigned* maxSymbolValuePtr,
68
+ const void* source, size_t sourceSize,
69
+ HIST_checkInput_e check,
70
+ U32* const workSpace)
71
+ {
72
+ const BYTE* ip = (const BYTE*)source;
73
+ const BYTE* const iend = ip+sourceSize;
74
+ size_t const countSize = (*maxSymbolValuePtr + 1) * sizeof(*count);
75
+ unsigned max=0;
76
+ U32* const Counting1 = workSpace;
77
+ U32* const Counting2 = Counting1 + 256;
78
+ U32* const Counting3 = Counting2 + 256;
79
+ U32* const Counting4 = Counting3 + 256;
80
+
81
+ /* safety checks */
82
+ assert(*maxSymbolValuePtr <= 255);
83
+ if (!sourceSize) {
84
+ ZSTD_memset(count, 0, countSize);
85
+ *maxSymbolValuePtr = 0;
86
+ return 0;
87
+ }
88
+ ZSTD_memset(workSpace, 0, 4*256*sizeof(unsigned));
89
+
90
+ /* by stripes of 16 bytes */
91
+ { U32 cached = MEM_read32(ip); ip += 4;
92
+ while (ip < iend-15) {
93
+ U32 c = cached; cached = MEM_read32(ip); ip += 4;
94
+ Counting1[(BYTE) c ]++;
95
+ Counting2[(BYTE)(c>>8) ]++;
96
+ Counting3[(BYTE)(c>>16)]++;
97
+ Counting4[ c>>24 ]++;
98
+ c = cached; cached = MEM_read32(ip); ip += 4;
99
+ Counting1[(BYTE) c ]++;
100
+ Counting2[(BYTE)(c>>8) ]++;
101
+ Counting3[(BYTE)(c>>16)]++;
102
+ Counting4[ c>>24 ]++;
103
+ c = cached; cached = MEM_read32(ip); ip += 4;
104
+ Counting1[(BYTE) c ]++;
105
+ Counting2[(BYTE)(c>>8) ]++;
106
+ Counting3[(BYTE)(c>>16)]++;
107
+ Counting4[ c>>24 ]++;
108
+ c = cached; cached = MEM_read32(ip); ip += 4;
109
+ Counting1[(BYTE) c ]++;
110
+ Counting2[(BYTE)(c>>8) ]++;
111
+ Counting3[(BYTE)(c>>16)]++;
112
+ Counting4[ c>>24 ]++;
113
+ }
114
+ ip-=4;
115
+ }
116
+
117
+ /* finish last symbols */
118
+ while (ip<iend) Counting1[*ip++]++;
119
+
120
+ { U32 s;
121
+ for (s=0; s<256; s++) {
122
+ Counting1[s] += Counting2[s] + Counting3[s] + Counting4[s];
123
+ if (Counting1[s] > max) max = Counting1[s];
124
+ } }
125
+
126
+ { unsigned maxSymbolValue = 255;
127
+ while (!Counting1[maxSymbolValue]) maxSymbolValue--;
128
+ if (check && maxSymbolValue > *maxSymbolValuePtr) return ERROR(maxSymbolValue_tooSmall);
129
+ *maxSymbolValuePtr = maxSymbolValue;
130
+ ZSTD_memmove(count, Counting1, countSize); /* in case count & Counting1 are overlapping */
131
+ }
132
+ return (size_t)max;
133
+ }
134
+
135
+ /* HIST_countFast_wksp() :
136
+ * Same as HIST_countFast(), but using an externally provided scratch buffer.
137
+ * `workSpace` is a writable buffer which must be 4-bytes aligned,
138
+ * `workSpaceSize` must be >= HIST_WKSP_SIZE
139
+ */
140
+ size_t HIST_countFast_wksp(unsigned* count, unsigned* maxSymbolValuePtr,
141
+ const void* source, size_t sourceSize,
142
+ void* workSpace, size_t workSpaceSize)
143
+ {
144
+ if (sourceSize < 1500) /* heuristic threshold */
145
+ return HIST_count_simple(count, maxSymbolValuePtr, source, sourceSize);
146
+ if ((size_t)workSpace & 3) return ERROR(GENERIC); /* must be aligned on 4-bytes boundaries */
147
+ if (workSpaceSize < HIST_WKSP_SIZE) return ERROR(workSpace_tooSmall);
148
+ return HIST_count_parallel_wksp(count, maxSymbolValuePtr, source, sourceSize, trustInput, (U32*)workSpace);
149
+ }
150
+
151
+ /* HIST_count_wksp() :
152
+ * Same as HIST_count(), but using an externally provided scratch buffer.
153
+ * `workSpace` size must be table of >= HIST_WKSP_SIZE_U32 unsigned */
154
+ size_t HIST_count_wksp(unsigned* count, unsigned* maxSymbolValuePtr,
155
+ const void* source, size_t sourceSize,
156
+ void* workSpace, size_t workSpaceSize)
157
+ {
158
+ if ((size_t)workSpace & 3) return ERROR(GENERIC); /* must be aligned on 4-bytes boundaries */
159
+ if (workSpaceSize < HIST_WKSP_SIZE) return ERROR(workSpace_tooSmall);
160
+ if (*maxSymbolValuePtr < 255)
161
+ return HIST_count_parallel_wksp(count, maxSymbolValuePtr, source, sourceSize, checkMaxSymbolValue, (U32*)workSpace);
162
+ *maxSymbolValuePtr = 255;
163
+ return HIST_countFast_wksp(count, maxSymbolValuePtr, source, sourceSize, workSpace, workSpaceSize);
164
+ }
165
+
166
+ #ifndef ZSTD_NO_UNUSED_FUNCTIONS
167
+ /* fast variant (unsafe : won't check if src contains values beyond count[] limit) */
168
+ size_t HIST_countFast(unsigned* count, unsigned* maxSymbolValuePtr,
169
+ const void* source, size_t sourceSize)
170
+ {
171
+ unsigned tmpCounters[HIST_WKSP_SIZE_U32];
172
+ return HIST_countFast_wksp(count, maxSymbolValuePtr, source, sourceSize, tmpCounters, sizeof(tmpCounters));
173
+ }
174
+
175
+ size_t HIST_count(unsigned* count, unsigned* maxSymbolValuePtr,
176
+ const void* src, size_t srcSize)
177
+ {
178
+ unsigned tmpCounters[HIST_WKSP_SIZE_U32];
179
+ return HIST_count_wksp(count, maxSymbolValuePtr, src, srcSize, tmpCounters, sizeof(tmpCounters));
180
+ }
181
+ #endif
@@ -0,0 +1,75 @@
1
+ /* ******************************************************************
2
+ * hist : Histogram functions
3
+ * part of Finite State Entropy project
4
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
5
+ *
6
+ * You can contact the author at :
7
+ * - FSE source repository : https://github.com/Cyan4973/FiniteStateEntropy
8
+ * - Public forum : https://groups.google.com/forum/#!forum/lz4c
9
+ *
10
+ * This source code is licensed under both the BSD-style license (found in the
11
+ * LICENSE file in the root directory of this source tree) and the GPLv2 (found
12
+ * in the COPYING file in the root directory of this source tree).
13
+ * You may select, at your option, one of the above-listed licenses.
14
+ ****************************************************************** */
15
+
16
+ /* --- dependencies --- */
17
+ #include "../common/zstd_deps.h" /* size_t */
18
+
19
+
20
+ /* --- simple histogram functions --- */
21
+
22
+ /*! HIST_count():
23
+ * Provides the precise count of each byte within a table 'count'.
24
+ * 'count' is a table of unsigned int, of minimum size (*maxSymbolValuePtr+1).
25
+ * Updates *maxSymbolValuePtr with actual largest symbol value detected.
26
+ * @return : count of the most frequent symbol (which isn't identified).
27
+ * or an error code, which can be tested using HIST_isError().
28
+ * note : if return == srcSize, there is only one symbol.
29
+ */
30
+ size_t HIST_count(unsigned* count, unsigned* maxSymbolValuePtr,
31
+ const void* src, size_t srcSize);
32
+
33
+ unsigned HIST_isError(size_t code); /**< tells if a return value is an error code */
34
+
35
+
36
+ /* --- advanced histogram functions --- */
37
+
38
+ #define HIST_WKSP_SIZE_U32 1024
39
+ #define HIST_WKSP_SIZE (HIST_WKSP_SIZE_U32 * sizeof(unsigned))
40
+ /** HIST_count_wksp() :
41
+ * Same as HIST_count(), but using an externally provided scratch buffer.
42
+ * Benefit is this function will use very little stack space.
43
+ * `workSpace` is a writable buffer which must be 4-bytes aligned,
44
+ * `workSpaceSize` must be >= HIST_WKSP_SIZE
45
+ */
46
+ size_t HIST_count_wksp(unsigned* count, unsigned* maxSymbolValuePtr,
47
+ const void* src, size_t srcSize,
48
+ void* workSpace, size_t workSpaceSize);
49
+
50
+ /** HIST_countFast() :
51
+ * same as HIST_count(), but blindly trusts that all byte values within src are <= *maxSymbolValuePtr.
52
+ * This function is unsafe, and will segfault if any value within `src` is `> *maxSymbolValuePtr`
53
+ */
54
+ size_t HIST_countFast(unsigned* count, unsigned* maxSymbolValuePtr,
55
+ const void* src, size_t srcSize);
56
+
57
+ /** HIST_countFast_wksp() :
58
+ * Same as HIST_countFast(), but using an externally provided scratch buffer.
59
+ * `workSpace` is a writable buffer which must be 4-bytes aligned,
60
+ * `workSpaceSize` must be >= HIST_WKSP_SIZE
61
+ */
62
+ size_t HIST_countFast_wksp(unsigned* count, unsigned* maxSymbolValuePtr,
63
+ const void* src, size_t srcSize,
64
+ void* workSpace, size_t workSpaceSize);
65
+
66
+ /*! HIST_count_simple() :
67
+ * Same as HIST_countFast(), this function is unsafe,
68
+ * and will segfault if any value within `src` is `> *maxSymbolValuePtr`.
69
+ * It is also a bit slower for large inputs.
70
+ * However, it does not need any additional memory (not even on stack).
71
+ * @return : count of the most frequent symbol.
72
+ * Note this function doesn't produce any error (i.e. it must succeed).
73
+ */
74
+ unsigned HIST_count_simple(unsigned* count, unsigned* maxSymbolValuePtr,
75
+ const void* src, size_t srcSize);