electrobun 0.0.1 → 0.0.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.
Files changed (667) hide show
  1. package/.gitmodules +3 -0
  2. package/dist/webview +0 -0
  3. package/package.json +1 -1
  4. package/src/cli/build/electrobun +0 -0
  5. package/example/assets/electrobun-logo-32-template.png +0 -0
  6. package/example/buildScript.ts +0 -1
  7. package/example/bun.lockb +0 -0
  8. package/example/electrobun.config +0 -48
  9. package/example/icon.iconset/icon_128x128.png +0 -0
  10. package/example/icon.iconset/icon_128x128@2x.png +0 -0
  11. package/example/icon.iconset/icon_16x16.png +0 -0
  12. package/example/icon.iconset/icon_16x16@2x.png +0 -0
  13. package/example/icon.iconset/icon_256x256.png +0 -0
  14. package/example/icon.iconset/icon_256x256@2x.png +0 -0
  15. package/example/icon.iconset/icon_32x32.png +0 -0
  16. package/example/icon.iconset/icon_32x32@2x.png +0 -0
  17. package/example/icon.iconset/icon_512x512.png +0 -0
  18. package/example/icon.iconset/icon_512x512@2x.png +0 -0
  19. package/example/package-lock.json +0 -32
  20. package/example/package.json +0 -11
  21. package/example/readme.md +0 -0
  22. package/example/src/bun/index.ts +0 -403
  23. package/example/src/mainview/index.css +0 -4
  24. package/example/src/mainview/index.html +0 -13
  25. package/example/src/mainview/index.ts +0 -45
  26. package/example/src/mainview/rpc.ts +0 -36
  27. package/example/src/myextension/preload.ts +0 -15
  28. package/example/src/myextension/rpc.ts +0 -15
  29. package/example/src/webviewtag/electrobun.png +0 -0
  30. package/example/src/webviewtag/index.html +0 -94
  31. package/example/src/webviewtag/index.ts +0 -26
  32. package/src/bsdiff/bsdiff.zig +0 -842
  33. package/src/bsdiff/bspatch.zig +0 -253
  34. package/src/bsdiff/build.zig +0 -73
  35. package/src/bsdiff/zig-out/bin/bsdiff +0 -0
  36. package/src/bsdiff/zig-out/bin/bspatch +0 -0
  37. package/src/bsdiff/zig-out/lib/libzstd.a +0 -0
  38. package/src/bsdiff/zstd/.buckconfig +0 -9
  39. package/src/bsdiff/zstd/.buckversion +0 -1
  40. package/src/bsdiff/zstd/.circleci/config.yml +0 -123
  41. package/src/bsdiff/zstd/.circleci/images/primary/Dockerfile +0 -9
  42. package/src/bsdiff/zstd/.cirrus.yml +0 -10
  43. package/src/bsdiff/zstd/.gitattributes +0 -21
  44. package/src/bsdiff/zstd/.github/ISSUE_TEMPLATE/bug_report.md +0 -35
  45. package/src/bsdiff/zstd/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  46. package/src/bsdiff/zstd/.github/dependabot.yml +0 -6
  47. package/src/bsdiff/zstd/.github/workflows/commit.yml +0 -89
  48. package/src/bsdiff/zstd/.github/workflows/dev-long-tests.yml +0 -297
  49. package/src/bsdiff/zstd/.github/workflows/dev-short-tests.yml +0 -633
  50. package/src/bsdiff/zstd/.github/workflows/nightly.yml +0 -65
  51. package/src/bsdiff/zstd/.github/workflows/publish-release-artifacts.yml +0 -73
  52. package/src/bsdiff/zstd/.github/workflows/scorecards.yml +0 -64
  53. package/src/bsdiff/zstd/.github/workflows/windows-artifacts.yml +0 -58
  54. package/src/bsdiff/zstd/CHANGELOG +0 -837
  55. package/src/bsdiff/zstd/CODE_OF_CONDUCT.md +0 -5
  56. package/src/bsdiff/zstd/CONTRIBUTING.md +0 -489
  57. package/src/bsdiff/zstd/COPYING +0 -339
  58. package/src/bsdiff/zstd/LICENSE +0 -30
  59. package/src/bsdiff/zstd/Makefile +0 -457
  60. package/src/bsdiff/zstd/Package.swift +0 -36
  61. package/src/bsdiff/zstd/README.md +0 -227
  62. package/src/bsdiff/zstd/SECURITY.md +0 -15
  63. package/src/bsdiff/zstd/TESTING.md +0 -43
  64. package/src/bsdiff/zstd/build/LICENSE +0 -0
  65. package/src/bsdiff/zstd/build/README.md +0 -56
  66. package/src/bsdiff/zstd/build/VS2008/fullbench/fullbench.vcproj +0 -549
  67. package/src/bsdiff/zstd/build/VS2008/fuzzer/fuzzer.vcproj +0 -585
  68. package/src/bsdiff/zstd/build/VS2008/zstd/zstd.vcproj +0 -677
  69. package/src/bsdiff/zstd/build/VS2008/zstd.sln +0 -56
  70. package/src/bsdiff/zstd/build/VS2008/zstdlib/zstdlib.vcproj +0 -635
  71. package/src/bsdiff/zstd/build/VS2010/CompileAsCpp.props +0 -8
  72. package/src/bsdiff/zstd/build/VS2010/datagen/datagen.vcxproj +0 -170
  73. package/src/bsdiff/zstd/build/VS2010/fullbench/fullbench.vcxproj +0 -218
  74. package/src/bsdiff/zstd/build/VS2010/fullbench-dll/fullbench-dll.vcxproj +0 -189
  75. package/src/bsdiff/zstd/build/VS2010/fuzzer/fuzzer.vcxproj +0 -223
  76. package/src/bsdiff/zstd/build/VS2010/libzstd/libzstd.vcxproj +0 -242
  77. package/src/bsdiff/zstd/build/VS2010/libzstd-dll/libzstd-dll.rc +0 -51
  78. package/src/bsdiff/zstd/build/VS2010/libzstd-dll/libzstd-dll.vcxproj +0 -249
  79. package/src/bsdiff/zstd/build/VS2010/zstd/zstd.rc +0 -51
  80. package/src/bsdiff/zstd/build/VS2010/zstd/zstd.vcxproj +0 -265
  81. package/src/bsdiff/zstd/build/VS2010/zstd.sln +0 -89
  82. package/src/bsdiff/zstd/build/VS_scripts/README.md +0 -64
  83. package/src/bsdiff/zstd/build/VS_scripts/build.VS2010.cmd +0 -7
  84. package/src/bsdiff/zstd/build/VS_scripts/build.VS2012.cmd +0 -6
  85. package/src/bsdiff/zstd/build/VS_scripts/build.VS2013.cmd +0 -7
  86. package/src/bsdiff/zstd/build/VS_scripts/build.VS2015.cmd +0 -7
  87. package/src/bsdiff/zstd/build/VS_scripts/build.VS2017.cmd +0 -7
  88. package/src/bsdiff/zstd/build/VS_scripts/build.VS2017Community.cmd +0 -7
  89. package/src/bsdiff/zstd/build/VS_scripts/build.VS2017Enterprise.cmd +0 -7
  90. package/src/bsdiff/zstd/build/VS_scripts/build.VS2017Professional.cmd +0 -7
  91. package/src/bsdiff/zstd/build/VS_scripts/build.generic.cmd +0 -72
  92. package/src/bsdiff/zstd/build/cmake/CMakeLists.txt +0 -216
  93. package/src/bsdiff/zstd/build/cmake/CMakeModules/AddZstdCompilationFlags.cmake +0 -121
  94. package/src/bsdiff/zstd/build/cmake/CMakeModules/FindLibLZ4.cmake +0 -49
  95. package/src/bsdiff/zstd/build/cmake/CMakeModules/GetZstdLibraryVersion.cmake +0 -10
  96. package/src/bsdiff/zstd/build/cmake/CMakeModules/JoinPaths.cmake +0 -23
  97. package/src/bsdiff/zstd/build/cmake/README.md +0 -136
  98. package/src/bsdiff/zstd/build/cmake/contrib/CMakeLists.txt +0 -13
  99. package/src/bsdiff/zstd/build/cmake/contrib/gen_html/CMakeLists.txt +0 -30
  100. package/src/bsdiff/zstd/build/cmake/contrib/pzstd/CMakeLists.txt +0 -39
  101. package/src/bsdiff/zstd/build/cmake/lib/CMakeLists.txt +0 -253
  102. package/src/bsdiff/zstd/build/cmake/lib/cmake_uninstall.cmake.in +0 -22
  103. package/src/bsdiff/zstd/build/cmake/programs/CMakeLists.txt +0 -144
  104. package/src/bsdiff/zstd/build/cmake/tests/CMakeLists.txt +0 -118
  105. package/src/bsdiff/zstd/build/cmake/zstdConfig.cmake.in +0 -10
  106. package/src/bsdiff/zstd/build/meson/GetZstdLibraryVersion.py +0 -39
  107. package/src/bsdiff/zstd/build/meson/InstallSymlink.py +0 -55
  108. package/src/bsdiff/zstd/build/meson/README.md +0 -38
  109. package/src/bsdiff/zstd/build/meson/contrib/gen_html/meson.build +0 -30
  110. package/src/bsdiff/zstd/build/meson/contrib/meson.build +0 -12
  111. package/src/bsdiff/zstd/build/meson/contrib/pzstd/meson.build +0 -25
  112. package/src/bsdiff/zstd/build/meson/lib/meson.build +0 -167
  113. package/src/bsdiff/zstd/build/meson/meson.build +0 -145
  114. package/src/bsdiff/zstd/build/meson/meson_options.txt +0 -36
  115. package/src/bsdiff/zstd/build/meson/programs/meson.build +0 -124
  116. package/src/bsdiff/zstd/build/meson/tests/meson.build +0 -217
  117. package/src/bsdiff/zstd/build/meson/tests/valgrindTest.py +0 -90
  118. package/src/bsdiff/zstd/build/single_file_libs/README.md +0 -33
  119. package/src/bsdiff/zstd/build/single_file_libs/build_decoder_test.sh +0 -91
  120. package/src/bsdiff/zstd/build/single_file_libs/build_library_test.sh +0 -97
  121. package/src/bsdiff/zstd/build/single_file_libs/combine.py +0 -234
  122. package/src/bsdiff/zstd/build/single_file_libs/combine.sh +0 -249
  123. package/src/bsdiff/zstd/build/single_file_libs/create_single_file_decoder.sh +0 -19
  124. package/src/bsdiff/zstd/build/single_file_libs/create_single_file_library.sh +0 -19
  125. package/src/bsdiff/zstd/build/single_file_libs/examples/README.md +0 -11
  126. package/src/bsdiff/zstd/build/single_file_libs/examples/emscripten.c +0 -340
  127. package/src/bsdiff/zstd/build/single_file_libs/examples/roundtrip.c +0 -83
  128. package/src/bsdiff/zstd/build/single_file_libs/examples/shell.html +0 -31
  129. package/src/bsdiff/zstd/build/single_file_libs/examples/simple.c +0 -75
  130. package/src/bsdiff/zstd/build/single_file_libs/examples/testcard-dxt1.inl +0 -2731
  131. package/src/bsdiff/zstd/build/single_file_libs/examples/testcard-zstd.inl +0 -261
  132. package/src/bsdiff/zstd/build/single_file_libs/examples/testcard.png +0 -0
  133. package/src/bsdiff/zstd/build/single_file_libs/zstd-in.c +0 -90
  134. package/src/bsdiff/zstd/build/single_file_libs/zstddeclib-in.c +0 -62
  135. package/src/bsdiff/zstd/contrib/VS2005/README.md +0 -3
  136. package/src/bsdiff/zstd/contrib/VS2005/fullbench/fullbench.vcproj +0 -440
  137. package/src/bsdiff/zstd/contrib/VS2005/fuzzer/fuzzer.vcproj +0 -488
  138. package/src/bsdiff/zstd/contrib/VS2005/zstd/zstd.vcproj +0 -552
  139. package/src/bsdiff/zstd/contrib/VS2005/zstd.sln +0 -55
  140. package/src/bsdiff/zstd/contrib/VS2005/zstdlib/zstdlib.vcproj +0 -546
  141. package/src/bsdiff/zstd/contrib/cleanTabs +0 -2
  142. package/src/bsdiff/zstd/contrib/diagnose_corruption/Makefile +0 -35
  143. package/src/bsdiff/zstd/contrib/diagnose_corruption/check_flipped_bits.c +0 -400
  144. package/src/bsdiff/zstd/contrib/docker/Dockerfile +0 -20
  145. package/src/bsdiff/zstd/contrib/docker/README.md +0 -20
  146. package/src/bsdiff/zstd/contrib/externalSequenceProducer/Makefile +0 -40
  147. package/src/bsdiff/zstd/contrib/externalSequenceProducer/README.md +0 -14
  148. package/src/bsdiff/zstd/contrib/externalSequenceProducer/main.c +0 -107
  149. package/src/bsdiff/zstd/contrib/externalSequenceProducer/sequence_producer.c +0 -80
  150. package/src/bsdiff/zstd/contrib/externalSequenceProducer/sequence_producer.h +0 -26
  151. package/src/bsdiff/zstd/contrib/freestanding_lib/freestanding.py +0 -774
  152. package/src/bsdiff/zstd/contrib/gen_html/Makefile +0 -51
  153. package/src/bsdiff/zstd/contrib/gen_html/README.md +0 -31
  154. package/src/bsdiff/zstd/contrib/gen_html/gen-zstd-manual.sh +0 -9
  155. package/src/bsdiff/zstd/contrib/gen_html/gen_html.cpp +0 -224
  156. package/src/bsdiff/zstd/contrib/largeNbDicts/Makefile +0 -58
  157. package/src/bsdiff/zstd/contrib/largeNbDicts/README.md +0 -33
  158. package/src/bsdiff/zstd/contrib/largeNbDicts/largeNbDicts.c +0 -1085
  159. package/src/bsdiff/zstd/contrib/linux-kernel/Makefile +0 -108
  160. package/src/bsdiff/zstd/contrib/linux-kernel/README.md +0 -14
  161. package/src/bsdiff/zstd/contrib/linux-kernel/btrfs-benchmark.sh +0 -104
  162. package/src/bsdiff/zstd/contrib/linux-kernel/btrfs-extract-benchmark.sh +0 -99
  163. package/src/bsdiff/zstd/contrib/linux-kernel/decompress_sources.h +0 -34
  164. package/src/bsdiff/zstd/contrib/linux-kernel/linux.mk +0 -43
  165. package/src/bsdiff/zstd/contrib/linux-kernel/linux_zstd.h +0 -447
  166. package/src/bsdiff/zstd/contrib/linux-kernel/mem.h +0 -262
  167. package/src/bsdiff/zstd/contrib/linux-kernel/squashfs-benchmark.sh +0 -39
  168. package/src/bsdiff/zstd/contrib/linux-kernel/test/Makefile +0 -49
  169. package/src/bsdiff/zstd/contrib/linux-kernel/test/include/asm/unaligned.h +0 -187
  170. package/src/bsdiff/zstd/contrib/linux-kernel/test/include/linux/compiler.h +0 -23
  171. package/src/bsdiff/zstd/contrib/linux-kernel/test/include/linux/errno.h +0 -15
  172. package/src/bsdiff/zstd/contrib/linux-kernel/test/include/linux/kernel.h +0 -19
  173. package/src/bsdiff/zstd/contrib/linux-kernel/test/include/linux/limits.h +0 -15
  174. package/src/bsdiff/zstd/contrib/linux-kernel/test/include/linux/math64.h +0 -15
  175. package/src/bsdiff/zstd/contrib/linux-kernel/test/include/linux/module.h +0 -20
  176. package/src/bsdiff/zstd/contrib/linux-kernel/test/include/linux/printk.h +0 -15
  177. package/src/bsdiff/zstd/contrib/linux-kernel/test/include/linux/stddef.h +0 -15
  178. package/src/bsdiff/zstd/contrib/linux-kernel/test/include/linux/swab.h +0 -16
  179. package/src/bsdiff/zstd/contrib/linux-kernel/test/include/linux/types.h +0 -16
  180. package/src/bsdiff/zstd/contrib/linux-kernel/test/include/linux/xxhash.h +0 -745
  181. package/src/bsdiff/zstd/contrib/linux-kernel/test/macro-test.sh +0 -44
  182. package/src/bsdiff/zstd/contrib/linux-kernel/test/static_test.c +0 -52
  183. package/src/bsdiff/zstd/contrib/linux-kernel/test/test.c +0 -229
  184. package/src/bsdiff/zstd/contrib/linux-kernel/zstd_common_module.c +0 -29
  185. package/src/bsdiff/zstd/contrib/linux-kernel/zstd_compress_module.c +0 -164
  186. package/src/bsdiff/zstd/contrib/linux-kernel/zstd_decompress_module.c +0 -105
  187. package/src/bsdiff/zstd/contrib/linux-kernel/zstd_deps.h +0 -121
  188. package/src/bsdiff/zstd/contrib/match_finders/README.md +0 -42
  189. package/src/bsdiff/zstd/contrib/match_finders/zstd_edist.c +0 -558
  190. package/src/bsdiff/zstd/contrib/match_finders/zstd_edist.h +0 -70
  191. package/src/bsdiff/zstd/contrib/premake/premake4.lua +0 -6
  192. package/src/bsdiff/zstd/contrib/premake/zstd.lua +0 -80
  193. package/src/bsdiff/zstd/contrib/pzstd/BUCK +0 -72
  194. package/src/bsdiff/zstd/contrib/pzstd/ErrorHolder.h +0 -54
  195. package/src/bsdiff/zstd/contrib/pzstd/Logging.h +0 -72
  196. package/src/bsdiff/zstd/contrib/pzstd/Makefile +0 -265
  197. package/src/bsdiff/zstd/contrib/pzstd/Options.cpp +0 -424
  198. package/src/bsdiff/zstd/contrib/pzstd/Options.h +0 -71
  199. package/src/bsdiff/zstd/contrib/pzstd/Pzstd.cpp +0 -618
  200. package/src/bsdiff/zstd/contrib/pzstd/Pzstd.h +0 -153
  201. package/src/bsdiff/zstd/contrib/pzstd/README.md +0 -56
  202. package/src/bsdiff/zstd/contrib/pzstd/SkippableFrame.cpp +0 -30
  203. package/src/bsdiff/zstd/contrib/pzstd/SkippableFrame.h +0 -64
  204. package/src/bsdiff/zstd/contrib/pzstd/images/Cspeed.png +0 -0
  205. package/src/bsdiff/zstd/contrib/pzstd/images/Dspeed.png +0 -0
  206. package/src/bsdiff/zstd/contrib/pzstd/main.cpp +0 -27
  207. package/src/bsdiff/zstd/contrib/pzstd/test/BUCK +0 -37
  208. package/src/bsdiff/zstd/contrib/pzstd/test/OptionsTest.cpp +0 -536
  209. package/src/bsdiff/zstd/contrib/pzstd/test/PzstdTest.cpp +0 -149
  210. package/src/bsdiff/zstd/contrib/pzstd/test/RoundTrip.h +0 -86
  211. package/src/bsdiff/zstd/contrib/pzstd/test/RoundTripTest.cpp +0 -86
  212. package/src/bsdiff/zstd/contrib/pzstd/utils/BUCK +0 -75
  213. package/src/bsdiff/zstd/contrib/pzstd/utils/Buffer.h +0 -99
  214. package/src/bsdiff/zstd/contrib/pzstd/utils/FileSystem.h +0 -96
  215. package/src/bsdiff/zstd/contrib/pzstd/utils/Likely.h +0 -28
  216. package/src/bsdiff/zstd/contrib/pzstd/utils/Portability.h +0 -16
  217. package/src/bsdiff/zstd/contrib/pzstd/utils/Range.h +0 -133
  218. package/src/bsdiff/zstd/contrib/pzstd/utils/ResourcePool.h +0 -96
  219. package/src/bsdiff/zstd/contrib/pzstd/utils/ScopeGuard.h +0 -50
  220. package/src/bsdiff/zstd/contrib/pzstd/utils/ThreadPool.h +0 -58
  221. package/src/bsdiff/zstd/contrib/pzstd/utils/WorkQueue.h +0 -181
  222. package/src/bsdiff/zstd/contrib/pzstd/utils/test/BUCK +0 -35
  223. package/src/bsdiff/zstd/contrib/pzstd/utils/test/BufferTest.cpp +0 -89
  224. package/src/bsdiff/zstd/contrib/pzstd/utils/test/RangeTest.cpp +0 -82
  225. package/src/bsdiff/zstd/contrib/pzstd/utils/test/ResourcePoolTest.cpp +0 -72
  226. package/src/bsdiff/zstd/contrib/pzstd/utils/test/ScopeGuardTest.cpp +0 -28
  227. package/src/bsdiff/zstd/contrib/pzstd/utils/test/ThreadPoolTest.cpp +0 -71
  228. package/src/bsdiff/zstd/contrib/pzstd/utils/test/WorkQueueTest.cpp +0 -282
  229. package/src/bsdiff/zstd/contrib/recovery/Makefile +0 -35
  230. package/src/bsdiff/zstd/contrib/recovery/recover_directory.c +0 -152
  231. package/src/bsdiff/zstd/contrib/seekable_format/README.md +0 -42
  232. package/src/bsdiff/zstd/contrib/seekable_format/examples/Makefile +0 -53
  233. package/src/bsdiff/zstd/contrib/seekable_format/examples/parallel_compression.c +0 -214
  234. package/src/bsdiff/zstd/contrib/seekable_format/examples/parallel_processing.c +0 -194
  235. package/src/bsdiff/zstd/contrib/seekable_format/examples/seekable_compression.c +0 -136
  236. package/src/bsdiff/zstd/contrib/seekable_format/examples/seekable_decompression.c +0 -141
  237. package/src/bsdiff/zstd/contrib/seekable_format/examples/seekable_decompression_mem.c +0 -147
  238. package/src/bsdiff/zstd/contrib/seekable_format/tests/Makefile +0 -38
  239. package/src/bsdiff/zstd/contrib/seekable_format/tests/seekable_tests.c +0 -363
  240. package/src/bsdiff/zstd/contrib/seekable_format/zstd_seekable.h +0 -226
  241. package/src/bsdiff/zstd/contrib/seekable_format/zstd_seekable_compression_format.md +0 -116
  242. package/src/bsdiff/zstd/contrib/seekable_format/zstdseek_compress.c +0 -365
  243. package/src/bsdiff/zstd/contrib/seekable_format/zstdseek_decompress.c +0 -595
  244. package/src/bsdiff/zstd/contrib/seqBench/Makefile +0 -58
  245. package/src/bsdiff/zstd/contrib/seqBench/seqBench.c +0 -53
  246. package/src/bsdiff/zstd/contrib/snap/snapcraft.yaml +0 -28
  247. package/src/bsdiff/zstd/doc/README.md +0 -26
  248. package/src/bsdiff/zstd/doc/decompressor_errata.md +0 -148
  249. package/src/bsdiff/zstd/doc/decompressor_permissive.md +0 -60
  250. package/src/bsdiff/zstd/doc/educational_decoder/Makefile +0 -62
  251. package/src/bsdiff/zstd/doc/educational_decoder/README.md +0 -36
  252. package/src/bsdiff/zstd/doc/educational_decoder/harness.c +0 -119
  253. package/src/bsdiff/zstd/doc/educational_decoder/zstd_decompress.c +0 -2323
  254. package/src/bsdiff/zstd/doc/educational_decoder/zstd_decompress.h +0 -61
  255. package/src/bsdiff/zstd/doc/images/CSpeed2.png +0 -0
  256. package/src/bsdiff/zstd/doc/images/DCspeed5.png +0 -0
  257. package/src/bsdiff/zstd/doc/images/DSpeed3.png +0 -0
  258. package/src/bsdiff/zstd/doc/images/cdict_v136.png +0 -0
  259. package/src/bsdiff/zstd/doc/images/dict-cr.png +0 -0
  260. package/src/bsdiff/zstd/doc/images/dict-cs.png +0 -0
  261. package/src/bsdiff/zstd/doc/images/dict-ds.png +0 -0
  262. package/src/bsdiff/zstd/doc/images/zstd_cdict_v1_3_5.png +0 -0
  263. package/src/bsdiff/zstd/doc/images/zstd_logo86.png +0 -0
  264. package/src/bsdiff/zstd/doc/zstd_compression_format.md +0 -1737
  265. package/src/bsdiff/zstd/doc/zstd_manual.html +0 -2170
  266. package/src/bsdiff/zstd/examples/Makefile +0 -93
  267. package/src/bsdiff/zstd/examples/README.md +0 -46
  268. package/src/bsdiff/zstd/examples/common.h +0 -246
  269. package/src/bsdiff/zstd/examples/dictionary_compression.c +0 -107
  270. package/src/bsdiff/zstd/examples/dictionary_decompression.c +0 -99
  271. package/src/bsdiff/zstd/examples/multiple_simple_compression.c +0 -116
  272. package/src/bsdiff/zstd/examples/multiple_streaming_compression.c +0 -133
  273. package/src/bsdiff/zstd/examples/simple_compression.c +0 -68
  274. package/src/bsdiff/zstd/examples/simple_decompression.c +0 -65
  275. package/src/bsdiff/zstd/examples/streaming_compression.c +0 -146
  276. package/src/bsdiff/zstd/examples/streaming_compression_thread_pool.c +0 -180
  277. package/src/bsdiff/zstd/examples/streaming_decompression.c +0 -100
  278. package/src/bsdiff/zstd/examples/streaming_memory_usage.c +0 -137
  279. package/src/bsdiff/zstd/lib/BUCK +0 -232
  280. package/src/bsdiff/zstd/lib/Makefile +0 -369
  281. package/src/bsdiff/zstd/lib/README.md +0 -237
  282. package/src/bsdiff/zstd/lib/common/allocations.h +0 -55
  283. package/src/bsdiff/zstd/lib/common/bits.h +0 -200
  284. package/src/bsdiff/zstd/lib/common/bitstream.h +0 -457
  285. package/src/bsdiff/zstd/lib/common/compiler.h +0 -450
  286. package/src/bsdiff/zstd/lib/common/cpu.h +0 -249
  287. package/src/bsdiff/zstd/lib/common/debug.c +0 -30
  288. package/src/bsdiff/zstd/lib/common/debug.h +0 -116
  289. package/src/bsdiff/zstd/lib/common/entropy_common.c +0 -340
  290. package/src/bsdiff/zstd/lib/common/error_private.c +0 -63
  291. package/src/bsdiff/zstd/lib/common/error_private.h +0 -168
  292. package/src/bsdiff/zstd/lib/common/fse.h +0 -640
  293. package/src/bsdiff/zstd/lib/common/fse_decompress.c +0 -313
  294. package/src/bsdiff/zstd/lib/common/huf.h +0 -286
  295. package/src/bsdiff/zstd/lib/common/mem.h +0 -426
  296. package/src/bsdiff/zstd/lib/common/pool.c +0 -371
  297. package/src/bsdiff/zstd/lib/common/pool.h +0 -90
  298. package/src/bsdiff/zstd/lib/common/portability_macros.h +0 -158
  299. package/src/bsdiff/zstd/lib/common/threading.c +0 -182
  300. package/src/bsdiff/zstd/lib/common/threading.h +0 -150
  301. package/src/bsdiff/zstd/lib/common/xxhash.c +0 -18
  302. package/src/bsdiff/zstd/lib/common/xxhash.h +0 -7020
  303. package/src/bsdiff/zstd/lib/common/zstd_common.c +0 -48
  304. package/src/bsdiff/zstd/lib/common/zstd_deps.h +0 -111
  305. package/src/bsdiff/zstd/lib/common/zstd_internal.h +0 -392
  306. package/src/bsdiff/zstd/lib/common/zstd_trace.h +0 -163
  307. package/src/bsdiff/zstd/lib/compress/clevels.h +0 -134
  308. package/src/bsdiff/zstd/lib/compress/fse_compress.c +0 -625
  309. package/src/bsdiff/zstd/lib/compress/hist.c +0 -181
  310. package/src/bsdiff/zstd/lib/compress/hist.h +0 -75
  311. package/src/bsdiff/zstd/lib/compress/huf_compress.c +0 -1464
  312. package/src/bsdiff/zstd/lib/compress/zstd_compress.c +0 -7153
  313. package/src/bsdiff/zstd/lib/compress/zstd_compress_internal.h +0 -1534
  314. package/src/bsdiff/zstd/lib/compress/zstd_compress_literals.c +0 -235
  315. package/src/bsdiff/zstd/lib/compress/zstd_compress_literals.h +0 -39
  316. package/src/bsdiff/zstd/lib/compress/zstd_compress_sequences.c +0 -442
  317. package/src/bsdiff/zstd/lib/compress/zstd_compress_sequences.h +0 -54
  318. package/src/bsdiff/zstd/lib/compress/zstd_compress_superblock.c +0 -688
  319. package/src/bsdiff/zstd/lib/compress/zstd_compress_superblock.h +0 -32
  320. package/src/bsdiff/zstd/lib/compress/zstd_cwksp.h +0 -748
  321. package/src/bsdiff/zstd/lib/compress/zstd_double_fast.c +0 -770
  322. package/src/bsdiff/zstd/lib/compress/zstd_double_fast.h +0 -50
  323. package/src/bsdiff/zstd/lib/compress/zstd_fast.c +0 -968
  324. package/src/bsdiff/zstd/lib/compress/zstd_fast.h +0 -38
  325. package/src/bsdiff/zstd/lib/compress/zstd_lazy.c +0 -2199
  326. package/src/bsdiff/zstd/lib/compress/zstd_lazy.h +0 -202
  327. package/src/bsdiff/zstd/lib/compress/zstd_ldm.c +0 -730
  328. package/src/bsdiff/zstd/lib/compress/zstd_ldm.h +0 -117
  329. package/src/bsdiff/zstd/lib/compress/zstd_ldm_geartab.h +0 -106
  330. package/src/bsdiff/zstd/lib/compress/zstd_opt.c +0 -1576
  331. package/src/bsdiff/zstd/lib/compress/zstd_opt.h +0 -80
  332. package/src/bsdiff/zstd/lib/compress/zstdmt_compress.c +0 -1882
  333. package/src/bsdiff/zstd/lib/compress/zstdmt_compress.h +0 -113
  334. package/src/bsdiff/zstd/lib/decompress/huf_decompress.c +0 -1944
  335. package/src/bsdiff/zstd/lib/decompress/huf_decompress_amd64.S +0 -595
  336. package/src/bsdiff/zstd/lib/decompress/zstd_ddict.c +0 -244
  337. package/src/bsdiff/zstd/lib/decompress/zstd_ddict.h +0 -44
  338. package/src/bsdiff/zstd/lib/decompress/zstd_decompress.c +0 -2407
  339. package/src/bsdiff/zstd/lib/decompress/zstd_decompress_block.c +0 -2215
  340. package/src/bsdiff/zstd/lib/decompress/zstd_decompress_block.h +0 -73
  341. package/src/bsdiff/zstd/lib/decompress/zstd_decompress_internal.h +0 -240
  342. package/src/bsdiff/zstd/lib/deprecated/zbuff.h +0 -214
  343. package/src/bsdiff/zstd/lib/deprecated/zbuff_common.c +0 -26
  344. package/src/bsdiff/zstd/lib/deprecated/zbuff_compress.c +0 -167
  345. package/src/bsdiff/zstd/lib/deprecated/zbuff_decompress.c +0 -77
  346. package/src/bsdiff/zstd/lib/dictBuilder/cover.c +0 -1261
  347. package/src/bsdiff/zstd/lib/dictBuilder/cover.h +0 -152
  348. package/src/bsdiff/zstd/lib/dictBuilder/divsufsort.c +0 -1913
  349. package/src/bsdiff/zstd/lib/dictBuilder/divsufsort.h +0 -67
  350. package/src/bsdiff/zstd/lib/dictBuilder/fastcover.c +0 -766
  351. package/src/bsdiff/zstd/lib/dictBuilder/zdict.c +0 -1133
  352. package/src/bsdiff/zstd/lib/dll/example/Makefile +0 -48
  353. package/src/bsdiff/zstd/lib/dll/example/README.md +0 -63
  354. package/src/bsdiff/zstd/lib/dll/example/build_package.bat +0 -20
  355. package/src/bsdiff/zstd/lib/dll/example/fullbench-dll.sln +0 -25
  356. package/src/bsdiff/zstd/lib/dll/example/fullbench-dll.vcxproj +0 -181
  357. package/src/bsdiff/zstd/lib/legacy/zstd_legacy.h +0 -452
  358. package/src/bsdiff/zstd/lib/legacy/zstd_v01.c +0 -2127
  359. package/src/bsdiff/zstd/lib/legacy/zstd_v01.h +0 -94
  360. package/src/bsdiff/zstd/lib/legacy/zstd_v02.c +0 -3465
  361. package/src/bsdiff/zstd/lib/legacy/zstd_v02.h +0 -93
  362. package/src/bsdiff/zstd/lib/legacy/zstd_v03.c +0 -3105
  363. package/src/bsdiff/zstd/lib/legacy/zstd_v03.h +0 -93
  364. package/src/bsdiff/zstd/lib/legacy/zstd_v04.c +0 -3598
  365. package/src/bsdiff/zstd/lib/legacy/zstd_v04.h +0 -142
  366. package/src/bsdiff/zstd/lib/legacy/zstd_v05.c +0 -4005
  367. package/src/bsdiff/zstd/lib/legacy/zstd_v05.h +0 -162
  368. package/src/bsdiff/zstd/lib/legacy/zstd_v06.c +0 -4106
  369. package/src/bsdiff/zstd/lib/legacy/zstd_v06.h +0 -172
  370. package/src/bsdiff/zstd/lib/legacy/zstd_v07.c +0 -4490
  371. package/src/bsdiff/zstd/lib/legacy/zstd_v07.h +0 -187
  372. package/src/bsdiff/zstd/lib/libzstd.mk +0 -237
  373. package/src/bsdiff/zstd/lib/libzstd.pc.in +0 -16
  374. package/src/bsdiff/zstd/lib/module.modulemap +0 -35
  375. package/src/bsdiff/zstd/lib/zdict.h +0 -474
  376. package/src/bsdiff/zstd/lib/zstd.h +0 -3089
  377. package/src/bsdiff/zstd/lib/zstd_errors.h +0 -114
  378. package/src/bsdiff/zstd/programs/BUCK +0 -44
  379. package/src/bsdiff/zstd/programs/Makefile +0 -445
  380. package/src/bsdiff/zstd/programs/README.md +0 -302
  381. package/src/bsdiff/zstd/programs/benchfn.c +0 -256
  382. package/src/bsdiff/zstd/programs/benchfn.h +0 -183
  383. package/src/bsdiff/zstd/programs/benchzstd.c +0 -1264
  384. package/src/bsdiff/zstd/programs/benchzstd.h +0 -198
  385. package/src/bsdiff/zstd/programs/datagen.c +0 -186
  386. package/src/bsdiff/zstd/programs/datagen.h +0 -30
  387. package/src/bsdiff/zstd/programs/dibio.c +0 -440
  388. package/src/bsdiff/zstd/programs/dibio.h +0 -39
  389. package/src/bsdiff/zstd/programs/fileio.c +0 -3470
  390. package/src/bsdiff/zstd/programs/fileio.h +0 -181
  391. package/src/bsdiff/zstd/programs/fileio_asyncio.c +0 -663
  392. package/src/bsdiff/zstd/programs/fileio_asyncio.h +0 -203
  393. package/src/bsdiff/zstd/programs/fileio_common.h +0 -125
  394. package/src/bsdiff/zstd/programs/fileio_types.h +0 -86
  395. package/src/bsdiff/zstd/programs/lorem.c +0 -285
  396. package/src/bsdiff/zstd/programs/lorem.h +0 -32
  397. package/src/bsdiff/zstd/programs/platform.h +0 -218
  398. package/src/bsdiff/zstd/programs/timefn.c +0 -168
  399. package/src/bsdiff/zstd/programs/timefn.h +0 -70
  400. package/src/bsdiff/zstd/programs/util.c +0 -1652
  401. package/src/bsdiff/zstd/programs/util.h +0 -359
  402. package/src/bsdiff/zstd/programs/windres/verrsrc.h +0 -17
  403. package/src/bsdiff/zstd/programs/windres/zstd.rc +0 -51
  404. package/src/bsdiff/zstd/programs/windres/zstd32.res +0 -0
  405. package/src/bsdiff/zstd/programs/windres/zstd64.res +0 -0
  406. package/src/bsdiff/zstd/programs/zstd.1 +0 -566
  407. package/src/bsdiff/zstd/programs/zstd.1.md +0 -695
  408. package/src/bsdiff/zstd/programs/zstdcli.c +0 -1625
  409. package/src/bsdiff/zstd/programs/zstdcli_trace.c +0 -172
  410. package/src/bsdiff/zstd/programs/zstdcli_trace.h +0 -24
  411. package/src/bsdiff/zstd/programs/zstdgrep +0 -134
  412. package/src/bsdiff/zstd/programs/zstdgrep.1 +0 -26
  413. package/src/bsdiff/zstd/programs/zstdgrep.1.md +0 -30
  414. package/src/bsdiff/zstd/programs/zstdless +0 -8
  415. package/src/bsdiff/zstd/programs/zstdless.1 +0 -14
  416. package/src/bsdiff/zstd/programs/zstdless.1.md +0 -16
  417. package/src/bsdiff/zstd/tests/DEPRECATED-test-zstd-speed.py +0 -378
  418. package/src/bsdiff/zstd/tests/Makefile +0 -477
  419. package/src/bsdiff/zstd/tests/README.md +0 -184
  420. package/src/bsdiff/zstd/tests/automated_benchmarking.py +0 -326
  421. package/src/bsdiff/zstd/tests/bigdict.c +0 -128
  422. package/src/bsdiff/zstd/tests/checkTag.c +0 -65
  423. package/src/bsdiff/zstd/tests/check_size.py +0 -31
  424. package/src/bsdiff/zstd/tests/cli-tests/README.md +0 -258
  425. package/src/bsdiff/zstd/tests/cli-tests/basic/args.sh +0 -10
  426. package/src/bsdiff/zstd/tests/cli-tests/basic/args.sh.exit +0 -1
  427. package/src/bsdiff/zstd/tests/cli-tests/basic/args.sh.stderr.glob +0 -28
  428. package/src/bsdiff/zstd/tests/cli-tests/basic/help.sh +0 -10
  429. package/src/bsdiff/zstd/tests/cli-tests/basic/help.sh.stdout.glob +0 -34
  430. package/src/bsdiff/zstd/tests/cli-tests/basic/memlimit.sh +0 -40
  431. package/src/bsdiff/zstd/tests/cli-tests/basic/memlimit.sh.stderr.exact +0 -13
  432. package/src/bsdiff/zstd/tests/cli-tests/basic/memlimit.sh.stdout.exact +0 -13
  433. package/src/bsdiff/zstd/tests/cli-tests/basic/output_dir.sh +0 -7
  434. package/src/bsdiff/zstd/tests/cli-tests/basic/output_dir.sh.stderr.exact +0 -2
  435. package/src/bsdiff/zstd/tests/cli-tests/basic/output_dir.sh.stdout.exact +0 -2
  436. package/src/bsdiff/zstd/tests/cli-tests/basic/version.sh +0 -6
  437. package/src/bsdiff/zstd/tests/cli-tests/basic/version.sh.stdout.glob +0 -2
  438. package/src/bsdiff/zstd/tests/cli-tests/bin/cmp_size +0 -44
  439. package/src/bsdiff/zstd/tests/cli-tests/bin/datagen +0 -3
  440. package/src/bsdiff/zstd/tests/cli-tests/bin/die +0 -4
  441. package/src/bsdiff/zstd/tests/cli-tests/bin/println +0 -2
  442. package/src/bsdiff/zstd/tests/cli-tests/bin/zstd +0 -9
  443. package/src/bsdiff/zstd/tests/cli-tests/bin/zstdgrep +0 -2
  444. package/src/bsdiff/zstd/tests/cli-tests/bin/zstdless +0 -2
  445. package/src/bsdiff/zstd/tests/cli-tests/cltools/setup +0 -6
  446. package/src/bsdiff/zstd/tests/cli-tests/cltools/zstdgrep.sh +0 -8
  447. package/src/bsdiff/zstd/tests/cli-tests/cltools/zstdgrep.sh.exit +0 -1
  448. package/src/bsdiff/zstd/tests/cli-tests/cltools/zstdgrep.sh.stderr.exact +0 -1
  449. package/src/bsdiff/zstd/tests/cli-tests/cltools/zstdgrep.sh.stdout.glob +0 -4
  450. package/src/bsdiff/zstd/tests/cli-tests/cltools/zstdless.sh +0 -10
  451. package/src/bsdiff/zstd/tests/cli-tests/cltools/zstdless.sh.stderr.exact +0 -2
  452. package/src/bsdiff/zstd/tests/cli-tests/cltools/zstdless.sh.stdout.glob +0 -5
  453. package/src/bsdiff/zstd/tests/cli-tests/common/format.sh +0 -19
  454. package/src/bsdiff/zstd/tests/cli-tests/common/mtime.sh +0 -13
  455. package/src/bsdiff/zstd/tests/cli-tests/common/permissions.sh +0 -18
  456. package/src/bsdiff/zstd/tests/cli-tests/common/platform.sh +0 -37
  457. package/src/bsdiff/zstd/tests/cli-tests/compression/adapt.sh +0 -14
  458. package/src/bsdiff/zstd/tests/cli-tests/compression/basic.sh +0 -36
  459. package/src/bsdiff/zstd/tests/cli-tests/compression/compress-literals.sh +0 -10
  460. package/src/bsdiff/zstd/tests/cli-tests/compression/format.sh +0 -16
  461. package/src/bsdiff/zstd/tests/cli-tests/compression/golden.sh +0 -16
  462. package/src/bsdiff/zstd/tests/cli-tests/compression/gzip-compat.sh +0 -17
  463. package/src/bsdiff/zstd/tests/cli-tests/compression/levels.sh +0 -62
  464. package/src/bsdiff/zstd/tests/cli-tests/compression/levels.sh.stderr.exact +0 -69
  465. package/src/bsdiff/zstd/tests/cli-tests/compression/long-distance-matcher.sh +0 -7
  466. package/src/bsdiff/zstd/tests/cli-tests/compression/multi-threaded.sh +0 -15
  467. package/src/bsdiff/zstd/tests/cli-tests/compression/multi-threaded.sh.stderr.exact +0 -11
  468. package/src/bsdiff/zstd/tests/cli-tests/compression/multiple-files.sh +0 -21
  469. package/src/bsdiff/zstd/tests/cli-tests/compression/multiple-files.sh.stdout.exact +0 -12
  470. package/src/bsdiff/zstd/tests/cli-tests/compression/row-match-finder.sh +0 -7
  471. package/src/bsdiff/zstd/tests/cli-tests/compression/setup +0 -7
  472. package/src/bsdiff/zstd/tests/cli-tests/compression/stream-size.sh +0 -7
  473. package/src/bsdiff/zstd/tests/cli-tests/compression/verbose-wlog.sh +0 -11
  474. package/src/bsdiff/zstd/tests/cli-tests/compression/verbose-wlog.sh.stderr.glob +0 -5
  475. package/src/bsdiff/zstd/tests/cli-tests/compression/verbose-wlog.sh.stdout.glob +0 -5
  476. package/src/bsdiff/zstd/tests/cli-tests/compression/window-resize.sh +0 -9
  477. package/src/bsdiff/zstd/tests/cli-tests/compression/window-resize.sh.stderr.ignore +0 -0
  478. package/src/bsdiff/zstd/tests/cli-tests/compression/window-resize.sh.stdout.glob +0 -3
  479. package/src/bsdiff/zstd/tests/cli-tests/decompression/detectErrors.sh +0 -11
  480. package/src/bsdiff/zstd/tests/cli-tests/decompression/golden.sh +0 -7
  481. package/src/bsdiff/zstd/tests/cli-tests/decompression/pass-through.sh +0 -57
  482. package/src/bsdiff/zstd/tests/cli-tests/decompression/pass-through.sh.stderr.exact +0 -11
  483. package/src/bsdiff/zstd/tests/cli-tests/decompression/pass-through.sh.stdout.exact +0 -25
  484. package/src/bsdiff/zstd/tests/cli-tests/dict-builder/empty-input.sh +0 -9
  485. package/src/bsdiff/zstd/tests/cli-tests/dict-builder/empty-input.sh.stderr.exact +0 -1
  486. package/src/bsdiff/zstd/tests/cli-tests/dict-builder/no-inputs.sh +0 -3
  487. package/src/bsdiff/zstd/tests/cli-tests/dict-builder/no-inputs.sh.exit +0 -1
  488. package/src/bsdiff/zstd/tests/cli-tests/dict-builder/no-inputs.sh.stderr.exact +0 -5
  489. package/src/bsdiff/zstd/tests/cli-tests/dictionaries/dictionary-mismatch.sh +0 -29
  490. package/src/bsdiff/zstd/tests/cli-tests/dictionaries/dictionary-mismatch.sh.stderr.exact +0 -7
  491. package/src/bsdiff/zstd/tests/cli-tests/dictionaries/golden.sh +0 -9
  492. package/src/bsdiff/zstd/tests/cli-tests/dictionaries/setup +0 -6
  493. package/src/bsdiff/zstd/tests/cli-tests/dictionaries/setup_once +0 -24
  494. package/src/bsdiff/zstd/tests/cli-tests/file-handling/directory-mirror.sh +0 -49
  495. package/src/bsdiff/zstd/tests/cli-tests/file-handling/directory-mirror.sh.stderr.exact +0 -0
  496. package/src/bsdiff/zstd/tests/cli-tests/file-handling/directory-mirror.sh.stdout.exact +0 -0
  497. package/src/bsdiff/zstd/tests/cli-tests/file-stat/compress-file-to-dir-without-write-perm.sh +0 -12
  498. package/src/bsdiff/zstd/tests/cli-tests/file-stat/compress-file-to-dir-without-write-perm.sh.stderr.exact +0 -26
  499. package/src/bsdiff/zstd/tests/cli-tests/file-stat/compress-file-to-file.sh +0 -9
  500. package/src/bsdiff/zstd/tests/cli-tests/file-stat/compress-file-to-file.sh.stderr.exact +0 -42
  501. package/src/bsdiff/zstd/tests/cli-tests/file-stat/compress-file-to-stdout.sh +0 -8
  502. package/src/bsdiff/zstd/tests/cli-tests/file-stat/compress-file-to-stdout.sh.stderr.exact +0 -24
  503. package/src/bsdiff/zstd/tests/cli-tests/file-stat/compress-stdin-to-file.sh +0 -8
  504. package/src/bsdiff/zstd/tests/cli-tests/file-stat/compress-stdin-to-file.sh.stderr.exact +0 -24
  505. package/src/bsdiff/zstd/tests/cli-tests/file-stat/compress-stdin-to-stdout.sh +0 -8
  506. package/src/bsdiff/zstd/tests/cli-tests/file-stat/compress-stdin-to-stdout.sh.stderr.exact +0 -18
  507. package/src/bsdiff/zstd/tests/cli-tests/file-stat/decompress-file-to-file.sh +0 -8
  508. package/src/bsdiff/zstd/tests/cli-tests/file-stat/decompress-file-to-file.sh.stderr.exact +0 -38
  509. package/src/bsdiff/zstd/tests/cli-tests/file-stat/decompress-file-to-stdout.sh +0 -7
  510. package/src/bsdiff/zstd/tests/cli-tests/file-stat/decompress-file-to-stdout.sh.stderr.exact +0 -18
  511. package/src/bsdiff/zstd/tests/cli-tests/file-stat/decompress-stdin-to-file.sh +0 -7
  512. package/src/bsdiff/zstd/tests/cli-tests/file-stat/decompress-stdin-to-file.sh.stderr.exact +0 -20
  513. package/src/bsdiff/zstd/tests/cli-tests/file-stat/decompress-stdin-to-stdout.sh +0 -7
  514. package/src/bsdiff/zstd/tests/cli-tests/file-stat/decompress-stdin-to-stdout.sh.stderr.exact +0 -14
  515. package/src/bsdiff/zstd/tests/cli-tests/progress/no-progress.sh +0 -46
  516. package/src/bsdiff/zstd/tests/cli-tests/progress/no-progress.sh.stderr.glob +0 -96
  517. package/src/bsdiff/zstd/tests/cli-tests/progress/progress.sh +0 -41
  518. package/src/bsdiff/zstd/tests/cli-tests/progress/progress.sh.stderr.glob +0 -62
  519. package/src/bsdiff/zstd/tests/cli-tests/run.py +0 -731
  520. package/src/bsdiff/zstd/tests/cli-tests/zstd-symlinks/setup +0 -6
  521. package/src/bsdiff/zstd/tests/cli-tests/zstd-symlinks/zstdcat.sh +0 -12
  522. package/src/bsdiff/zstd/tests/cli-tests/zstd-symlinks/zstdcat.sh.stdout.exact +0 -8
  523. package/src/bsdiff/zstd/tests/datagencli.c +0 -149
  524. package/src/bsdiff/zstd/tests/decodecorpus.c +0 -1936
  525. package/src/bsdiff/zstd/tests/dict-files/zero-weight-dict +0 -0
  526. package/src/bsdiff/zstd/tests/external_matchfinder.c +0 -140
  527. package/src/bsdiff/zstd/tests/external_matchfinder.h +0 -39
  528. package/src/bsdiff/zstd/tests/fullbench.c +0 -980
  529. package/src/bsdiff/zstd/tests/fuzz/Makefile +0 -277
  530. package/src/bsdiff/zstd/tests/fuzz/README.md +0 -161
  531. package/src/bsdiff/zstd/tests/fuzz/block_decompress.c +0 -53
  532. package/src/bsdiff/zstd/tests/fuzz/block_round_trip.c +0 -103
  533. package/src/bsdiff/zstd/tests/fuzz/decompress_cross_format.c +0 -130
  534. package/src/bsdiff/zstd/tests/fuzz/decompress_dstSize_tooSmall.c +0 -74
  535. package/src/bsdiff/zstd/tests/fuzz/dictionary_decompress.c +0 -77
  536. package/src/bsdiff/zstd/tests/fuzz/dictionary_loader.c +0 -106
  537. package/src/bsdiff/zstd/tests/fuzz/dictionary_round_trip.c +0 -155
  538. package/src/bsdiff/zstd/tests/fuzz/dictionary_stream_round_trip.c +0 -209
  539. package/src/bsdiff/zstd/tests/fuzz/fse_read_ncount.c +0 -100
  540. package/src/bsdiff/zstd/tests/fuzz/fuzz.h +0 -57
  541. package/src/bsdiff/zstd/tests/fuzz/fuzz.py +0 -911
  542. package/src/bsdiff/zstd/tests/fuzz/fuzz_data_producer.c +0 -95
  543. package/src/bsdiff/zstd/tests/fuzz/fuzz_data_producer.h +0 -66
  544. package/src/bsdiff/zstd/tests/fuzz/fuzz_helpers.c +0 -48
  545. package/src/bsdiff/zstd/tests/fuzz/fuzz_helpers.h +0 -81
  546. package/src/bsdiff/zstd/tests/fuzz/fuzz_third_party_seq_prod.h +0 -116
  547. package/src/bsdiff/zstd/tests/fuzz/generate_sequences.c +0 -88
  548. package/src/bsdiff/zstd/tests/fuzz/huf_decompress.c +0 -68
  549. package/src/bsdiff/zstd/tests/fuzz/huf_round_trip.c +0 -137
  550. package/src/bsdiff/zstd/tests/fuzz/raw_dictionary_round_trip.c +0 -119
  551. package/src/bsdiff/zstd/tests/fuzz/regression_driver.c +0 -90
  552. package/src/bsdiff/zstd/tests/fuzz/seekable_roundtrip.c +0 -88
  553. package/src/bsdiff/zstd/tests/fuzz/seq_prod_fuzz_example/Makefile +0 -16
  554. package/src/bsdiff/zstd/tests/fuzz/seq_prod_fuzz_example/README.md +0 -12
  555. package/src/bsdiff/zstd/tests/fuzz/seq_prod_fuzz_example/example_seq_prod.c +0 -52
  556. package/src/bsdiff/zstd/tests/fuzz/sequence_compression_api.c +0 -381
  557. package/src/bsdiff/zstd/tests/fuzz/simple_compress.c +0 -60
  558. package/src/bsdiff/zstd/tests/fuzz/simple_decompress.c +0 -59
  559. package/src/bsdiff/zstd/tests/fuzz/simple_round_trip.c +0 -182
  560. package/src/bsdiff/zstd/tests/fuzz/stream_decompress.c +0 -119
  561. package/src/bsdiff/zstd/tests/fuzz/stream_round_trip.c +0 -218
  562. package/src/bsdiff/zstd/tests/fuzz/zstd_frame_info.c +0 -43
  563. package/src/bsdiff/zstd/tests/fuzz/zstd_helpers.c +0 -207
  564. package/src/bsdiff/zstd/tests/fuzz/zstd_helpers.h +0 -56
  565. package/src/bsdiff/zstd/tests/fuzzer.c +0 -4933
  566. package/src/bsdiff/zstd/tests/golden-compression/PR-3517-block-splitter-corruption-test +0 -1
  567. package/src/bsdiff/zstd/tests/golden-compression/http +0 -1
  568. package/src/bsdiff/zstd/tests/golden-compression/huffman-compressed-larger +0 -0
  569. package/src/bsdiff/zstd/tests/golden-compression/large-literal-and-match-lengths +0 -0
  570. package/src/bsdiff/zstd/tests/golden-decompression/block-128k.zst +0 -0
  571. package/src/bsdiff/zstd/tests/golden-decompression/empty-block.zst +0 -0
  572. package/src/bsdiff/zstd/tests/golden-decompression/rle-first-block.zst +0 -0
  573. package/src/bsdiff/zstd/tests/golden-decompression/zeroSeq_2B.zst +0 -0
  574. package/src/bsdiff/zstd/tests/golden-decompression-errors/off0.bin.zst +0 -0
  575. package/src/bsdiff/zstd/tests/golden-decompression-errors/zeroSeq_extraneous.zst +0 -0
  576. package/src/bsdiff/zstd/tests/golden-dictionaries/http-dict-missing-symbols +0 -0
  577. package/src/bsdiff/zstd/tests/gzip/Makefile +0 -45
  578. package/src/bsdiff/zstd/tests/gzip/gzip-env.sh +0 -46
  579. package/src/bsdiff/zstd/tests/gzip/helin-segv.sh +0 -31
  580. package/src/bsdiff/zstd/tests/gzip/help-version.sh +0 -270
  581. package/src/bsdiff/zstd/tests/gzip/hufts-segv.gz +0 -0
  582. package/src/bsdiff/zstd/tests/gzip/hufts.sh +0 -34
  583. package/src/bsdiff/zstd/tests/gzip/init.cfg +0 -5
  584. package/src/bsdiff/zstd/tests/gzip/init.sh +0 -616
  585. package/src/bsdiff/zstd/tests/gzip/keep.sh +0 -51
  586. package/src/bsdiff/zstd/tests/gzip/list.sh +0 -31
  587. package/src/bsdiff/zstd/tests/gzip/memcpy-abuse.sh +0 -34
  588. package/src/bsdiff/zstd/tests/gzip/mixed.sh +0 -68
  589. package/src/bsdiff/zstd/tests/gzip/null-suffix-clobber.sh +0 -35
  590. package/src/bsdiff/zstd/tests/gzip/stdin.sh +0 -31
  591. package/src/bsdiff/zstd/tests/gzip/test-driver.sh +0 -150
  592. package/src/bsdiff/zstd/tests/gzip/trailing-nul.sh +0 -37
  593. package/src/bsdiff/zstd/tests/gzip/unpack-invalid.sh +0 -36
  594. package/src/bsdiff/zstd/tests/gzip/z-suffix.sh +0 -30
  595. package/src/bsdiff/zstd/tests/gzip/zdiff.sh +0 -48
  596. package/src/bsdiff/zstd/tests/gzip/zgrep-context.sh +0 -47
  597. package/src/bsdiff/zstd/tests/gzip/zgrep-f.sh +0 -43
  598. package/src/bsdiff/zstd/tests/gzip/zgrep-signal.sh +0 -64
  599. package/src/bsdiff/zstd/tests/gzip/znew-k.sh +0 -40
  600. package/src/bsdiff/zstd/tests/invalidDictionaries.c +0 -61
  601. package/src/bsdiff/zstd/tests/legacy.c +0 -260
  602. package/src/bsdiff/zstd/tests/libzstd_builds.sh +0 -104
  603. package/src/bsdiff/zstd/tests/longmatch.c +0 -102
  604. package/src/bsdiff/zstd/tests/loremOut.c +0 -50
  605. package/src/bsdiff/zstd/tests/loremOut.h +0 -15
  606. package/src/bsdiff/zstd/tests/paramgrill.c +0 -2966
  607. package/src/bsdiff/zstd/tests/playTests.sh +0 -1928
  608. package/src/bsdiff/zstd/tests/poolTests.c +0 -271
  609. package/src/bsdiff/zstd/tests/rateLimiter.py +0 -41
  610. package/src/bsdiff/zstd/tests/regression/Makefile +0 -60
  611. package/src/bsdiff/zstd/tests/regression/README.md +0 -28
  612. package/src/bsdiff/zstd/tests/regression/config.c +0 -404
  613. package/src/bsdiff/zstd/tests/regression/config.h +0 -91
  614. package/src/bsdiff/zstd/tests/regression/data.c +0 -631
  615. package/src/bsdiff/zstd/tests/regression/data.h +0 -121
  616. package/src/bsdiff/zstd/tests/regression/levels.h +0 -59
  617. package/src/bsdiff/zstd/tests/regression/method.c +0 -701
  618. package/src/bsdiff/zstd/tests/regression/method.h +0 -65
  619. package/src/bsdiff/zstd/tests/regression/result.c +0 -28
  620. package/src/bsdiff/zstd/tests/regression/result.h +0 -103
  621. package/src/bsdiff/zstd/tests/regression/results.csv +0 -1480
  622. package/src/bsdiff/zstd/tests/regression/test.c +0 -362
  623. package/src/bsdiff/zstd/tests/roundTripCrash.c +0 -241
  624. package/src/bsdiff/zstd/tests/seqgen.c +0 -260
  625. package/src/bsdiff/zstd/tests/seqgen.h +0 -58
  626. package/src/bsdiff/zstd/tests/test-license.py +0 -156
  627. package/src/bsdiff/zstd/tests/test-variants.sh +0 -115
  628. package/src/bsdiff/zstd/tests/test-zstd-versions.py +0 -308
  629. package/src/bsdiff/zstd/tests/zstreamtest.c +0 -3407
  630. package/src/bsdiff/zstd/zlibWrapper/BUCK +0 -22
  631. package/src/bsdiff/zstd/zlibWrapper/Makefile +0 -120
  632. package/src/bsdiff/zstd/zlibWrapper/README.md +0 -163
  633. package/src/bsdiff/zstd/zlibWrapper/examples/example.c +0 -598
  634. package/src/bsdiff/zstd/zlibWrapper/examples/example_original.c +0 -599
  635. package/src/bsdiff/zstd/zlibWrapper/examples/fitblk.c +0 -254
  636. package/src/bsdiff/zstd/zlibWrapper/examples/fitblk_original.c +0 -233
  637. package/src/bsdiff/zstd/zlibWrapper/examples/minigzip.c +0 -605
  638. package/src/bsdiff/zstd/zlibWrapper/examples/zwrapbench.c +0 -1018
  639. package/src/bsdiff/zstd/zlibWrapper/gzclose.c +0 -26
  640. package/src/bsdiff/zstd/zlibWrapper/gzcompatibility.h +0 -68
  641. package/src/bsdiff/zstd/zlibWrapper/gzguts.h +0 -229
  642. package/src/bsdiff/zstd/zlibWrapper/gzlib.c +0 -587
  643. package/src/bsdiff/zstd/zlibWrapper/gzread.c +0 -637
  644. package/src/bsdiff/zstd/zlibWrapper/gzwrite.c +0 -631
  645. package/src/bsdiff/zstd/zlibWrapper/zstd_zlibwrapper.c +0 -1200
  646. package/src/bsdiff/zstd/zlibWrapper/zstd_zlibwrapper.h +0 -91
  647. package/src/objc/build/objcWrapper.o +0 -0
  648. package/src/objc/objcWrapper.m +0 -1380
  649. package/src/zig/build/index.js +0 -782
  650. package/src/zig/build/libObjcWrapper.a +0 -0
  651. package/src/zig/build.zig +0 -29
  652. package/src/zig/macos/application.zig +0 -6
  653. package/src/zig/macos/objc.zig +0 -123
  654. package/src/zig/macos/tray.zig +0 -102
  655. package/src/zig/macos/webview.zig +0 -693
  656. package/src/zig/macos/window.zig +0 -189
  657. package/src/zig/main.zig +0 -16
  658. package/src/zig/rpc/pipesin.zig +0 -202
  659. package/src/zig/rpc/rpc.zig +0 -19
  660. package/src/zig/rpc/schema/handlers.zig +0 -402
  661. package/src/zig/rpc/schema/request.zig +0 -59
  662. package/src/zig/rpc/schema/schema.zig +0 -412
  663. package/src/zig/rpc/stdin.zig +0 -112
  664. package/src/zig/rpc/stdout.zig +0 -106
  665. package/src/zig/rpc/types.zig +0 -41
  666. package/src/zig/utils.zig +0 -49
  667. package/src/zig/zig-out/bin/webview +0 -0
@@ -1,1464 +0,0 @@
1
- /* ******************************************************************
2
- * Huffman encoder, part of New Generation Entropy library
3
- * Copyright (c) Meta Platforms, Inc. and affiliates.
4
- *
5
- * You can contact the author at :
6
- * - FSE+HUF source repository : https://github.com/Cyan4973/FiniteStateEntropy
7
- * - Public forum : https://groups.google.com/forum/#!forum/lz4c
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.
13
- ****************************************************************** */
14
-
15
- /* **************************************************************
16
- * Compiler specifics
17
- ****************************************************************/
18
- #ifdef _MSC_VER /* Visual Studio */
19
- # pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */
20
- #endif
21
-
22
-
23
- /* **************************************************************
24
- * Includes
25
- ****************************************************************/
26
- #include "../common/zstd_deps.h" /* ZSTD_memcpy, ZSTD_memset */
27
- #include "../common/compiler.h"
28
- #include "../common/bitstream.h"
29
- #include "hist.h"
30
- #define FSE_STATIC_LINKING_ONLY /* FSE_optimalTableLog_internal */
31
- #include "../common/fse.h" /* header compression */
32
- #include "../common/huf.h"
33
- #include "../common/error_private.h"
34
- #include "../common/bits.h" /* ZSTD_highbit32 */
35
-
36
-
37
- /* **************************************************************
38
- * Error Management
39
- ****************************************************************/
40
- #define HUF_isError ERR_isError
41
- #define HUF_STATIC_ASSERT(c) DEBUG_STATIC_ASSERT(c) /* use only *after* variable declarations */
42
-
43
-
44
- /* **************************************************************
45
- * Required declarations
46
- ****************************************************************/
47
- typedef struct nodeElt_s {
48
- U32 count;
49
- U16 parent;
50
- BYTE byte;
51
- BYTE nbBits;
52
- } nodeElt;
53
-
54
-
55
- /* **************************************************************
56
- * Debug Traces
57
- ****************************************************************/
58
-
59
- #if DEBUGLEVEL >= 2
60
-
61
- static size_t showU32(const U32* arr, size_t size)
62
- {
63
- size_t u;
64
- for (u=0; u<size; u++) {
65
- RAWLOG(6, " %u", arr[u]); (void)arr;
66
- }
67
- RAWLOG(6, " \n");
68
- return size;
69
- }
70
-
71
- static size_t HUF_getNbBits(HUF_CElt elt);
72
-
73
- static size_t showCTableBits(const HUF_CElt* ctable, size_t size)
74
- {
75
- size_t u;
76
- for (u=0; u<size; u++) {
77
- RAWLOG(6, " %zu", HUF_getNbBits(ctable[u])); (void)ctable;
78
- }
79
- RAWLOG(6, " \n");
80
- return size;
81
-
82
- }
83
-
84
- static size_t showHNodeSymbols(const nodeElt* hnode, size_t size)
85
- {
86
- size_t u;
87
- for (u=0; u<size; u++) {
88
- RAWLOG(6, " %u", hnode[u].byte); (void)hnode;
89
- }
90
- RAWLOG(6, " \n");
91
- return size;
92
- }
93
-
94
- static size_t showHNodeBits(const nodeElt* hnode, size_t size)
95
- {
96
- size_t u;
97
- for (u=0; u<size; u++) {
98
- RAWLOG(6, " %u", hnode[u].nbBits); (void)hnode;
99
- }
100
- RAWLOG(6, " \n");
101
- return size;
102
- }
103
-
104
- #endif
105
-
106
-
107
- /* *******************************************************
108
- * HUF : Huffman block compression
109
- *********************************************************/
110
- #define HUF_WORKSPACE_MAX_ALIGNMENT 8
111
-
112
- static void* HUF_alignUpWorkspace(void* workspace, size_t* workspaceSizePtr, size_t align)
113
- {
114
- size_t const mask = align - 1;
115
- size_t const rem = (size_t)workspace & mask;
116
- size_t const add = (align - rem) & mask;
117
- BYTE* const aligned = (BYTE*)workspace + add;
118
- assert((align & (align - 1)) == 0); /* pow 2 */
119
- assert(align <= HUF_WORKSPACE_MAX_ALIGNMENT);
120
- if (*workspaceSizePtr >= add) {
121
- assert(add < align);
122
- assert(((size_t)aligned & mask) == 0);
123
- *workspaceSizePtr -= add;
124
- return aligned;
125
- } else {
126
- *workspaceSizePtr = 0;
127
- return NULL;
128
- }
129
- }
130
-
131
-
132
- /* HUF_compressWeights() :
133
- * Same as FSE_compress(), but dedicated to huff0's weights compression.
134
- * The use case needs much less stack memory.
135
- * Note : all elements within weightTable are supposed to be <= HUF_TABLELOG_MAX.
136
- */
137
- #define MAX_FSE_TABLELOG_FOR_HUFF_HEADER 6
138
-
139
- typedef struct {
140
- FSE_CTable CTable[FSE_CTABLE_SIZE_U32(MAX_FSE_TABLELOG_FOR_HUFF_HEADER, HUF_TABLELOG_MAX)];
141
- U32 scratchBuffer[FSE_BUILD_CTABLE_WORKSPACE_SIZE_U32(HUF_TABLELOG_MAX, MAX_FSE_TABLELOG_FOR_HUFF_HEADER)];
142
- unsigned count[HUF_TABLELOG_MAX+1];
143
- S16 norm[HUF_TABLELOG_MAX+1];
144
- } HUF_CompressWeightsWksp;
145
-
146
- static size_t
147
- HUF_compressWeights(void* dst, size_t dstSize,
148
- const void* weightTable, size_t wtSize,
149
- void* workspace, size_t workspaceSize)
150
- {
151
- BYTE* const ostart = (BYTE*) dst;
152
- BYTE* op = ostart;
153
- BYTE* const oend = ostart + dstSize;
154
-
155
- unsigned maxSymbolValue = HUF_TABLELOG_MAX;
156
- U32 tableLog = MAX_FSE_TABLELOG_FOR_HUFF_HEADER;
157
- HUF_CompressWeightsWksp* wksp = (HUF_CompressWeightsWksp*)HUF_alignUpWorkspace(workspace, &workspaceSize, ZSTD_ALIGNOF(U32));
158
-
159
- if (workspaceSize < sizeof(HUF_CompressWeightsWksp)) return ERROR(GENERIC);
160
-
161
- /* init conditions */
162
- if (wtSize <= 1) return 0; /* Not compressible */
163
-
164
- /* Scan input and build symbol stats */
165
- { unsigned const maxCount = HIST_count_simple(wksp->count, &maxSymbolValue, weightTable, wtSize); /* never fails */
166
- if (maxCount == wtSize) return 1; /* only a single symbol in src : rle */
167
- if (maxCount == 1) return 0; /* each symbol present maximum once => not compressible */
168
- }
169
-
170
- tableLog = FSE_optimalTableLog(tableLog, wtSize, maxSymbolValue);
171
- CHECK_F( FSE_normalizeCount(wksp->norm, tableLog, wksp->count, wtSize, maxSymbolValue, /* useLowProbCount */ 0) );
172
-
173
- /* Write table description header */
174
- { CHECK_V_F(hSize, FSE_writeNCount(op, (size_t)(oend-op), wksp->norm, maxSymbolValue, tableLog) );
175
- op += hSize;
176
- }
177
-
178
- /* Compress */
179
- CHECK_F( FSE_buildCTable_wksp(wksp->CTable, wksp->norm, maxSymbolValue, tableLog, wksp->scratchBuffer, sizeof(wksp->scratchBuffer)) );
180
- { CHECK_V_F(cSize, FSE_compress_usingCTable(op, (size_t)(oend - op), weightTable, wtSize, wksp->CTable) );
181
- if (cSize == 0) return 0; /* not enough space for compressed data */
182
- op += cSize;
183
- }
184
-
185
- return (size_t)(op-ostart);
186
- }
187
-
188
- static size_t HUF_getNbBits(HUF_CElt elt)
189
- {
190
- return elt & 0xFF;
191
- }
192
-
193
- static size_t HUF_getNbBitsFast(HUF_CElt elt)
194
- {
195
- return elt;
196
- }
197
-
198
- static size_t HUF_getValue(HUF_CElt elt)
199
- {
200
- return elt & ~(size_t)0xFF;
201
- }
202
-
203
- static size_t HUF_getValueFast(HUF_CElt elt)
204
- {
205
- return elt;
206
- }
207
-
208
- static void HUF_setNbBits(HUF_CElt* elt, size_t nbBits)
209
- {
210
- assert(nbBits <= HUF_TABLELOG_ABSOLUTEMAX);
211
- *elt = nbBits;
212
- }
213
-
214
- static void HUF_setValue(HUF_CElt* elt, size_t value)
215
- {
216
- size_t const nbBits = HUF_getNbBits(*elt);
217
- if (nbBits > 0) {
218
- assert((value >> nbBits) == 0);
219
- *elt |= value << (sizeof(HUF_CElt) * 8 - nbBits);
220
- }
221
- }
222
-
223
- HUF_CTableHeader HUF_readCTableHeader(HUF_CElt const* ctable)
224
- {
225
- HUF_CTableHeader header;
226
- ZSTD_memcpy(&header, ctable, sizeof(header));
227
- return header;
228
- }
229
-
230
- static void HUF_writeCTableHeader(HUF_CElt* ctable, U32 tableLog, U32 maxSymbolValue)
231
- {
232
- HUF_CTableHeader header;
233
- HUF_STATIC_ASSERT(sizeof(ctable[0]) == sizeof(header));
234
- ZSTD_memset(&header, 0, sizeof(header));
235
- assert(tableLog < 256);
236
- header.tableLog = (BYTE)tableLog;
237
- assert(maxSymbolValue < 256);
238
- header.maxSymbolValue = (BYTE)maxSymbolValue;
239
- ZSTD_memcpy(ctable, &header, sizeof(header));
240
- }
241
-
242
- typedef struct {
243
- HUF_CompressWeightsWksp wksp;
244
- BYTE bitsToWeight[HUF_TABLELOG_MAX + 1]; /* precomputed conversion table */
245
- BYTE huffWeight[HUF_SYMBOLVALUE_MAX];
246
- } HUF_WriteCTableWksp;
247
-
248
- size_t HUF_writeCTable_wksp(void* dst, size_t maxDstSize,
249
- const HUF_CElt* CTable, unsigned maxSymbolValue, unsigned huffLog,
250
- void* workspace, size_t workspaceSize)
251
- {
252
- HUF_CElt const* const ct = CTable + 1;
253
- BYTE* op = (BYTE*)dst;
254
- U32 n;
255
- HUF_WriteCTableWksp* wksp = (HUF_WriteCTableWksp*)HUF_alignUpWorkspace(workspace, &workspaceSize, ZSTD_ALIGNOF(U32));
256
-
257
- HUF_STATIC_ASSERT(HUF_CTABLE_WORKSPACE_SIZE >= sizeof(HUF_WriteCTableWksp));
258
-
259
- assert(HUF_readCTableHeader(CTable).maxSymbolValue == maxSymbolValue);
260
- assert(HUF_readCTableHeader(CTable).tableLog == huffLog);
261
-
262
- /* check conditions */
263
- if (workspaceSize < sizeof(HUF_WriteCTableWksp)) return ERROR(GENERIC);
264
- if (maxSymbolValue > HUF_SYMBOLVALUE_MAX) return ERROR(maxSymbolValue_tooLarge);
265
-
266
- /* convert to weight */
267
- wksp->bitsToWeight[0] = 0;
268
- for (n=1; n<huffLog+1; n++)
269
- wksp->bitsToWeight[n] = (BYTE)(huffLog + 1 - n);
270
- for (n=0; n<maxSymbolValue; n++)
271
- wksp->huffWeight[n] = wksp->bitsToWeight[HUF_getNbBits(ct[n])];
272
-
273
- /* attempt weights compression by FSE */
274
- if (maxDstSize < 1) return ERROR(dstSize_tooSmall);
275
- { CHECK_V_F(hSize, HUF_compressWeights(op+1, maxDstSize-1, wksp->huffWeight, maxSymbolValue, &wksp->wksp, sizeof(wksp->wksp)) );
276
- if ((hSize>1) & (hSize < maxSymbolValue/2)) { /* FSE compressed */
277
- op[0] = (BYTE)hSize;
278
- return hSize+1;
279
- } }
280
-
281
- /* write raw values as 4-bits (max : 15) */
282
- if (maxSymbolValue > (256-128)) return ERROR(GENERIC); /* should not happen : likely means source cannot be compressed */
283
- if (((maxSymbolValue+1)/2) + 1 > maxDstSize) return ERROR(dstSize_tooSmall); /* not enough space within dst buffer */
284
- op[0] = (BYTE)(128 /*special case*/ + (maxSymbolValue-1));
285
- wksp->huffWeight[maxSymbolValue] = 0; /* to be sure it doesn't cause msan issue in final combination */
286
- for (n=0; n<maxSymbolValue; n+=2)
287
- op[(n/2)+1] = (BYTE)((wksp->huffWeight[n] << 4) + wksp->huffWeight[n+1]);
288
- return ((maxSymbolValue+1)/2) + 1;
289
- }
290
-
291
-
292
- size_t HUF_readCTable (HUF_CElt* CTable, unsigned* maxSymbolValuePtr, const void* src, size_t srcSize, unsigned* hasZeroWeights)
293
- {
294
- BYTE huffWeight[HUF_SYMBOLVALUE_MAX + 1]; /* init not required, even though some static analyzer may complain */
295
- U32 rankVal[HUF_TABLELOG_ABSOLUTEMAX + 1]; /* large enough for values from 0 to 16 */
296
- U32 tableLog = 0;
297
- U32 nbSymbols = 0;
298
- HUF_CElt* const ct = CTable + 1;
299
-
300
- /* get symbol weights */
301
- CHECK_V_F(readSize, HUF_readStats(huffWeight, HUF_SYMBOLVALUE_MAX+1, rankVal, &nbSymbols, &tableLog, src, srcSize));
302
- *hasZeroWeights = (rankVal[0] > 0);
303
-
304
- /* check result */
305
- if (tableLog > HUF_TABLELOG_MAX) return ERROR(tableLog_tooLarge);
306
- if (nbSymbols > *maxSymbolValuePtr+1) return ERROR(maxSymbolValue_tooSmall);
307
-
308
- *maxSymbolValuePtr = nbSymbols - 1;
309
-
310
- HUF_writeCTableHeader(CTable, tableLog, *maxSymbolValuePtr);
311
-
312
- /* Prepare base value per rank */
313
- { U32 n, nextRankStart = 0;
314
- for (n=1; n<=tableLog; n++) {
315
- U32 curr = nextRankStart;
316
- nextRankStart += (rankVal[n] << (n-1));
317
- rankVal[n] = curr;
318
- } }
319
-
320
- /* fill nbBits */
321
- { U32 n; for (n=0; n<nbSymbols; n++) {
322
- const U32 w = huffWeight[n];
323
- HUF_setNbBits(ct + n, (BYTE)(tableLog + 1 - w) & -(w != 0));
324
- } }
325
-
326
- /* fill val */
327
- { U16 nbPerRank[HUF_TABLELOG_MAX+2] = {0}; /* support w=0=>n=tableLog+1 */
328
- U16 valPerRank[HUF_TABLELOG_MAX+2] = {0};
329
- { U32 n; for (n=0; n<nbSymbols; n++) nbPerRank[HUF_getNbBits(ct[n])]++; }
330
- /* determine stating value per rank */
331
- valPerRank[tableLog+1] = 0; /* for w==0 */
332
- { U16 min = 0;
333
- U32 n; for (n=tableLog; n>0; n--) { /* start at n=tablelog <-> w=1 */
334
- valPerRank[n] = min; /* get starting value within each rank */
335
- min += nbPerRank[n];
336
- min >>= 1;
337
- } }
338
- /* assign value within rank, symbol order */
339
- { U32 n; for (n=0; n<nbSymbols; n++) HUF_setValue(ct + n, valPerRank[HUF_getNbBits(ct[n])]++); }
340
- }
341
-
342
- return readSize;
343
- }
344
-
345
- U32 HUF_getNbBitsFromCTable(HUF_CElt const* CTable, U32 symbolValue)
346
- {
347
- const HUF_CElt* const ct = CTable + 1;
348
- assert(symbolValue <= HUF_SYMBOLVALUE_MAX);
349
- if (symbolValue > HUF_readCTableHeader(CTable).maxSymbolValue)
350
- return 0;
351
- return (U32)HUF_getNbBits(ct[symbolValue]);
352
- }
353
-
354
-
355
- /**
356
- * HUF_setMaxHeight():
357
- * Try to enforce @targetNbBits on the Huffman tree described in @huffNode.
358
- *
359
- * It attempts to convert all nodes with nbBits > @targetNbBits
360
- * to employ @targetNbBits instead. Then it adjusts the tree
361
- * so that it remains a valid canonical Huffman tree.
362
- *
363
- * @pre The sum of the ranks of each symbol == 2^largestBits,
364
- * where largestBits == huffNode[lastNonNull].nbBits.
365
- * @post The sum of the ranks of each symbol == 2^largestBits,
366
- * where largestBits is the return value (expected <= targetNbBits).
367
- *
368
- * @param huffNode The Huffman tree modified in place to enforce targetNbBits.
369
- * It's presumed sorted, from most frequent to rarest symbol.
370
- * @param lastNonNull The symbol with the lowest count in the Huffman tree.
371
- * @param targetNbBits The allowed number of bits, which the Huffman tree
372
- * may not respect. After this function the Huffman tree will
373
- * respect targetNbBits.
374
- * @return The maximum number of bits of the Huffman tree after adjustment.
375
- */
376
- static U32 HUF_setMaxHeight(nodeElt* huffNode, U32 lastNonNull, U32 targetNbBits)
377
- {
378
- const U32 largestBits = huffNode[lastNonNull].nbBits;
379
- /* early exit : no elt > targetNbBits, so the tree is already valid. */
380
- if (largestBits <= targetNbBits) return largestBits;
381
-
382
- DEBUGLOG(5, "HUF_setMaxHeight (targetNbBits = %u)", targetNbBits);
383
-
384
- /* there are several too large elements (at least >= 2) */
385
- { int totalCost = 0;
386
- const U32 baseCost = 1 << (largestBits - targetNbBits);
387
- int n = (int)lastNonNull;
388
-
389
- /* Adjust any ranks > targetNbBits to targetNbBits.
390
- * Compute totalCost, which is how far the sum of the ranks is
391
- * we are over 2^largestBits after adjust the offending ranks.
392
- */
393
- while (huffNode[n].nbBits > targetNbBits) {
394
- totalCost += baseCost - (1 << (largestBits - huffNode[n].nbBits));
395
- huffNode[n].nbBits = (BYTE)targetNbBits;
396
- n--;
397
- }
398
- /* n stops at huffNode[n].nbBits <= targetNbBits */
399
- assert(huffNode[n].nbBits <= targetNbBits);
400
- /* n end at index of smallest symbol using < targetNbBits */
401
- while (huffNode[n].nbBits == targetNbBits) --n;
402
-
403
- /* renorm totalCost from 2^largestBits to 2^targetNbBits
404
- * note : totalCost is necessarily a multiple of baseCost */
405
- assert(((U32)totalCost & (baseCost - 1)) == 0);
406
- totalCost >>= (largestBits - targetNbBits);
407
- assert(totalCost > 0);
408
-
409
- /* repay normalized cost */
410
- { U32 const noSymbol = 0xF0F0F0F0;
411
- U32 rankLast[HUF_TABLELOG_MAX+2];
412
-
413
- /* Get pos of last (smallest = lowest cum. count) symbol per rank */
414
- ZSTD_memset(rankLast, 0xF0, sizeof(rankLast));
415
- { U32 currentNbBits = targetNbBits;
416
- int pos;
417
- for (pos=n ; pos >= 0; pos--) {
418
- if (huffNode[pos].nbBits >= currentNbBits) continue;
419
- currentNbBits = huffNode[pos].nbBits; /* < targetNbBits */
420
- rankLast[targetNbBits-currentNbBits] = (U32)pos;
421
- } }
422
-
423
- while (totalCost > 0) {
424
- /* Try to reduce the next power of 2 above totalCost because we
425
- * gain back half the rank.
426
- */
427
- U32 nBitsToDecrease = ZSTD_highbit32((U32)totalCost) + 1;
428
- for ( ; nBitsToDecrease > 1; nBitsToDecrease--) {
429
- U32 const highPos = rankLast[nBitsToDecrease];
430
- U32 const lowPos = rankLast[nBitsToDecrease-1];
431
- if (highPos == noSymbol) continue;
432
- /* Decrease highPos if no symbols of lowPos or if it is
433
- * not cheaper to remove 2 lowPos than highPos.
434
- */
435
- if (lowPos == noSymbol) break;
436
- { U32 const highTotal = huffNode[highPos].count;
437
- U32 const lowTotal = 2 * huffNode[lowPos].count;
438
- if (highTotal <= lowTotal) break;
439
- } }
440
- /* only triggered when no more rank 1 symbol left => find closest one (note : there is necessarily at least one !) */
441
- assert(rankLast[nBitsToDecrease] != noSymbol || nBitsToDecrease == 1);
442
- /* HUF_MAX_TABLELOG test just to please gcc 5+; but it should not be necessary */
443
- while ((nBitsToDecrease<=HUF_TABLELOG_MAX) && (rankLast[nBitsToDecrease] == noSymbol))
444
- nBitsToDecrease++;
445
- assert(rankLast[nBitsToDecrease] != noSymbol);
446
- /* Increase the number of bits to gain back half the rank cost. */
447
- totalCost -= 1 << (nBitsToDecrease-1);
448
- huffNode[rankLast[nBitsToDecrease]].nbBits++;
449
-
450
- /* Fix up the new rank.
451
- * If the new rank was empty, this symbol is now its smallest.
452
- * Otherwise, this symbol will be the largest in the new rank so no adjustment.
453
- */
454
- if (rankLast[nBitsToDecrease-1] == noSymbol)
455
- rankLast[nBitsToDecrease-1] = rankLast[nBitsToDecrease];
456
- /* Fix up the old rank.
457
- * If the symbol was at position 0, meaning it was the highest weight symbol in the tree,
458
- * it must be the only symbol in its rank, so the old rank now has no symbols.
459
- * Otherwise, since the Huffman nodes are sorted by count, the previous position is now
460
- * the smallest node in the rank. If the previous position belongs to a different rank,
461
- * then the rank is now empty.
462
- */
463
- if (rankLast[nBitsToDecrease] == 0) /* special case, reached largest symbol */
464
- rankLast[nBitsToDecrease] = noSymbol;
465
- else {
466
- rankLast[nBitsToDecrease]--;
467
- if (huffNode[rankLast[nBitsToDecrease]].nbBits != targetNbBits-nBitsToDecrease)
468
- rankLast[nBitsToDecrease] = noSymbol; /* this rank is now empty */
469
- }
470
- } /* while (totalCost > 0) */
471
-
472
- /* If we've removed too much weight, then we have to add it back.
473
- * To avoid overshooting again, we only adjust the smallest rank.
474
- * We take the largest nodes from the lowest rank 0 and move them
475
- * to rank 1. There's guaranteed to be enough rank 0 symbols because
476
- * TODO.
477
- */
478
- while (totalCost < 0) { /* Sometimes, cost correction overshoot */
479
- /* special case : no rank 1 symbol (using targetNbBits-1);
480
- * let's create one from largest rank 0 (using targetNbBits).
481
- */
482
- if (rankLast[1] == noSymbol) {
483
- while (huffNode[n].nbBits == targetNbBits) n--;
484
- huffNode[n+1].nbBits--;
485
- assert(n >= 0);
486
- rankLast[1] = (U32)(n+1);
487
- totalCost++;
488
- continue;
489
- }
490
- huffNode[ rankLast[1] + 1 ].nbBits--;
491
- rankLast[1]++;
492
- totalCost ++;
493
- }
494
- } /* repay normalized cost */
495
- } /* there are several too large elements (at least >= 2) */
496
-
497
- return targetNbBits;
498
- }
499
-
500
- typedef struct {
501
- U16 base;
502
- U16 curr;
503
- } rankPos;
504
-
505
- typedef nodeElt huffNodeTable[2 * (HUF_SYMBOLVALUE_MAX + 1)];
506
-
507
- /* Number of buckets available for HUF_sort() */
508
- #define RANK_POSITION_TABLE_SIZE 192
509
-
510
- typedef struct {
511
- huffNodeTable huffNodeTbl;
512
- rankPos rankPosition[RANK_POSITION_TABLE_SIZE];
513
- } HUF_buildCTable_wksp_tables;
514
-
515
- /* RANK_POSITION_DISTINCT_COUNT_CUTOFF == Cutoff point in HUF_sort() buckets for which we use log2 bucketing.
516
- * Strategy is to use as many buckets as possible for representing distinct
517
- * counts while using the remainder to represent all "large" counts.
518
- *
519
- * To satisfy this requirement for 192 buckets, we can do the following:
520
- * Let buckets 0-166 represent distinct counts of [0, 166]
521
- * Let buckets 166 to 192 represent all remaining counts up to RANK_POSITION_MAX_COUNT_LOG using log2 bucketing.
522
- */
523
- #define RANK_POSITION_MAX_COUNT_LOG 32
524
- #define RANK_POSITION_LOG_BUCKETS_BEGIN ((RANK_POSITION_TABLE_SIZE - 1) - RANK_POSITION_MAX_COUNT_LOG - 1 /* == 158 */)
525
- #define RANK_POSITION_DISTINCT_COUNT_CUTOFF (RANK_POSITION_LOG_BUCKETS_BEGIN + ZSTD_highbit32(RANK_POSITION_LOG_BUCKETS_BEGIN) /* == 166 */)
526
-
527
- /* Return the appropriate bucket index for a given count. See definition of
528
- * RANK_POSITION_DISTINCT_COUNT_CUTOFF for explanation of bucketing strategy.
529
- */
530
- static U32 HUF_getIndex(U32 const count) {
531
- return (count < RANK_POSITION_DISTINCT_COUNT_CUTOFF)
532
- ? count
533
- : ZSTD_highbit32(count) + RANK_POSITION_LOG_BUCKETS_BEGIN;
534
- }
535
-
536
- /* Helper swap function for HUF_quickSortPartition() */
537
- static void HUF_swapNodes(nodeElt* a, nodeElt* b) {
538
- nodeElt tmp = *a;
539
- *a = *b;
540
- *b = tmp;
541
- }
542
-
543
- /* Returns 0 if the huffNode array is not sorted by descending count */
544
- MEM_STATIC int HUF_isSorted(nodeElt huffNode[], U32 const maxSymbolValue1) {
545
- U32 i;
546
- for (i = 1; i < maxSymbolValue1; ++i) {
547
- if (huffNode[i].count > huffNode[i-1].count) {
548
- return 0;
549
- }
550
- }
551
- return 1;
552
- }
553
-
554
- /* Insertion sort by descending order */
555
- HINT_INLINE void HUF_insertionSort(nodeElt huffNode[], int const low, int const high) {
556
- int i;
557
- int const size = high-low+1;
558
- huffNode += low;
559
- for (i = 1; i < size; ++i) {
560
- nodeElt const key = huffNode[i];
561
- int j = i - 1;
562
- while (j >= 0 && huffNode[j].count < key.count) {
563
- huffNode[j + 1] = huffNode[j];
564
- j--;
565
- }
566
- huffNode[j + 1] = key;
567
- }
568
- }
569
-
570
- /* Pivot helper function for quicksort. */
571
- static int HUF_quickSortPartition(nodeElt arr[], int const low, int const high) {
572
- /* Simply select rightmost element as pivot. "Better" selectors like
573
- * median-of-three don't experimentally appear to have any benefit.
574
- */
575
- U32 const pivot = arr[high].count;
576
- int i = low - 1;
577
- int j = low;
578
- for ( ; j < high; j++) {
579
- if (arr[j].count > pivot) {
580
- i++;
581
- HUF_swapNodes(&arr[i], &arr[j]);
582
- }
583
- }
584
- HUF_swapNodes(&arr[i + 1], &arr[high]);
585
- return i + 1;
586
- }
587
-
588
- /* Classic quicksort by descending with partially iterative calls
589
- * to reduce worst case callstack size.
590
- */
591
- static void HUF_simpleQuickSort(nodeElt arr[], int low, int high) {
592
- int const kInsertionSortThreshold = 8;
593
- if (high - low < kInsertionSortThreshold) {
594
- HUF_insertionSort(arr, low, high);
595
- return;
596
- }
597
- while (low < high) {
598
- int const idx = HUF_quickSortPartition(arr, low, high);
599
- if (idx - low < high - idx) {
600
- HUF_simpleQuickSort(arr, low, idx - 1);
601
- low = idx + 1;
602
- } else {
603
- HUF_simpleQuickSort(arr, idx + 1, high);
604
- high = idx - 1;
605
- }
606
- }
607
- }
608
-
609
- /**
610
- * HUF_sort():
611
- * Sorts the symbols [0, maxSymbolValue] by count[symbol] in decreasing order.
612
- * This is a typical bucket sorting strategy that uses either quicksort or insertion sort to sort each bucket.
613
- *
614
- * @param[out] huffNode Sorted symbols by decreasing count. Only members `.count` and `.byte` are filled.
615
- * Must have (maxSymbolValue + 1) entries.
616
- * @param[in] count Histogram of the symbols.
617
- * @param[in] maxSymbolValue Maximum symbol value.
618
- * @param rankPosition This is a scratch workspace. Must have RANK_POSITION_TABLE_SIZE entries.
619
- */
620
- static void HUF_sort(nodeElt huffNode[], const unsigned count[], U32 const maxSymbolValue, rankPos rankPosition[]) {
621
- U32 n;
622
- U32 const maxSymbolValue1 = maxSymbolValue+1;
623
-
624
- /* Compute base and set curr to base.
625
- * For symbol s let lowerRank = HUF_getIndex(count[n]) and rank = lowerRank + 1.
626
- * See HUF_getIndex to see bucketing strategy.
627
- * We attribute each symbol to lowerRank's base value, because we want to know where
628
- * each rank begins in the output, so for rank R we want to count ranks R+1 and above.
629
- */
630
- ZSTD_memset(rankPosition, 0, sizeof(*rankPosition) * RANK_POSITION_TABLE_SIZE);
631
- for (n = 0; n < maxSymbolValue1; ++n) {
632
- U32 lowerRank = HUF_getIndex(count[n]);
633
- assert(lowerRank < RANK_POSITION_TABLE_SIZE - 1);
634
- rankPosition[lowerRank].base++;
635
- }
636
-
637
- assert(rankPosition[RANK_POSITION_TABLE_SIZE - 1].base == 0);
638
- /* Set up the rankPosition table */
639
- for (n = RANK_POSITION_TABLE_SIZE - 1; n > 0; --n) {
640
- rankPosition[n-1].base += rankPosition[n].base;
641
- rankPosition[n-1].curr = rankPosition[n-1].base;
642
- }
643
-
644
- /* Insert each symbol into their appropriate bucket, setting up rankPosition table. */
645
- for (n = 0; n < maxSymbolValue1; ++n) {
646
- U32 const c = count[n];
647
- U32 const r = HUF_getIndex(c) + 1;
648
- U32 const pos = rankPosition[r].curr++;
649
- assert(pos < maxSymbolValue1);
650
- huffNode[pos].count = c;
651
- huffNode[pos].byte = (BYTE)n;
652
- }
653
-
654
- /* Sort each bucket. */
655
- for (n = RANK_POSITION_DISTINCT_COUNT_CUTOFF; n < RANK_POSITION_TABLE_SIZE - 1; ++n) {
656
- int const bucketSize = rankPosition[n].curr - rankPosition[n].base;
657
- U32 const bucketStartIdx = rankPosition[n].base;
658
- if (bucketSize > 1) {
659
- assert(bucketStartIdx < maxSymbolValue1);
660
- HUF_simpleQuickSort(huffNode + bucketStartIdx, 0, bucketSize-1);
661
- }
662
- }
663
-
664
- assert(HUF_isSorted(huffNode, maxSymbolValue1));
665
- }
666
-
667
-
668
- /** HUF_buildCTable_wksp() :
669
- * Same as HUF_buildCTable(), but using externally allocated scratch buffer.
670
- * `workSpace` must be aligned on 4-bytes boundaries, and be at least as large as sizeof(HUF_buildCTable_wksp_tables).
671
- */
672
- #define STARTNODE (HUF_SYMBOLVALUE_MAX+1)
673
-
674
- /* HUF_buildTree():
675
- * Takes the huffNode array sorted by HUF_sort() and builds an unlimited-depth Huffman tree.
676
- *
677
- * @param huffNode The array sorted by HUF_sort(). Builds the Huffman tree in this array.
678
- * @param maxSymbolValue The maximum symbol value.
679
- * @return The smallest node in the Huffman tree (by count).
680
- */
681
- static int HUF_buildTree(nodeElt* huffNode, U32 maxSymbolValue)
682
- {
683
- nodeElt* const huffNode0 = huffNode - 1;
684
- int nonNullRank;
685
- int lowS, lowN;
686
- int nodeNb = STARTNODE;
687
- int n, nodeRoot;
688
- DEBUGLOG(5, "HUF_buildTree (alphabet size = %u)", maxSymbolValue + 1);
689
- /* init for parents */
690
- nonNullRank = (int)maxSymbolValue;
691
- while(huffNode[nonNullRank].count == 0) nonNullRank--;
692
- lowS = nonNullRank; nodeRoot = nodeNb + lowS - 1; lowN = nodeNb;
693
- huffNode[nodeNb].count = huffNode[lowS].count + huffNode[lowS-1].count;
694
- huffNode[lowS].parent = huffNode[lowS-1].parent = (U16)nodeNb;
695
- nodeNb++; lowS-=2;
696
- for (n=nodeNb; n<=nodeRoot; n++) huffNode[n].count = (U32)(1U<<30);
697
- huffNode0[0].count = (U32)(1U<<31); /* fake entry, strong barrier */
698
-
699
- /* create parents */
700
- while (nodeNb <= nodeRoot) {
701
- int const n1 = (huffNode[lowS].count < huffNode[lowN].count) ? lowS-- : lowN++;
702
- int const n2 = (huffNode[lowS].count < huffNode[lowN].count) ? lowS-- : lowN++;
703
- huffNode[nodeNb].count = huffNode[n1].count + huffNode[n2].count;
704
- huffNode[n1].parent = huffNode[n2].parent = (U16)nodeNb;
705
- nodeNb++;
706
- }
707
-
708
- /* distribute weights (unlimited tree height) */
709
- huffNode[nodeRoot].nbBits = 0;
710
- for (n=nodeRoot-1; n>=STARTNODE; n--)
711
- huffNode[n].nbBits = huffNode[ huffNode[n].parent ].nbBits + 1;
712
- for (n=0; n<=nonNullRank; n++)
713
- huffNode[n].nbBits = huffNode[ huffNode[n].parent ].nbBits + 1;
714
-
715
- DEBUGLOG(6, "Initial distribution of bits completed (%zu sorted symbols)", showHNodeBits(huffNode, maxSymbolValue+1));
716
-
717
- return nonNullRank;
718
- }
719
-
720
- /**
721
- * HUF_buildCTableFromTree():
722
- * Build the CTable given the Huffman tree in huffNode.
723
- *
724
- * @param[out] CTable The output Huffman CTable.
725
- * @param huffNode The Huffman tree.
726
- * @param nonNullRank The last and smallest node in the Huffman tree.
727
- * @param maxSymbolValue The maximum symbol value.
728
- * @param maxNbBits The exact maximum number of bits used in the Huffman tree.
729
- */
730
- static void HUF_buildCTableFromTree(HUF_CElt* CTable, nodeElt const* huffNode, int nonNullRank, U32 maxSymbolValue, U32 maxNbBits)
731
- {
732
- HUF_CElt* const ct = CTable + 1;
733
- /* fill result into ctable (val, nbBits) */
734
- int n;
735
- U16 nbPerRank[HUF_TABLELOG_MAX+1] = {0};
736
- U16 valPerRank[HUF_TABLELOG_MAX+1] = {0};
737
- int const alphabetSize = (int)(maxSymbolValue + 1);
738
- for (n=0; n<=nonNullRank; n++)
739
- nbPerRank[huffNode[n].nbBits]++;
740
- /* determine starting value per rank */
741
- { U16 min = 0;
742
- for (n=(int)maxNbBits; n>0; n--) {
743
- valPerRank[n] = min; /* get starting value within each rank */
744
- min += nbPerRank[n];
745
- min >>= 1;
746
- } }
747
- for (n=0; n<alphabetSize; n++)
748
- HUF_setNbBits(ct + huffNode[n].byte, huffNode[n].nbBits); /* push nbBits per symbol, symbol order */
749
- for (n=0; n<alphabetSize; n++)
750
- HUF_setValue(ct + n, valPerRank[HUF_getNbBits(ct[n])]++); /* assign value within rank, symbol order */
751
-
752
- HUF_writeCTableHeader(CTable, maxNbBits, maxSymbolValue);
753
- }
754
-
755
- size_t
756
- HUF_buildCTable_wksp(HUF_CElt* CTable, const unsigned* count, U32 maxSymbolValue, U32 maxNbBits,
757
- void* workSpace, size_t wkspSize)
758
- {
759
- HUF_buildCTable_wksp_tables* const wksp_tables =
760
- (HUF_buildCTable_wksp_tables*)HUF_alignUpWorkspace(workSpace, &wkspSize, ZSTD_ALIGNOF(U32));
761
- nodeElt* const huffNode0 = wksp_tables->huffNodeTbl;
762
- nodeElt* const huffNode = huffNode0+1;
763
- int nonNullRank;
764
-
765
- HUF_STATIC_ASSERT(HUF_CTABLE_WORKSPACE_SIZE == sizeof(HUF_buildCTable_wksp_tables));
766
-
767
- DEBUGLOG(5, "HUF_buildCTable_wksp (alphabet size = %u)", maxSymbolValue+1);
768
-
769
- /* safety checks */
770
- if (wkspSize < sizeof(HUF_buildCTable_wksp_tables))
771
- return ERROR(workSpace_tooSmall);
772
- if (maxNbBits == 0) maxNbBits = HUF_TABLELOG_DEFAULT;
773
- if (maxSymbolValue > HUF_SYMBOLVALUE_MAX)
774
- return ERROR(maxSymbolValue_tooLarge);
775
- ZSTD_memset(huffNode0, 0, sizeof(huffNodeTable));
776
-
777
- /* sort, decreasing order */
778
- HUF_sort(huffNode, count, maxSymbolValue, wksp_tables->rankPosition);
779
- DEBUGLOG(6, "sorted symbols completed (%zu symbols)", showHNodeSymbols(huffNode, maxSymbolValue+1));
780
-
781
- /* build tree */
782
- nonNullRank = HUF_buildTree(huffNode, maxSymbolValue);
783
-
784
- /* determine and enforce maxTableLog */
785
- maxNbBits = HUF_setMaxHeight(huffNode, (U32)nonNullRank, maxNbBits);
786
- if (maxNbBits > HUF_TABLELOG_MAX) return ERROR(GENERIC); /* check fit into table */
787
-
788
- HUF_buildCTableFromTree(CTable, huffNode, nonNullRank, maxSymbolValue, maxNbBits);
789
-
790
- return maxNbBits;
791
- }
792
-
793
- size_t HUF_estimateCompressedSize(const HUF_CElt* CTable, const unsigned* count, unsigned maxSymbolValue)
794
- {
795
- HUF_CElt const* ct = CTable + 1;
796
- size_t nbBits = 0;
797
- int s;
798
- for (s = 0; s <= (int)maxSymbolValue; ++s) {
799
- nbBits += HUF_getNbBits(ct[s]) * count[s];
800
- }
801
- return nbBits >> 3;
802
- }
803
-
804
- int HUF_validateCTable(const HUF_CElt* CTable, const unsigned* count, unsigned maxSymbolValue) {
805
- HUF_CTableHeader header = HUF_readCTableHeader(CTable);
806
- HUF_CElt const* ct = CTable + 1;
807
- int bad = 0;
808
- int s;
809
-
810
- assert(header.tableLog <= HUF_TABLELOG_ABSOLUTEMAX);
811
-
812
- if (header.maxSymbolValue < maxSymbolValue)
813
- return 0;
814
-
815
- for (s = 0; s <= (int)maxSymbolValue; ++s) {
816
- bad |= (count[s] != 0) & (HUF_getNbBits(ct[s]) == 0);
817
- }
818
- return !bad;
819
- }
820
-
821
- size_t HUF_compressBound(size_t size) { return HUF_COMPRESSBOUND(size); }
822
-
823
- /** HUF_CStream_t:
824
- * Huffman uses its own BIT_CStream_t implementation.
825
- * There are three major differences from BIT_CStream_t:
826
- * 1. HUF_addBits() takes a HUF_CElt (size_t) which is
827
- * the pair (nbBits, value) in the format:
828
- * format:
829
- * - Bits [0, 4) = nbBits
830
- * - Bits [4, 64 - nbBits) = 0
831
- * - Bits [64 - nbBits, 64) = value
832
- * 2. The bitContainer is built from the upper bits and
833
- * right shifted. E.g. to add a new value of N bits
834
- * you right shift the bitContainer by N, then or in
835
- * the new value into the N upper bits.
836
- * 3. The bitstream has two bit containers. You can add
837
- * bits to the second container and merge them into
838
- * the first container.
839
- */
840
-
841
- #define HUF_BITS_IN_CONTAINER (sizeof(size_t) * 8)
842
-
843
- typedef struct {
844
- size_t bitContainer[2];
845
- size_t bitPos[2];
846
-
847
- BYTE* startPtr;
848
- BYTE* ptr;
849
- BYTE* endPtr;
850
- } HUF_CStream_t;
851
-
852
- /**! HUF_initCStream():
853
- * Initializes the bitstream.
854
- * @returns 0 or an error code.
855
- */
856
- static size_t HUF_initCStream(HUF_CStream_t* bitC,
857
- void* startPtr, size_t dstCapacity)
858
- {
859
- ZSTD_memset(bitC, 0, sizeof(*bitC));
860
- bitC->startPtr = (BYTE*)startPtr;
861
- bitC->ptr = bitC->startPtr;
862
- bitC->endPtr = bitC->startPtr + dstCapacity - sizeof(bitC->bitContainer[0]);
863
- if (dstCapacity <= sizeof(bitC->bitContainer[0])) return ERROR(dstSize_tooSmall);
864
- return 0;
865
- }
866
-
867
- /*! HUF_addBits():
868
- * Adds the symbol stored in HUF_CElt elt to the bitstream.
869
- *
870
- * @param elt The element we're adding. This is a (nbBits, value) pair.
871
- * See the HUF_CStream_t docs for the format.
872
- * @param idx Insert into the bitstream at this idx.
873
- * @param kFast This is a template parameter. If the bitstream is guaranteed
874
- * to have at least 4 unused bits after this call it may be 1,
875
- * otherwise it must be 0. HUF_addBits() is faster when fast is set.
876
- */
877
- FORCE_INLINE_TEMPLATE void HUF_addBits(HUF_CStream_t* bitC, HUF_CElt elt, int idx, int kFast)
878
- {
879
- assert(idx <= 1);
880
- assert(HUF_getNbBits(elt) <= HUF_TABLELOG_ABSOLUTEMAX);
881
- /* This is efficient on x86-64 with BMI2 because shrx
882
- * only reads the low 6 bits of the register. The compiler
883
- * knows this and elides the mask. When fast is set,
884
- * every operation can use the same value loaded from elt.
885
- */
886
- bitC->bitContainer[idx] >>= HUF_getNbBits(elt);
887
- bitC->bitContainer[idx] |= kFast ? HUF_getValueFast(elt) : HUF_getValue(elt);
888
- /* We only read the low 8 bits of bitC->bitPos[idx] so it
889
- * doesn't matter that the high bits have noise from the value.
890
- */
891
- bitC->bitPos[idx] += HUF_getNbBitsFast(elt);
892
- assert((bitC->bitPos[idx] & 0xFF) <= HUF_BITS_IN_CONTAINER);
893
- /* The last 4-bits of elt are dirty if fast is set,
894
- * so we must not be overwriting bits that have already been
895
- * inserted into the bit container.
896
- */
897
- #if DEBUGLEVEL >= 1
898
- {
899
- size_t const nbBits = HUF_getNbBits(elt);
900
- size_t const dirtyBits = nbBits == 0 ? 0 : ZSTD_highbit32((U32)nbBits) + 1;
901
- (void)dirtyBits;
902
- /* Middle bits are 0. */
903
- assert(((elt >> dirtyBits) << (dirtyBits + nbBits)) == 0);
904
- /* We didn't overwrite any bits in the bit container. */
905
- assert(!kFast || (bitC->bitPos[idx] & 0xFF) <= HUF_BITS_IN_CONTAINER);
906
- (void)dirtyBits;
907
- }
908
- #endif
909
- }
910
-
911
- FORCE_INLINE_TEMPLATE void HUF_zeroIndex1(HUF_CStream_t* bitC)
912
- {
913
- bitC->bitContainer[1] = 0;
914
- bitC->bitPos[1] = 0;
915
- }
916
-
917
- /*! HUF_mergeIndex1() :
918
- * Merges the bit container @ index 1 into the bit container @ index 0
919
- * and zeros the bit container @ index 1.
920
- */
921
- FORCE_INLINE_TEMPLATE void HUF_mergeIndex1(HUF_CStream_t* bitC)
922
- {
923
- assert((bitC->bitPos[1] & 0xFF) < HUF_BITS_IN_CONTAINER);
924
- bitC->bitContainer[0] >>= (bitC->bitPos[1] & 0xFF);
925
- bitC->bitContainer[0] |= bitC->bitContainer[1];
926
- bitC->bitPos[0] += bitC->bitPos[1];
927
- assert((bitC->bitPos[0] & 0xFF) <= HUF_BITS_IN_CONTAINER);
928
- }
929
-
930
- /*! HUF_flushBits() :
931
- * Flushes the bits in the bit container @ index 0.
932
- *
933
- * @post bitPos will be < 8.
934
- * @param kFast If kFast is set then we must know a-priori that
935
- * the bit container will not overflow.
936
- */
937
- FORCE_INLINE_TEMPLATE void HUF_flushBits(HUF_CStream_t* bitC, int kFast)
938
- {
939
- /* The upper bits of bitPos are noisy, so we must mask by 0xFF. */
940
- size_t const nbBits = bitC->bitPos[0] & 0xFF;
941
- size_t const nbBytes = nbBits >> 3;
942
- /* The top nbBits bits of bitContainer are the ones we need. */
943
- size_t const bitContainer = bitC->bitContainer[0] >> (HUF_BITS_IN_CONTAINER - nbBits);
944
- /* Mask bitPos to account for the bytes we consumed. */
945
- bitC->bitPos[0] &= 7;
946
- assert(nbBits > 0);
947
- assert(nbBits <= sizeof(bitC->bitContainer[0]) * 8);
948
- assert(bitC->ptr <= bitC->endPtr);
949
- MEM_writeLEST(bitC->ptr, bitContainer);
950
- bitC->ptr += nbBytes;
951
- assert(!kFast || bitC->ptr <= bitC->endPtr);
952
- if (!kFast && bitC->ptr > bitC->endPtr) bitC->ptr = bitC->endPtr;
953
- /* bitContainer doesn't need to be modified because the leftover
954
- * bits are already the top bitPos bits. And we don't care about
955
- * noise in the lower values.
956
- */
957
- }
958
-
959
- /*! HUF_endMark()
960
- * @returns The Huffman stream end mark: A 1-bit value = 1.
961
- */
962
- static HUF_CElt HUF_endMark(void)
963
- {
964
- HUF_CElt endMark;
965
- HUF_setNbBits(&endMark, 1);
966
- HUF_setValue(&endMark, 1);
967
- return endMark;
968
- }
969
-
970
- /*! HUF_closeCStream() :
971
- * @return Size of CStream, in bytes,
972
- * or 0 if it could not fit into dstBuffer */
973
- static size_t HUF_closeCStream(HUF_CStream_t* bitC)
974
- {
975
- HUF_addBits(bitC, HUF_endMark(), /* idx */ 0, /* kFast */ 0);
976
- HUF_flushBits(bitC, /* kFast */ 0);
977
- {
978
- size_t const nbBits = bitC->bitPos[0] & 0xFF;
979
- if (bitC->ptr >= bitC->endPtr) return 0; /* overflow detected */
980
- return (size_t)(bitC->ptr - bitC->startPtr) + (nbBits > 0);
981
- }
982
- }
983
-
984
- FORCE_INLINE_TEMPLATE void
985
- HUF_encodeSymbol(HUF_CStream_t* bitCPtr, U32 symbol, const HUF_CElt* CTable, int idx, int fast)
986
- {
987
- HUF_addBits(bitCPtr, CTable[symbol], idx, fast);
988
- }
989
-
990
- FORCE_INLINE_TEMPLATE void
991
- HUF_compress1X_usingCTable_internal_body_loop(HUF_CStream_t* bitC,
992
- const BYTE* ip, size_t srcSize,
993
- const HUF_CElt* ct,
994
- int kUnroll, int kFastFlush, int kLastFast)
995
- {
996
- /* Join to kUnroll */
997
- int n = (int)srcSize;
998
- int rem = n % kUnroll;
999
- if (rem > 0) {
1000
- for (; rem > 0; --rem) {
1001
- HUF_encodeSymbol(bitC, ip[--n], ct, 0, /* fast */ 0);
1002
- }
1003
- HUF_flushBits(bitC, kFastFlush);
1004
- }
1005
- assert(n % kUnroll == 0);
1006
-
1007
- /* Join to 2 * kUnroll */
1008
- if (n % (2 * kUnroll)) {
1009
- int u;
1010
- for (u = 1; u < kUnroll; ++u) {
1011
- HUF_encodeSymbol(bitC, ip[n - u], ct, 0, 1);
1012
- }
1013
- HUF_encodeSymbol(bitC, ip[n - kUnroll], ct, 0, kLastFast);
1014
- HUF_flushBits(bitC, kFastFlush);
1015
- n -= kUnroll;
1016
- }
1017
- assert(n % (2 * kUnroll) == 0);
1018
-
1019
- for (; n>0; n-= 2 * kUnroll) {
1020
- /* Encode kUnroll symbols into the bitstream @ index 0. */
1021
- int u;
1022
- for (u = 1; u < kUnroll; ++u) {
1023
- HUF_encodeSymbol(bitC, ip[n - u], ct, /* idx */ 0, /* fast */ 1);
1024
- }
1025
- HUF_encodeSymbol(bitC, ip[n - kUnroll], ct, /* idx */ 0, /* fast */ kLastFast);
1026
- HUF_flushBits(bitC, kFastFlush);
1027
- /* Encode kUnroll symbols into the bitstream @ index 1.
1028
- * This allows us to start filling the bit container
1029
- * without any data dependencies.
1030
- */
1031
- HUF_zeroIndex1(bitC);
1032
- for (u = 1; u < kUnroll; ++u) {
1033
- HUF_encodeSymbol(bitC, ip[n - kUnroll - u], ct, /* idx */ 1, /* fast */ 1);
1034
- }
1035
- HUF_encodeSymbol(bitC, ip[n - kUnroll - kUnroll], ct, /* idx */ 1, /* fast */ kLastFast);
1036
- /* Merge bitstream @ index 1 into the bitstream @ index 0 */
1037
- HUF_mergeIndex1(bitC);
1038
- HUF_flushBits(bitC, kFastFlush);
1039
- }
1040
- assert(n == 0);
1041
-
1042
- }
1043
-
1044
- /**
1045
- * Returns a tight upper bound on the output space needed by Huffman
1046
- * with 8 bytes buffer to handle over-writes. If the output is at least
1047
- * this large we don't need to do bounds checks during Huffman encoding.
1048
- */
1049
- static size_t HUF_tightCompressBound(size_t srcSize, size_t tableLog)
1050
- {
1051
- return ((srcSize * tableLog) >> 3) + 8;
1052
- }
1053
-
1054
-
1055
- FORCE_INLINE_TEMPLATE size_t
1056
- HUF_compress1X_usingCTable_internal_body(void* dst, size_t dstSize,
1057
- const void* src, size_t srcSize,
1058
- const HUF_CElt* CTable)
1059
- {
1060
- U32 const tableLog = HUF_readCTableHeader(CTable).tableLog;
1061
- HUF_CElt const* ct = CTable + 1;
1062
- const BYTE* ip = (const BYTE*) src;
1063
- BYTE* const ostart = (BYTE*)dst;
1064
- BYTE* const oend = ostart + dstSize;
1065
- HUF_CStream_t bitC;
1066
-
1067
- /* init */
1068
- if (dstSize < 8) return 0; /* not enough space to compress */
1069
- { BYTE* op = ostart;
1070
- size_t const initErr = HUF_initCStream(&bitC, op, (size_t)(oend-op));
1071
- if (HUF_isError(initErr)) return 0; }
1072
-
1073
- if (dstSize < HUF_tightCompressBound(srcSize, (size_t)tableLog) || tableLog > 11)
1074
- HUF_compress1X_usingCTable_internal_body_loop(&bitC, ip, srcSize, ct, /* kUnroll */ MEM_32bits() ? 2 : 4, /* kFast */ 0, /* kLastFast */ 0);
1075
- else {
1076
- if (MEM_32bits()) {
1077
- switch (tableLog) {
1078
- case 11:
1079
- HUF_compress1X_usingCTable_internal_body_loop(&bitC, ip, srcSize, ct, /* kUnroll */ 2, /* kFastFlush */ 1, /* kLastFast */ 0);
1080
- break;
1081
- case 10: ZSTD_FALLTHROUGH;
1082
- case 9: ZSTD_FALLTHROUGH;
1083
- case 8:
1084
- HUF_compress1X_usingCTable_internal_body_loop(&bitC, ip, srcSize, ct, /* kUnroll */ 2, /* kFastFlush */ 1, /* kLastFast */ 1);
1085
- break;
1086
- case 7: ZSTD_FALLTHROUGH;
1087
- default:
1088
- HUF_compress1X_usingCTable_internal_body_loop(&bitC, ip, srcSize, ct, /* kUnroll */ 3, /* kFastFlush */ 1, /* kLastFast */ 1);
1089
- break;
1090
- }
1091
- } else {
1092
- switch (tableLog) {
1093
- case 11:
1094
- HUF_compress1X_usingCTable_internal_body_loop(&bitC, ip, srcSize, ct, /* kUnroll */ 5, /* kFastFlush */ 1, /* kLastFast */ 0);
1095
- break;
1096
- case 10:
1097
- HUF_compress1X_usingCTable_internal_body_loop(&bitC, ip, srcSize, ct, /* kUnroll */ 5, /* kFastFlush */ 1, /* kLastFast */ 1);
1098
- break;
1099
- case 9:
1100
- HUF_compress1X_usingCTable_internal_body_loop(&bitC, ip, srcSize, ct, /* kUnroll */ 6, /* kFastFlush */ 1, /* kLastFast */ 0);
1101
- break;
1102
- case 8:
1103
- HUF_compress1X_usingCTable_internal_body_loop(&bitC, ip, srcSize, ct, /* kUnroll */ 7, /* kFastFlush */ 1, /* kLastFast */ 0);
1104
- break;
1105
- case 7:
1106
- HUF_compress1X_usingCTable_internal_body_loop(&bitC, ip, srcSize, ct, /* kUnroll */ 8, /* kFastFlush */ 1, /* kLastFast */ 0);
1107
- break;
1108
- case 6: ZSTD_FALLTHROUGH;
1109
- default:
1110
- HUF_compress1X_usingCTable_internal_body_loop(&bitC, ip, srcSize, ct, /* kUnroll */ 9, /* kFastFlush */ 1, /* kLastFast */ 1);
1111
- break;
1112
- }
1113
- }
1114
- }
1115
- assert(bitC.ptr <= bitC.endPtr);
1116
-
1117
- return HUF_closeCStream(&bitC);
1118
- }
1119
-
1120
- #if DYNAMIC_BMI2
1121
-
1122
- static BMI2_TARGET_ATTRIBUTE size_t
1123
- HUF_compress1X_usingCTable_internal_bmi2(void* dst, size_t dstSize,
1124
- const void* src, size_t srcSize,
1125
- const HUF_CElt* CTable)
1126
- {
1127
- return HUF_compress1X_usingCTable_internal_body(dst, dstSize, src, srcSize, CTable);
1128
- }
1129
-
1130
- static size_t
1131
- HUF_compress1X_usingCTable_internal_default(void* dst, size_t dstSize,
1132
- const void* src, size_t srcSize,
1133
- const HUF_CElt* CTable)
1134
- {
1135
- return HUF_compress1X_usingCTable_internal_body(dst, dstSize, src, srcSize, CTable);
1136
- }
1137
-
1138
- static size_t
1139
- HUF_compress1X_usingCTable_internal(void* dst, size_t dstSize,
1140
- const void* src, size_t srcSize,
1141
- const HUF_CElt* CTable, const int flags)
1142
- {
1143
- if (flags & HUF_flags_bmi2) {
1144
- return HUF_compress1X_usingCTable_internal_bmi2(dst, dstSize, src, srcSize, CTable);
1145
- }
1146
- return HUF_compress1X_usingCTable_internal_default(dst, dstSize, src, srcSize, CTable);
1147
- }
1148
-
1149
- #else
1150
-
1151
- static size_t
1152
- HUF_compress1X_usingCTable_internal(void* dst, size_t dstSize,
1153
- const void* src, size_t srcSize,
1154
- const HUF_CElt* CTable, const int flags)
1155
- {
1156
- (void)flags;
1157
- return HUF_compress1X_usingCTable_internal_body(dst, dstSize, src, srcSize, CTable);
1158
- }
1159
-
1160
- #endif
1161
-
1162
- size_t HUF_compress1X_usingCTable(void* dst, size_t dstSize, const void* src, size_t srcSize, const HUF_CElt* CTable, int flags)
1163
- {
1164
- return HUF_compress1X_usingCTable_internal(dst, dstSize, src, srcSize, CTable, flags);
1165
- }
1166
-
1167
- static size_t
1168
- HUF_compress4X_usingCTable_internal(void* dst, size_t dstSize,
1169
- const void* src, size_t srcSize,
1170
- const HUF_CElt* CTable, int flags)
1171
- {
1172
- size_t const segmentSize = (srcSize+3)/4; /* first 3 segments */
1173
- const BYTE* ip = (const BYTE*) src;
1174
- const BYTE* const iend = ip + srcSize;
1175
- BYTE* const ostart = (BYTE*) dst;
1176
- BYTE* const oend = ostart + dstSize;
1177
- BYTE* op = ostart;
1178
-
1179
- if (dstSize < 6 + 1 + 1 + 1 + 8) return 0; /* minimum space to compress successfully */
1180
- if (srcSize < 12) return 0; /* no saving possible : too small input */
1181
- op += 6; /* jumpTable */
1182
-
1183
- assert(op <= oend);
1184
- { CHECK_V_F(cSize, HUF_compress1X_usingCTable_internal(op, (size_t)(oend-op), ip, segmentSize, CTable, flags) );
1185
- if (cSize == 0 || cSize > 65535) return 0;
1186
- MEM_writeLE16(ostart, (U16)cSize);
1187
- op += cSize;
1188
- }
1189
-
1190
- ip += segmentSize;
1191
- assert(op <= oend);
1192
- { CHECK_V_F(cSize, HUF_compress1X_usingCTable_internal(op, (size_t)(oend-op), ip, segmentSize, CTable, flags) );
1193
- if (cSize == 0 || cSize > 65535) return 0;
1194
- MEM_writeLE16(ostart+2, (U16)cSize);
1195
- op += cSize;
1196
- }
1197
-
1198
- ip += segmentSize;
1199
- assert(op <= oend);
1200
- { CHECK_V_F(cSize, HUF_compress1X_usingCTable_internal(op, (size_t)(oend-op), ip, segmentSize, CTable, flags) );
1201
- if (cSize == 0 || cSize > 65535) return 0;
1202
- MEM_writeLE16(ostart+4, (U16)cSize);
1203
- op += cSize;
1204
- }
1205
-
1206
- ip += segmentSize;
1207
- assert(op <= oend);
1208
- assert(ip <= iend);
1209
- { CHECK_V_F(cSize, HUF_compress1X_usingCTable_internal(op, (size_t)(oend-op), ip, (size_t)(iend-ip), CTable, flags) );
1210
- if (cSize == 0 || cSize > 65535) return 0;
1211
- op += cSize;
1212
- }
1213
-
1214
- return (size_t)(op-ostart);
1215
- }
1216
-
1217
- size_t HUF_compress4X_usingCTable(void* dst, size_t dstSize, const void* src, size_t srcSize, const HUF_CElt* CTable, int flags)
1218
- {
1219
- return HUF_compress4X_usingCTable_internal(dst, dstSize, src, srcSize, CTable, flags);
1220
- }
1221
-
1222
- typedef enum { HUF_singleStream, HUF_fourStreams } HUF_nbStreams_e;
1223
-
1224
- static size_t HUF_compressCTable_internal(
1225
- BYTE* const ostart, BYTE* op, BYTE* const oend,
1226
- const void* src, size_t srcSize,
1227
- HUF_nbStreams_e nbStreams, const HUF_CElt* CTable, const int flags)
1228
- {
1229
- size_t const cSize = (nbStreams==HUF_singleStream) ?
1230
- HUF_compress1X_usingCTable_internal(op, (size_t)(oend - op), src, srcSize, CTable, flags) :
1231
- HUF_compress4X_usingCTable_internal(op, (size_t)(oend - op), src, srcSize, CTable, flags);
1232
- if (HUF_isError(cSize)) { return cSize; }
1233
- if (cSize==0) { return 0; } /* uncompressible */
1234
- op += cSize;
1235
- /* check compressibility */
1236
- assert(op >= ostart);
1237
- if ((size_t)(op-ostart) >= srcSize-1) { return 0; }
1238
- return (size_t)(op-ostart);
1239
- }
1240
-
1241
- typedef struct {
1242
- unsigned count[HUF_SYMBOLVALUE_MAX + 1];
1243
- HUF_CElt CTable[HUF_CTABLE_SIZE_ST(HUF_SYMBOLVALUE_MAX)];
1244
- union {
1245
- HUF_buildCTable_wksp_tables buildCTable_wksp;
1246
- HUF_WriteCTableWksp writeCTable_wksp;
1247
- U32 hist_wksp[HIST_WKSP_SIZE_U32];
1248
- } wksps;
1249
- } HUF_compress_tables_t;
1250
-
1251
- #define SUSPECT_INCOMPRESSIBLE_SAMPLE_SIZE 4096
1252
- #define SUSPECT_INCOMPRESSIBLE_SAMPLE_RATIO 10 /* Must be >= 2 */
1253
-
1254
- unsigned HUF_cardinality(const unsigned* count, unsigned maxSymbolValue)
1255
- {
1256
- unsigned cardinality = 0;
1257
- unsigned i;
1258
-
1259
- for (i = 0; i < maxSymbolValue + 1; i++) {
1260
- if (count[i] != 0) cardinality += 1;
1261
- }
1262
-
1263
- return cardinality;
1264
- }
1265
-
1266
- unsigned HUF_minTableLog(unsigned symbolCardinality)
1267
- {
1268
- U32 minBitsSymbols = ZSTD_highbit32(symbolCardinality) + 1;
1269
- return minBitsSymbols;
1270
- }
1271
-
1272
- unsigned HUF_optimalTableLog(
1273
- unsigned maxTableLog,
1274
- size_t srcSize,
1275
- unsigned maxSymbolValue,
1276
- void* workSpace, size_t wkspSize,
1277
- HUF_CElt* table,
1278
- const unsigned* count,
1279
- int flags)
1280
- {
1281
- assert(srcSize > 1); /* Not supported, RLE should be used instead */
1282
- assert(wkspSize >= sizeof(HUF_buildCTable_wksp_tables));
1283
-
1284
- if (!(flags & HUF_flags_optimalDepth)) {
1285
- /* cheap evaluation, based on FSE */
1286
- return FSE_optimalTableLog_internal(maxTableLog, srcSize, maxSymbolValue, 1);
1287
- }
1288
-
1289
- { BYTE* dst = (BYTE*)workSpace + sizeof(HUF_WriteCTableWksp);
1290
- size_t dstSize = wkspSize - sizeof(HUF_WriteCTableWksp);
1291
- size_t hSize, newSize;
1292
- const unsigned symbolCardinality = HUF_cardinality(count, maxSymbolValue);
1293
- const unsigned minTableLog = HUF_minTableLog(symbolCardinality);
1294
- size_t optSize = ((size_t) ~0) - 1;
1295
- unsigned optLog = maxTableLog, optLogGuess;
1296
-
1297
- DEBUGLOG(6, "HUF_optimalTableLog: probing huf depth (srcSize=%zu)", srcSize);
1298
-
1299
- /* Search until size increases */
1300
- for (optLogGuess = minTableLog; optLogGuess <= maxTableLog; optLogGuess++) {
1301
- DEBUGLOG(7, "checking for huffLog=%u", optLogGuess);
1302
-
1303
- { size_t maxBits = HUF_buildCTable_wksp(table, count, maxSymbolValue, optLogGuess, workSpace, wkspSize);
1304
- if (ERR_isError(maxBits)) continue;
1305
-
1306
- if (maxBits < optLogGuess && optLogGuess > minTableLog) break;
1307
-
1308
- hSize = HUF_writeCTable_wksp(dst, dstSize, table, maxSymbolValue, (U32)maxBits, workSpace, wkspSize);
1309
- }
1310
-
1311
- if (ERR_isError(hSize)) continue;
1312
-
1313
- newSize = HUF_estimateCompressedSize(table, count, maxSymbolValue) + hSize;
1314
-
1315
- if (newSize > optSize + 1) {
1316
- break;
1317
- }
1318
-
1319
- if (newSize < optSize) {
1320
- optSize = newSize;
1321
- optLog = optLogGuess;
1322
- }
1323
- }
1324
- assert(optLog <= HUF_TABLELOG_MAX);
1325
- return optLog;
1326
- }
1327
- }
1328
-
1329
- /* HUF_compress_internal() :
1330
- * `workSpace_align4` must be aligned on 4-bytes boundaries,
1331
- * and occupies the same space as a table of HUF_WORKSPACE_SIZE_U64 unsigned */
1332
- static size_t
1333
- HUF_compress_internal (void* dst, size_t dstSize,
1334
- const void* src, size_t srcSize,
1335
- unsigned maxSymbolValue, unsigned huffLog,
1336
- HUF_nbStreams_e nbStreams,
1337
- void* workSpace, size_t wkspSize,
1338
- HUF_CElt* oldHufTable, HUF_repeat* repeat, int flags)
1339
- {
1340
- HUF_compress_tables_t* const table = (HUF_compress_tables_t*)HUF_alignUpWorkspace(workSpace, &wkspSize, ZSTD_ALIGNOF(size_t));
1341
- BYTE* const ostart = (BYTE*)dst;
1342
- BYTE* const oend = ostart + dstSize;
1343
- BYTE* op = ostart;
1344
-
1345
- DEBUGLOG(5, "HUF_compress_internal (srcSize=%zu)", srcSize);
1346
- HUF_STATIC_ASSERT(sizeof(*table) + HUF_WORKSPACE_MAX_ALIGNMENT <= HUF_WORKSPACE_SIZE);
1347
-
1348
- /* checks & inits */
1349
- if (wkspSize < sizeof(*table)) return ERROR(workSpace_tooSmall);
1350
- if (!srcSize) return 0; /* Uncompressed */
1351
- if (!dstSize) return 0; /* cannot fit anything within dst budget */
1352
- if (srcSize > HUF_BLOCKSIZE_MAX) return ERROR(srcSize_wrong); /* current block size limit */
1353
- if (huffLog > HUF_TABLELOG_MAX) return ERROR(tableLog_tooLarge);
1354
- if (maxSymbolValue > HUF_SYMBOLVALUE_MAX) return ERROR(maxSymbolValue_tooLarge);
1355
- if (!maxSymbolValue) maxSymbolValue = HUF_SYMBOLVALUE_MAX;
1356
- if (!huffLog) huffLog = HUF_TABLELOG_DEFAULT;
1357
-
1358
- /* Heuristic : If old table is valid, use it for small inputs */
1359
- if ((flags & HUF_flags_preferRepeat) && repeat && *repeat == HUF_repeat_valid) {
1360
- return HUF_compressCTable_internal(ostart, op, oend,
1361
- src, srcSize,
1362
- nbStreams, oldHufTable, flags);
1363
- }
1364
-
1365
- /* If uncompressible data is suspected, do a smaller sampling first */
1366
- DEBUG_STATIC_ASSERT(SUSPECT_INCOMPRESSIBLE_SAMPLE_RATIO >= 2);
1367
- if ((flags & HUF_flags_suspectUncompressible) && srcSize >= (SUSPECT_INCOMPRESSIBLE_SAMPLE_SIZE * SUSPECT_INCOMPRESSIBLE_SAMPLE_RATIO)) {
1368
- size_t largestTotal = 0;
1369
- DEBUGLOG(5, "input suspected incompressible : sampling to check");
1370
- { unsigned maxSymbolValueBegin = maxSymbolValue;
1371
- CHECK_V_F(largestBegin, HIST_count_simple (table->count, &maxSymbolValueBegin, (const BYTE*)src, SUSPECT_INCOMPRESSIBLE_SAMPLE_SIZE) );
1372
- largestTotal += largestBegin;
1373
- }
1374
- { unsigned maxSymbolValueEnd = maxSymbolValue;
1375
- CHECK_V_F(largestEnd, HIST_count_simple (table->count, &maxSymbolValueEnd, (const BYTE*)src + srcSize - SUSPECT_INCOMPRESSIBLE_SAMPLE_SIZE, SUSPECT_INCOMPRESSIBLE_SAMPLE_SIZE) );
1376
- largestTotal += largestEnd;
1377
- }
1378
- if (largestTotal <= ((2 * SUSPECT_INCOMPRESSIBLE_SAMPLE_SIZE) >> 7)+4) return 0; /* heuristic : probably not compressible enough */
1379
- }
1380
-
1381
- /* Scan input and build symbol stats */
1382
- { CHECK_V_F(largest, HIST_count_wksp (table->count, &maxSymbolValue, (const BYTE*)src, srcSize, table->wksps.hist_wksp, sizeof(table->wksps.hist_wksp)) );
1383
- if (largest == srcSize) { *ostart = ((const BYTE*)src)[0]; return 1; } /* single symbol, rle */
1384
- if (largest <= (srcSize >> 7)+4) return 0; /* heuristic : probably not compressible enough */
1385
- }
1386
- DEBUGLOG(6, "histogram detail completed (%zu symbols)", showU32(table->count, maxSymbolValue+1));
1387
-
1388
- /* Check validity of previous table */
1389
- if ( repeat
1390
- && *repeat == HUF_repeat_check
1391
- && !HUF_validateCTable(oldHufTable, table->count, maxSymbolValue)) {
1392
- *repeat = HUF_repeat_none;
1393
- }
1394
- /* Heuristic : use existing table for small inputs */
1395
- if ((flags & HUF_flags_preferRepeat) && repeat && *repeat != HUF_repeat_none) {
1396
- return HUF_compressCTable_internal(ostart, op, oend,
1397
- src, srcSize,
1398
- nbStreams, oldHufTable, flags);
1399
- }
1400
-
1401
- /* Build Huffman Tree */
1402
- huffLog = HUF_optimalTableLog(huffLog, srcSize, maxSymbolValue, &table->wksps, sizeof(table->wksps), table->CTable, table->count, flags);
1403
- { size_t const maxBits = HUF_buildCTable_wksp(table->CTable, table->count,
1404
- maxSymbolValue, huffLog,
1405
- &table->wksps.buildCTable_wksp, sizeof(table->wksps.buildCTable_wksp));
1406
- CHECK_F(maxBits);
1407
- huffLog = (U32)maxBits;
1408
- DEBUGLOG(6, "bit distribution completed (%zu symbols)", showCTableBits(table->CTable + 1, maxSymbolValue+1));
1409
- }
1410
-
1411
- /* Write table description header */
1412
- { CHECK_V_F(hSize, HUF_writeCTable_wksp(op, dstSize, table->CTable, maxSymbolValue, huffLog,
1413
- &table->wksps.writeCTable_wksp, sizeof(table->wksps.writeCTable_wksp)) );
1414
- /* Check if using previous huffman table is beneficial */
1415
- if (repeat && *repeat != HUF_repeat_none) {
1416
- size_t const oldSize = HUF_estimateCompressedSize(oldHufTable, table->count, maxSymbolValue);
1417
- size_t const newSize = HUF_estimateCompressedSize(table->CTable, table->count, maxSymbolValue);
1418
- if (oldSize <= hSize + newSize || hSize + 12 >= srcSize) {
1419
- return HUF_compressCTable_internal(ostart, op, oend,
1420
- src, srcSize,
1421
- nbStreams, oldHufTable, flags);
1422
- } }
1423
-
1424
- /* Use the new huffman table */
1425
- if (hSize + 12ul >= srcSize) { return 0; }
1426
- op += hSize;
1427
- if (repeat) { *repeat = HUF_repeat_none; }
1428
- if (oldHufTable)
1429
- ZSTD_memcpy(oldHufTable, table->CTable, sizeof(table->CTable)); /* Save new table */
1430
- }
1431
- return HUF_compressCTable_internal(ostart, op, oend,
1432
- src, srcSize,
1433
- nbStreams, table->CTable, flags);
1434
- }
1435
-
1436
- size_t HUF_compress1X_repeat (void* dst, size_t dstSize,
1437
- const void* src, size_t srcSize,
1438
- unsigned maxSymbolValue, unsigned huffLog,
1439
- void* workSpace, size_t wkspSize,
1440
- HUF_CElt* hufTable, HUF_repeat* repeat, int flags)
1441
- {
1442
- DEBUGLOG(5, "HUF_compress1X_repeat (srcSize = %zu)", srcSize);
1443
- return HUF_compress_internal(dst, dstSize, src, srcSize,
1444
- maxSymbolValue, huffLog, HUF_singleStream,
1445
- workSpace, wkspSize, hufTable,
1446
- repeat, flags);
1447
- }
1448
-
1449
- /* HUF_compress4X_repeat():
1450
- * compress input using 4 streams.
1451
- * consider skipping quickly
1452
- * reuse an existing huffman compression table */
1453
- size_t HUF_compress4X_repeat (void* dst, size_t dstSize,
1454
- const void* src, size_t srcSize,
1455
- unsigned maxSymbolValue, unsigned huffLog,
1456
- void* workSpace, size_t wkspSize,
1457
- HUF_CElt* hufTable, HUF_repeat* repeat, int flags)
1458
- {
1459
- DEBUGLOG(5, "HUF_compress4X_repeat (srcSize = %zu)", srcSize);
1460
- return HUF_compress_internal(dst, dstSize, src, srcSize,
1461
- maxSymbolValue, huffLog, HUF_fourStreams,
1462
- workSpace, wkspSize,
1463
- hufTable, repeat, flags);
1464
- }