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.
- package/.gitmodules +3 -0
- package/dist/webview +0 -0
- package/package.json +1 -1
- package/src/cli/build/electrobun +0 -0
- package/example/assets/electrobun-logo-32-template.png +0 -0
- package/example/buildScript.ts +0 -1
- package/example/bun.lockb +0 -0
- package/example/electrobun.config +0 -48
- package/example/icon.iconset/icon_128x128.png +0 -0
- package/example/icon.iconset/icon_128x128@2x.png +0 -0
- package/example/icon.iconset/icon_16x16.png +0 -0
- package/example/icon.iconset/icon_16x16@2x.png +0 -0
- package/example/icon.iconset/icon_256x256.png +0 -0
- package/example/icon.iconset/icon_256x256@2x.png +0 -0
- package/example/icon.iconset/icon_32x32.png +0 -0
- package/example/icon.iconset/icon_32x32@2x.png +0 -0
- package/example/icon.iconset/icon_512x512.png +0 -0
- package/example/icon.iconset/icon_512x512@2x.png +0 -0
- package/example/package-lock.json +0 -32
- package/example/package.json +0 -11
- package/example/readme.md +0 -0
- package/example/src/bun/index.ts +0 -403
- package/example/src/mainview/index.css +0 -4
- package/example/src/mainview/index.html +0 -13
- package/example/src/mainview/index.ts +0 -45
- package/example/src/mainview/rpc.ts +0 -36
- package/example/src/myextension/preload.ts +0 -15
- package/example/src/myextension/rpc.ts +0 -15
- package/example/src/webviewtag/electrobun.png +0 -0
- package/example/src/webviewtag/index.html +0 -94
- package/example/src/webviewtag/index.ts +0 -26
- package/src/bsdiff/bsdiff.zig +0 -842
- package/src/bsdiff/bspatch.zig +0 -253
- package/src/bsdiff/build.zig +0 -73
- package/src/bsdiff/zig-out/bin/bsdiff +0 -0
- package/src/bsdiff/zig-out/bin/bspatch +0 -0
- package/src/bsdiff/zig-out/lib/libzstd.a +0 -0
- package/src/bsdiff/zstd/.buckconfig +0 -9
- package/src/bsdiff/zstd/.buckversion +0 -1
- package/src/bsdiff/zstd/.circleci/config.yml +0 -123
- package/src/bsdiff/zstd/.circleci/images/primary/Dockerfile +0 -9
- package/src/bsdiff/zstd/.cirrus.yml +0 -10
- package/src/bsdiff/zstd/.gitattributes +0 -21
- package/src/bsdiff/zstd/.github/ISSUE_TEMPLATE/bug_report.md +0 -35
- package/src/bsdiff/zstd/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
- package/src/bsdiff/zstd/.github/dependabot.yml +0 -6
- package/src/bsdiff/zstd/.github/workflows/commit.yml +0 -89
- package/src/bsdiff/zstd/.github/workflows/dev-long-tests.yml +0 -297
- package/src/bsdiff/zstd/.github/workflows/dev-short-tests.yml +0 -633
- package/src/bsdiff/zstd/.github/workflows/nightly.yml +0 -65
- package/src/bsdiff/zstd/.github/workflows/publish-release-artifacts.yml +0 -73
- package/src/bsdiff/zstd/.github/workflows/scorecards.yml +0 -64
- package/src/bsdiff/zstd/.github/workflows/windows-artifacts.yml +0 -58
- package/src/bsdiff/zstd/CHANGELOG +0 -837
- package/src/bsdiff/zstd/CODE_OF_CONDUCT.md +0 -5
- package/src/bsdiff/zstd/CONTRIBUTING.md +0 -489
- package/src/bsdiff/zstd/COPYING +0 -339
- package/src/bsdiff/zstd/LICENSE +0 -30
- package/src/bsdiff/zstd/Makefile +0 -457
- package/src/bsdiff/zstd/Package.swift +0 -36
- package/src/bsdiff/zstd/README.md +0 -227
- package/src/bsdiff/zstd/SECURITY.md +0 -15
- package/src/bsdiff/zstd/TESTING.md +0 -43
- package/src/bsdiff/zstd/build/LICENSE +0 -0
- package/src/bsdiff/zstd/build/README.md +0 -56
- package/src/bsdiff/zstd/build/VS2008/fullbench/fullbench.vcproj +0 -549
- package/src/bsdiff/zstd/build/VS2008/fuzzer/fuzzer.vcproj +0 -585
- package/src/bsdiff/zstd/build/VS2008/zstd/zstd.vcproj +0 -677
- package/src/bsdiff/zstd/build/VS2008/zstd.sln +0 -56
- package/src/bsdiff/zstd/build/VS2008/zstdlib/zstdlib.vcproj +0 -635
- package/src/bsdiff/zstd/build/VS2010/CompileAsCpp.props +0 -8
- package/src/bsdiff/zstd/build/VS2010/datagen/datagen.vcxproj +0 -170
- package/src/bsdiff/zstd/build/VS2010/fullbench/fullbench.vcxproj +0 -218
- package/src/bsdiff/zstd/build/VS2010/fullbench-dll/fullbench-dll.vcxproj +0 -189
- package/src/bsdiff/zstd/build/VS2010/fuzzer/fuzzer.vcxproj +0 -223
- package/src/bsdiff/zstd/build/VS2010/libzstd/libzstd.vcxproj +0 -242
- package/src/bsdiff/zstd/build/VS2010/libzstd-dll/libzstd-dll.rc +0 -51
- package/src/bsdiff/zstd/build/VS2010/libzstd-dll/libzstd-dll.vcxproj +0 -249
- package/src/bsdiff/zstd/build/VS2010/zstd/zstd.rc +0 -51
- package/src/bsdiff/zstd/build/VS2010/zstd/zstd.vcxproj +0 -265
- package/src/bsdiff/zstd/build/VS2010/zstd.sln +0 -89
- package/src/bsdiff/zstd/build/VS_scripts/README.md +0 -64
- package/src/bsdiff/zstd/build/VS_scripts/build.VS2010.cmd +0 -7
- package/src/bsdiff/zstd/build/VS_scripts/build.VS2012.cmd +0 -6
- package/src/bsdiff/zstd/build/VS_scripts/build.VS2013.cmd +0 -7
- package/src/bsdiff/zstd/build/VS_scripts/build.VS2015.cmd +0 -7
- package/src/bsdiff/zstd/build/VS_scripts/build.VS2017.cmd +0 -7
- package/src/bsdiff/zstd/build/VS_scripts/build.VS2017Community.cmd +0 -7
- package/src/bsdiff/zstd/build/VS_scripts/build.VS2017Enterprise.cmd +0 -7
- package/src/bsdiff/zstd/build/VS_scripts/build.VS2017Professional.cmd +0 -7
- package/src/bsdiff/zstd/build/VS_scripts/build.generic.cmd +0 -72
- package/src/bsdiff/zstd/build/cmake/CMakeLists.txt +0 -216
- package/src/bsdiff/zstd/build/cmake/CMakeModules/AddZstdCompilationFlags.cmake +0 -121
- package/src/bsdiff/zstd/build/cmake/CMakeModules/FindLibLZ4.cmake +0 -49
- package/src/bsdiff/zstd/build/cmake/CMakeModules/GetZstdLibraryVersion.cmake +0 -10
- package/src/bsdiff/zstd/build/cmake/CMakeModules/JoinPaths.cmake +0 -23
- package/src/bsdiff/zstd/build/cmake/README.md +0 -136
- package/src/bsdiff/zstd/build/cmake/contrib/CMakeLists.txt +0 -13
- package/src/bsdiff/zstd/build/cmake/contrib/gen_html/CMakeLists.txt +0 -30
- package/src/bsdiff/zstd/build/cmake/contrib/pzstd/CMakeLists.txt +0 -39
- package/src/bsdiff/zstd/build/cmake/lib/CMakeLists.txt +0 -253
- package/src/bsdiff/zstd/build/cmake/lib/cmake_uninstall.cmake.in +0 -22
- package/src/bsdiff/zstd/build/cmake/programs/CMakeLists.txt +0 -144
- package/src/bsdiff/zstd/build/cmake/tests/CMakeLists.txt +0 -118
- package/src/bsdiff/zstd/build/cmake/zstdConfig.cmake.in +0 -10
- package/src/bsdiff/zstd/build/meson/GetZstdLibraryVersion.py +0 -39
- package/src/bsdiff/zstd/build/meson/InstallSymlink.py +0 -55
- package/src/bsdiff/zstd/build/meson/README.md +0 -38
- package/src/bsdiff/zstd/build/meson/contrib/gen_html/meson.build +0 -30
- package/src/bsdiff/zstd/build/meson/contrib/meson.build +0 -12
- package/src/bsdiff/zstd/build/meson/contrib/pzstd/meson.build +0 -25
- package/src/bsdiff/zstd/build/meson/lib/meson.build +0 -167
- package/src/bsdiff/zstd/build/meson/meson.build +0 -145
- package/src/bsdiff/zstd/build/meson/meson_options.txt +0 -36
- package/src/bsdiff/zstd/build/meson/programs/meson.build +0 -124
- package/src/bsdiff/zstd/build/meson/tests/meson.build +0 -217
- package/src/bsdiff/zstd/build/meson/tests/valgrindTest.py +0 -90
- package/src/bsdiff/zstd/build/single_file_libs/README.md +0 -33
- package/src/bsdiff/zstd/build/single_file_libs/build_decoder_test.sh +0 -91
- package/src/bsdiff/zstd/build/single_file_libs/build_library_test.sh +0 -97
- package/src/bsdiff/zstd/build/single_file_libs/combine.py +0 -234
- package/src/bsdiff/zstd/build/single_file_libs/combine.sh +0 -249
- package/src/bsdiff/zstd/build/single_file_libs/create_single_file_decoder.sh +0 -19
- package/src/bsdiff/zstd/build/single_file_libs/create_single_file_library.sh +0 -19
- package/src/bsdiff/zstd/build/single_file_libs/examples/README.md +0 -11
- package/src/bsdiff/zstd/build/single_file_libs/examples/emscripten.c +0 -340
- package/src/bsdiff/zstd/build/single_file_libs/examples/roundtrip.c +0 -83
- package/src/bsdiff/zstd/build/single_file_libs/examples/shell.html +0 -31
- package/src/bsdiff/zstd/build/single_file_libs/examples/simple.c +0 -75
- package/src/bsdiff/zstd/build/single_file_libs/examples/testcard-dxt1.inl +0 -2731
- package/src/bsdiff/zstd/build/single_file_libs/examples/testcard-zstd.inl +0 -261
- package/src/bsdiff/zstd/build/single_file_libs/examples/testcard.png +0 -0
- package/src/bsdiff/zstd/build/single_file_libs/zstd-in.c +0 -90
- package/src/bsdiff/zstd/build/single_file_libs/zstddeclib-in.c +0 -62
- package/src/bsdiff/zstd/contrib/VS2005/README.md +0 -3
- package/src/bsdiff/zstd/contrib/VS2005/fullbench/fullbench.vcproj +0 -440
- package/src/bsdiff/zstd/contrib/VS2005/fuzzer/fuzzer.vcproj +0 -488
- package/src/bsdiff/zstd/contrib/VS2005/zstd/zstd.vcproj +0 -552
- package/src/bsdiff/zstd/contrib/VS2005/zstd.sln +0 -55
- package/src/bsdiff/zstd/contrib/VS2005/zstdlib/zstdlib.vcproj +0 -546
- package/src/bsdiff/zstd/contrib/cleanTabs +0 -2
- package/src/bsdiff/zstd/contrib/diagnose_corruption/Makefile +0 -35
- package/src/bsdiff/zstd/contrib/diagnose_corruption/check_flipped_bits.c +0 -400
- package/src/bsdiff/zstd/contrib/docker/Dockerfile +0 -20
- package/src/bsdiff/zstd/contrib/docker/README.md +0 -20
- package/src/bsdiff/zstd/contrib/externalSequenceProducer/Makefile +0 -40
- package/src/bsdiff/zstd/contrib/externalSequenceProducer/README.md +0 -14
- package/src/bsdiff/zstd/contrib/externalSequenceProducer/main.c +0 -107
- package/src/bsdiff/zstd/contrib/externalSequenceProducer/sequence_producer.c +0 -80
- package/src/bsdiff/zstd/contrib/externalSequenceProducer/sequence_producer.h +0 -26
- package/src/bsdiff/zstd/contrib/freestanding_lib/freestanding.py +0 -774
- package/src/bsdiff/zstd/contrib/gen_html/Makefile +0 -51
- package/src/bsdiff/zstd/contrib/gen_html/README.md +0 -31
- package/src/bsdiff/zstd/contrib/gen_html/gen-zstd-manual.sh +0 -9
- package/src/bsdiff/zstd/contrib/gen_html/gen_html.cpp +0 -224
- package/src/bsdiff/zstd/contrib/largeNbDicts/Makefile +0 -58
- package/src/bsdiff/zstd/contrib/largeNbDicts/README.md +0 -33
- package/src/bsdiff/zstd/contrib/largeNbDicts/largeNbDicts.c +0 -1085
- package/src/bsdiff/zstd/contrib/linux-kernel/Makefile +0 -108
- package/src/bsdiff/zstd/contrib/linux-kernel/README.md +0 -14
- package/src/bsdiff/zstd/contrib/linux-kernel/btrfs-benchmark.sh +0 -104
- package/src/bsdiff/zstd/contrib/linux-kernel/btrfs-extract-benchmark.sh +0 -99
- package/src/bsdiff/zstd/contrib/linux-kernel/decompress_sources.h +0 -34
- package/src/bsdiff/zstd/contrib/linux-kernel/linux.mk +0 -43
- package/src/bsdiff/zstd/contrib/linux-kernel/linux_zstd.h +0 -447
- package/src/bsdiff/zstd/contrib/linux-kernel/mem.h +0 -262
- package/src/bsdiff/zstd/contrib/linux-kernel/squashfs-benchmark.sh +0 -39
- package/src/bsdiff/zstd/contrib/linux-kernel/test/Makefile +0 -49
- package/src/bsdiff/zstd/contrib/linux-kernel/test/include/asm/unaligned.h +0 -187
- package/src/bsdiff/zstd/contrib/linux-kernel/test/include/linux/compiler.h +0 -23
- package/src/bsdiff/zstd/contrib/linux-kernel/test/include/linux/errno.h +0 -15
- package/src/bsdiff/zstd/contrib/linux-kernel/test/include/linux/kernel.h +0 -19
- package/src/bsdiff/zstd/contrib/linux-kernel/test/include/linux/limits.h +0 -15
- package/src/bsdiff/zstd/contrib/linux-kernel/test/include/linux/math64.h +0 -15
- package/src/bsdiff/zstd/contrib/linux-kernel/test/include/linux/module.h +0 -20
- package/src/bsdiff/zstd/contrib/linux-kernel/test/include/linux/printk.h +0 -15
- package/src/bsdiff/zstd/contrib/linux-kernel/test/include/linux/stddef.h +0 -15
- package/src/bsdiff/zstd/contrib/linux-kernel/test/include/linux/swab.h +0 -16
- package/src/bsdiff/zstd/contrib/linux-kernel/test/include/linux/types.h +0 -16
- package/src/bsdiff/zstd/contrib/linux-kernel/test/include/linux/xxhash.h +0 -745
- package/src/bsdiff/zstd/contrib/linux-kernel/test/macro-test.sh +0 -44
- package/src/bsdiff/zstd/contrib/linux-kernel/test/static_test.c +0 -52
- package/src/bsdiff/zstd/contrib/linux-kernel/test/test.c +0 -229
- package/src/bsdiff/zstd/contrib/linux-kernel/zstd_common_module.c +0 -29
- package/src/bsdiff/zstd/contrib/linux-kernel/zstd_compress_module.c +0 -164
- package/src/bsdiff/zstd/contrib/linux-kernel/zstd_decompress_module.c +0 -105
- package/src/bsdiff/zstd/contrib/linux-kernel/zstd_deps.h +0 -121
- package/src/bsdiff/zstd/contrib/match_finders/README.md +0 -42
- package/src/bsdiff/zstd/contrib/match_finders/zstd_edist.c +0 -558
- package/src/bsdiff/zstd/contrib/match_finders/zstd_edist.h +0 -70
- package/src/bsdiff/zstd/contrib/premake/premake4.lua +0 -6
- package/src/bsdiff/zstd/contrib/premake/zstd.lua +0 -80
- package/src/bsdiff/zstd/contrib/pzstd/BUCK +0 -72
- package/src/bsdiff/zstd/contrib/pzstd/ErrorHolder.h +0 -54
- package/src/bsdiff/zstd/contrib/pzstd/Logging.h +0 -72
- package/src/bsdiff/zstd/contrib/pzstd/Makefile +0 -265
- package/src/bsdiff/zstd/contrib/pzstd/Options.cpp +0 -424
- package/src/bsdiff/zstd/contrib/pzstd/Options.h +0 -71
- package/src/bsdiff/zstd/contrib/pzstd/Pzstd.cpp +0 -618
- package/src/bsdiff/zstd/contrib/pzstd/Pzstd.h +0 -153
- package/src/bsdiff/zstd/contrib/pzstd/README.md +0 -56
- package/src/bsdiff/zstd/contrib/pzstd/SkippableFrame.cpp +0 -30
- package/src/bsdiff/zstd/contrib/pzstd/SkippableFrame.h +0 -64
- package/src/bsdiff/zstd/contrib/pzstd/images/Cspeed.png +0 -0
- package/src/bsdiff/zstd/contrib/pzstd/images/Dspeed.png +0 -0
- package/src/bsdiff/zstd/contrib/pzstd/main.cpp +0 -27
- package/src/bsdiff/zstd/contrib/pzstd/test/BUCK +0 -37
- package/src/bsdiff/zstd/contrib/pzstd/test/OptionsTest.cpp +0 -536
- package/src/bsdiff/zstd/contrib/pzstd/test/PzstdTest.cpp +0 -149
- package/src/bsdiff/zstd/contrib/pzstd/test/RoundTrip.h +0 -86
- package/src/bsdiff/zstd/contrib/pzstd/test/RoundTripTest.cpp +0 -86
- package/src/bsdiff/zstd/contrib/pzstd/utils/BUCK +0 -75
- package/src/bsdiff/zstd/contrib/pzstd/utils/Buffer.h +0 -99
- package/src/bsdiff/zstd/contrib/pzstd/utils/FileSystem.h +0 -96
- package/src/bsdiff/zstd/contrib/pzstd/utils/Likely.h +0 -28
- package/src/bsdiff/zstd/contrib/pzstd/utils/Portability.h +0 -16
- package/src/bsdiff/zstd/contrib/pzstd/utils/Range.h +0 -133
- package/src/bsdiff/zstd/contrib/pzstd/utils/ResourcePool.h +0 -96
- package/src/bsdiff/zstd/contrib/pzstd/utils/ScopeGuard.h +0 -50
- package/src/bsdiff/zstd/contrib/pzstd/utils/ThreadPool.h +0 -58
- package/src/bsdiff/zstd/contrib/pzstd/utils/WorkQueue.h +0 -181
- package/src/bsdiff/zstd/contrib/pzstd/utils/test/BUCK +0 -35
- package/src/bsdiff/zstd/contrib/pzstd/utils/test/BufferTest.cpp +0 -89
- package/src/bsdiff/zstd/contrib/pzstd/utils/test/RangeTest.cpp +0 -82
- package/src/bsdiff/zstd/contrib/pzstd/utils/test/ResourcePoolTest.cpp +0 -72
- package/src/bsdiff/zstd/contrib/pzstd/utils/test/ScopeGuardTest.cpp +0 -28
- package/src/bsdiff/zstd/contrib/pzstd/utils/test/ThreadPoolTest.cpp +0 -71
- package/src/bsdiff/zstd/contrib/pzstd/utils/test/WorkQueueTest.cpp +0 -282
- package/src/bsdiff/zstd/contrib/recovery/Makefile +0 -35
- package/src/bsdiff/zstd/contrib/recovery/recover_directory.c +0 -152
- package/src/bsdiff/zstd/contrib/seekable_format/README.md +0 -42
- package/src/bsdiff/zstd/contrib/seekable_format/examples/Makefile +0 -53
- package/src/bsdiff/zstd/contrib/seekable_format/examples/parallel_compression.c +0 -214
- package/src/bsdiff/zstd/contrib/seekable_format/examples/parallel_processing.c +0 -194
- package/src/bsdiff/zstd/contrib/seekable_format/examples/seekable_compression.c +0 -136
- package/src/bsdiff/zstd/contrib/seekable_format/examples/seekable_decompression.c +0 -141
- package/src/bsdiff/zstd/contrib/seekable_format/examples/seekable_decompression_mem.c +0 -147
- package/src/bsdiff/zstd/contrib/seekable_format/tests/Makefile +0 -38
- package/src/bsdiff/zstd/contrib/seekable_format/tests/seekable_tests.c +0 -363
- package/src/bsdiff/zstd/contrib/seekable_format/zstd_seekable.h +0 -226
- package/src/bsdiff/zstd/contrib/seekable_format/zstd_seekable_compression_format.md +0 -116
- package/src/bsdiff/zstd/contrib/seekable_format/zstdseek_compress.c +0 -365
- package/src/bsdiff/zstd/contrib/seekable_format/zstdseek_decompress.c +0 -595
- package/src/bsdiff/zstd/contrib/seqBench/Makefile +0 -58
- package/src/bsdiff/zstd/contrib/seqBench/seqBench.c +0 -53
- package/src/bsdiff/zstd/contrib/snap/snapcraft.yaml +0 -28
- package/src/bsdiff/zstd/doc/README.md +0 -26
- package/src/bsdiff/zstd/doc/decompressor_errata.md +0 -148
- package/src/bsdiff/zstd/doc/decompressor_permissive.md +0 -60
- package/src/bsdiff/zstd/doc/educational_decoder/Makefile +0 -62
- package/src/bsdiff/zstd/doc/educational_decoder/README.md +0 -36
- package/src/bsdiff/zstd/doc/educational_decoder/harness.c +0 -119
- package/src/bsdiff/zstd/doc/educational_decoder/zstd_decompress.c +0 -2323
- package/src/bsdiff/zstd/doc/educational_decoder/zstd_decompress.h +0 -61
- package/src/bsdiff/zstd/doc/images/CSpeed2.png +0 -0
- package/src/bsdiff/zstd/doc/images/DCspeed5.png +0 -0
- package/src/bsdiff/zstd/doc/images/DSpeed3.png +0 -0
- package/src/bsdiff/zstd/doc/images/cdict_v136.png +0 -0
- package/src/bsdiff/zstd/doc/images/dict-cr.png +0 -0
- package/src/bsdiff/zstd/doc/images/dict-cs.png +0 -0
- package/src/bsdiff/zstd/doc/images/dict-ds.png +0 -0
- package/src/bsdiff/zstd/doc/images/zstd_cdict_v1_3_5.png +0 -0
- package/src/bsdiff/zstd/doc/images/zstd_logo86.png +0 -0
- package/src/bsdiff/zstd/doc/zstd_compression_format.md +0 -1737
- package/src/bsdiff/zstd/doc/zstd_manual.html +0 -2170
- package/src/bsdiff/zstd/examples/Makefile +0 -93
- package/src/bsdiff/zstd/examples/README.md +0 -46
- package/src/bsdiff/zstd/examples/common.h +0 -246
- package/src/bsdiff/zstd/examples/dictionary_compression.c +0 -107
- package/src/bsdiff/zstd/examples/dictionary_decompression.c +0 -99
- package/src/bsdiff/zstd/examples/multiple_simple_compression.c +0 -116
- package/src/bsdiff/zstd/examples/multiple_streaming_compression.c +0 -133
- package/src/bsdiff/zstd/examples/simple_compression.c +0 -68
- package/src/bsdiff/zstd/examples/simple_decompression.c +0 -65
- package/src/bsdiff/zstd/examples/streaming_compression.c +0 -146
- package/src/bsdiff/zstd/examples/streaming_compression_thread_pool.c +0 -180
- package/src/bsdiff/zstd/examples/streaming_decompression.c +0 -100
- package/src/bsdiff/zstd/examples/streaming_memory_usage.c +0 -137
- package/src/bsdiff/zstd/lib/BUCK +0 -232
- package/src/bsdiff/zstd/lib/Makefile +0 -369
- package/src/bsdiff/zstd/lib/README.md +0 -237
- package/src/bsdiff/zstd/lib/common/allocations.h +0 -55
- package/src/bsdiff/zstd/lib/common/bits.h +0 -200
- package/src/bsdiff/zstd/lib/common/bitstream.h +0 -457
- package/src/bsdiff/zstd/lib/common/compiler.h +0 -450
- package/src/bsdiff/zstd/lib/common/cpu.h +0 -249
- package/src/bsdiff/zstd/lib/common/debug.c +0 -30
- package/src/bsdiff/zstd/lib/common/debug.h +0 -116
- package/src/bsdiff/zstd/lib/common/entropy_common.c +0 -340
- package/src/bsdiff/zstd/lib/common/error_private.c +0 -63
- package/src/bsdiff/zstd/lib/common/error_private.h +0 -168
- package/src/bsdiff/zstd/lib/common/fse.h +0 -640
- package/src/bsdiff/zstd/lib/common/fse_decompress.c +0 -313
- package/src/bsdiff/zstd/lib/common/huf.h +0 -286
- package/src/bsdiff/zstd/lib/common/mem.h +0 -426
- package/src/bsdiff/zstd/lib/common/pool.c +0 -371
- package/src/bsdiff/zstd/lib/common/pool.h +0 -90
- package/src/bsdiff/zstd/lib/common/portability_macros.h +0 -158
- package/src/bsdiff/zstd/lib/common/threading.c +0 -182
- package/src/bsdiff/zstd/lib/common/threading.h +0 -150
- package/src/bsdiff/zstd/lib/common/xxhash.c +0 -18
- package/src/bsdiff/zstd/lib/common/xxhash.h +0 -7020
- package/src/bsdiff/zstd/lib/common/zstd_common.c +0 -48
- package/src/bsdiff/zstd/lib/common/zstd_deps.h +0 -111
- package/src/bsdiff/zstd/lib/common/zstd_internal.h +0 -392
- package/src/bsdiff/zstd/lib/common/zstd_trace.h +0 -163
- package/src/bsdiff/zstd/lib/compress/clevels.h +0 -134
- package/src/bsdiff/zstd/lib/compress/fse_compress.c +0 -625
- package/src/bsdiff/zstd/lib/compress/hist.c +0 -181
- package/src/bsdiff/zstd/lib/compress/hist.h +0 -75
- package/src/bsdiff/zstd/lib/compress/huf_compress.c +0 -1464
- package/src/bsdiff/zstd/lib/compress/zstd_compress.c +0 -7153
- package/src/bsdiff/zstd/lib/compress/zstd_compress_internal.h +0 -1534
- package/src/bsdiff/zstd/lib/compress/zstd_compress_literals.c +0 -235
- package/src/bsdiff/zstd/lib/compress/zstd_compress_literals.h +0 -39
- package/src/bsdiff/zstd/lib/compress/zstd_compress_sequences.c +0 -442
- package/src/bsdiff/zstd/lib/compress/zstd_compress_sequences.h +0 -54
- package/src/bsdiff/zstd/lib/compress/zstd_compress_superblock.c +0 -688
- package/src/bsdiff/zstd/lib/compress/zstd_compress_superblock.h +0 -32
- package/src/bsdiff/zstd/lib/compress/zstd_cwksp.h +0 -748
- package/src/bsdiff/zstd/lib/compress/zstd_double_fast.c +0 -770
- package/src/bsdiff/zstd/lib/compress/zstd_double_fast.h +0 -50
- package/src/bsdiff/zstd/lib/compress/zstd_fast.c +0 -968
- package/src/bsdiff/zstd/lib/compress/zstd_fast.h +0 -38
- package/src/bsdiff/zstd/lib/compress/zstd_lazy.c +0 -2199
- package/src/bsdiff/zstd/lib/compress/zstd_lazy.h +0 -202
- package/src/bsdiff/zstd/lib/compress/zstd_ldm.c +0 -730
- package/src/bsdiff/zstd/lib/compress/zstd_ldm.h +0 -117
- package/src/bsdiff/zstd/lib/compress/zstd_ldm_geartab.h +0 -106
- package/src/bsdiff/zstd/lib/compress/zstd_opt.c +0 -1576
- package/src/bsdiff/zstd/lib/compress/zstd_opt.h +0 -80
- package/src/bsdiff/zstd/lib/compress/zstdmt_compress.c +0 -1882
- package/src/bsdiff/zstd/lib/compress/zstdmt_compress.h +0 -113
- package/src/bsdiff/zstd/lib/decompress/huf_decompress.c +0 -1944
- package/src/bsdiff/zstd/lib/decompress/huf_decompress_amd64.S +0 -595
- package/src/bsdiff/zstd/lib/decompress/zstd_ddict.c +0 -244
- package/src/bsdiff/zstd/lib/decompress/zstd_ddict.h +0 -44
- package/src/bsdiff/zstd/lib/decompress/zstd_decompress.c +0 -2407
- package/src/bsdiff/zstd/lib/decompress/zstd_decompress_block.c +0 -2215
- package/src/bsdiff/zstd/lib/decompress/zstd_decompress_block.h +0 -73
- package/src/bsdiff/zstd/lib/decompress/zstd_decompress_internal.h +0 -240
- package/src/bsdiff/zstd/lib/deprecated/zbuff.h +0 -214
- package/src/bsdiff/zstd/lib/deprecated/zbuff_common.c +0 -26
- package/src/bsdiff/zstd/lib/deprecated/zbuff_compress.c +0 -167
- package/src/bsdiff/zstd/lib/deprecated/zbuff_decompress.c +0 -77
- package/src/bsdiff/zstd/lib/dictBuilder/cover.c +0 -1261
- package/src/bsdiff/zstd/lib/dictBuilder/cover.h +0 -152
- package/src/bsdiff/zstd/lib/dictBuilder/divsufsort.c +0 -1913
- package/src/bsdiff/zstd/lib/dictBuilder/divsufsort.h +0 -67
- package/src/bsdiff/zstd/lib/dictBuilder/fastcover.c +0 -766
- package/src/bsdiff/zstd/lib/dictBuilder/zdict.c +0 -1133
- package/src/bsdiff/zstd/lib/dll/example/Makefile +0 -48
- package/src/bsdiff/zstd/lib/dll/example/README.md +0 -63
- package/src/bsdiff/zstd/lib/dll/example/build_package.bat +0 -20
- package/src/bsdiff/zstd/lib/dll/example/fullbench-dll.sln +0 -25
- package/src/bsdiff/zstd/lib/dll/example/fullbench-dll.vcxproj +0 -181
- package/src/bsdiff/zstd/lib/legacy/zstd_legacy.h +0 -452
- package/src/bsdiff/zstd/lib/legacy/zstd_v01.c +0 -2127
- package/src/bsdiff/zstd/lib/legacy/zstd_v01.h +0 -94
- package/src/bsdiff/zstd/lib/legacy/zstd_v02.c +0 -3465
- package/src/bsdiff/zstd/lib/legacy/zstd_v02.h +0 -93
- package/src/bsdiff/zstd/lib/legacy/zstd_v03.c +0 -3105
- package/src/bsdiff/zstd/lib/legacy/zstd_v03.h +0 -93
- package/src/bsdiff/zstd/lib/legacy/zstd_v04.c +0 -3598
- package/src/bsdiff/zstd/lib/legacy/zstd_v04.h +0 -142
- package/src/bsdiff/zstd/lib/legacy/zstd_v05.c +0 -4005
- package/src/bsdiff/zstd/lib/legacy/zstd_v05.h +0 -162
- package/src/bsdiff/zstd/lib/legacy/zstd_v06.c +0 -4106
- package/src/bsdiff/zstd/lib/legacy/zstd_v06.h +0 -172
- package/src/bsdiff/zstd/lib/legacy/zstd_v07.c +0 -4490
- package/src/bsdiff/zstd/lib/legacy/zstd_v07.h +0 -187
- package/src/bsdiff/zstd/lib/libzstd.mk +0 -237
- package/src/bsdiff/zstd/lib/libzstd.pc.in +0 -16
- package/src/bsdiff/zstd/lib/module.modulemap +0 -35
- package/src/bsdiff/zstd/lib/zdict.h +0 -474
- package/src/bsdiff/zstd/lib/zstd.h +0 -3089
- package/src/bsdiff/zstd/lib/zstd_errors.h +0 -114
- package/src/bsdiff/zstd/programs/BUCK +0 -44
- package/src/bsdiff/zstd/programs/Makefile +0 -445
- package/src/bsdiff/zstd/programs/README.md +0 -302
- package/src/bsdiff/zstd/programs/benchfn.c +0 -256
- package/src/bsdiff/zstd/programs/benchfn.h +0 -183
- package/src/bsdiff/zstd/programs/benchzstd.c +0 -1264
- package/src/bsdiff/zstd/programs/benchzstd.h +0 -198
- package/src/bsdiff/zstd/programs/datagen.c +0 -186
- package/src/bsdiff/zstd/programs/datagen.h +0 -30
- package/src/bsdiff/zstd/programs/dibio.c +0 -440
- package/src/bsdiff/zstd/programs/dibio.h +0 -39
- package/src/bsdiff/zstd/programs/fileio.c +0 -3470
- package/src/bsdiff/zstd/programs/fileio.h +0 -181
- package/src/bsdiff/zstd/programs/fileio_asyncio.c +0 -663
- package/src/bsdiff/zstd/programs/fileio_asyncio.h +0 -203
- package/src/bsdiff/zstd/programs/fileio_common.h +0 -125
- package/src/bsdiff/zstd/programs/fileio_types.h +0 -86
- package/src/bsdiff/zstd/programs/lorem.c +0 -285
- package/src/bsdiff/zstd/programs/lorem.h +0 -32
- package/src/bsdiff/zstd/programs/platform.h +0 -218
- package/src/bsdiff/zstd/programs/timefn.c +0 -168
- package/src/bsdiff/zstd/programs/timefn.h +0 -70
- package/src/bsdiff/zstd/programs/util.c +0 -1652
- package/src/bsdiff/zstd/programs/util.h +0 -359
- package/src/bsdiff/zstd/programs/windres/verrsrc.h +0 -17
- package/src/bsdiff/zstd/programs/windres/zstd.rc +0 -51
- package/src/bsdiff/zstd/programs/windres/zstd32.res +0 -0
- package/src/bsdiff/zstd/programs/windres/zstd64.res +0 -0
- package/src/bsdiff/zstd/programs/zstd.1 +0 -566
- package/src/bsdiff/zstd/programs/zstd.1.md +0 -695
- package/src/bsdiff/zstd/programs/zstdcli.c +0 -1625
- package/src/bsdiff/zstd/programs/zstdcli_trace.c +0 -172
- package/src/bsdiff/zstd/programs/zstdcli_trace.h +0 -24
- package/src/bsdiff/zstd/programs/zstdgrep +0 -134
- package/src/bsdiff/zstd/programs/zstdgrep.1 +0 -26
- package/src/bsdiff/zstd/programs/zstdgrep.1.md +0 -30
- package/src/bsdiff/zstd/programs/zstdless +0 -8
- package/src/bsdiff/zstd/programs/zstdless.1 +0 -14
- package/src/bsdiff/zstd/programs/zstdless.1.md +0 -16
- package/src/bsdiff/zstd/tests/DEPRECATED-test-zstd-speed.py +0 -378
- package/src/bsdiff/zstd/tests/Makefile +0 -477
- package/src/bsdiff/zstd/tests/README.md +0 -184
- package/src/bsdiff/zstd/tests/automated_benchmarking.py +0 -326
- package/src/bsdiff/zstd/tests/bigdict.c +0 -128
- package/src/bsdiff/zstd/tests/checkTag.c +0 -65
- package/src/bsdiff/zstd/tests/check_size.py +0 -31
- package/src/bsdiff/zstd/tests/cli-tests/README.md +0 -258
- package/src/bsdiff/zstd/tests/cli-tests/basic/args.sh +0 -10
- package/src/bsdiff/zstd/tests/cli-tests/basic/args.sh.exit +0 -1
- package/src/bsdiff/zstd/tests/cli-tests/basic/args.sh.stderr.glob +0 -28
- package/src/bsdiff/zstd/tests/cli-tests/basic/help.sh +0 -10
- package/src/bsdiff/zstd/tests/cli-tests/basic/help.sh.stdout.glob +0 -34
- package/src/bsdiff/zstd/tests/cli-tests/basic/memlimit.sh +0 -40
- package/src/bsdiff/zstd/tests/cli-tests/basic/memlimit.sh.stderr.exact +0 -13
- package/src/bsdiff/zstd/tests/cli-tests/basic/memlimit.sh.stdout.exact +0 -13
- package/src/bsdiff/zstd/tests/cli-tests/basic/output_dir.sh +0 -7
- package/src/bsdiff/zstd/tests/cli-tests/basic/output_dir.sh.stderr.exact +0 -2
- package/src/bsdiff/zstd/tests/cli-tests/basic/output_dir.sh.stdout.exact +0 -2
- package/src/bsdiff/zstd/tests/cli-tests/basic/version.sh +0 -6
- package/src/bsdiff/zstd/tests/cli-tests/basic/version.sh.stdout.glob +0 -2
- package/src/bsdiff/zstd/tests/cli-tests/bin/cmp_size +0 -44
- package/src/bsdiff/zstd/tests/cli-tests/bin/datagen +0 -3
- package/src/bsdiff/zstd/tests/cli-tests/bin/die +0 -4
- package/src/bsdiff/zstd/tests/cli-tests/bin/println +0 -2
- package/src/bsdiff/zstd/tests/cli-tests/bin/zstd +0 -9
- package/src/bsdiff/zstd/tests/cli-tests/bin/zstdgrep +0 -2
- package/src/bsdiff/zstd/tests/cli-tests/bin/zstdless +0 -2
- package/src/bsdiff/zstd/tests/cli-tests/cltools/setup +0 -6
- package/src/bsdiff/zstd/tests/cli-tests/cltools/zstdgrep.sh +0 -8
- package/src/bsdiff/zstd/tests/cli-tests/cltools/zstdgrep.sh.exit +0 -1
- package/src/bsdiff/zstd/tests/cli-tests/cltools/zstdgrep.sh.stderr.exact +0 -1
- package/src/bsdiff/zstd/tests/cli-tests/cltools/zstdgrep.sh.stdout.glob +0 -4
- package/src/bsdiff/zstd/tests/cli-tests/cltools/zstdless.sh +0 -10
- package/src/bsdiff/zstd/tests/cli-tests/cltools/zstdless.sh.stderr.exact +0 -2
- package/src/bsdiff/zstd/tests/cli-tests/cltools/zstdless.sh.stdout.glob +0 -5
- package/src/bsdiff/zstd/tests/cli-tests/common/format.sh +0 -19
- package/src/bsdiff/zstd/tests/cli-tests/common/mtime.sh +0 -13
- package/src/bsdiff/zstd/tests/cli-tests/common/permissions.sh +0 -18
- package/src/bsdiff/zstd/tests/cli-tests/common/platform.sh +0 -37
- package/src/bsdiff/zstd/tests/cli-tests/compression/adapt.sh +0 -14
- package/src/bsdiff/zstd/tests/cli-tests/compression/basic.sh +0 -36
- package/src/bsdiff/zstd/tests/cli-tests/compression/compress-literals.sh +0 -10
- package/src/bsdiff/zstd/tests/cli-tests/compression/format.sh +0 -16
- package/src/bsdiff/zstd/tests/cli-tests/compression/golden.sh +0 -16
- package/src/bsdiff/zstd/tests/cli-tests/compression/gzip-compat.sh +0 -17
- package/src/bsdiff/zstd/tests/cli-tests/compression/levels.sh +0 -62
- package/src/bsdiff/zstd/tests/cli-tests/compression/levels.sh.stderr.exact +0 -69
- package/src/bsdiff/zstd/tests/cli-tests/compression/long-distance-matcher.sh +0 -7
- package/src/bsdiff/zstd/tests/cli-tests/compression/multi-threaded.sh +0 -15
- package/src/bsdiff/zstd/tests/cli-tests/compression/multi-threaded.sh.stderr.exact +0 -11
- package/src/bsdiff/zstd/tests/cli-tests/compression/multiple-files.sh +0 -21
- package/src/bsdiff/zstd/tests/cli-tests/compression/multiple-files.sh.stdout.exact +0 -12
- package/src/bsdiff/zstd/tests/cli-tests/compression/row-match-finder.sh +0 -7
- package/src/bsdiff/zstd/tests/cli-tests/compression/setup +0 -7
- package/src/bsdiff/zstd/tests/cli-tests/compression/stream-size.sh +0 -7
- package/src/bsdiff/zstd/tests/cli-tests/compression/verbose-wlog.sh +0 -11
- package/src/bsdiff/zstd/tests/cli-tests/compression/verbose-wlog.sh.stderr.glob +0 -5
- package/src/bsdiff/zstd/tests/cli-tests/compression/verbose-wlog.sh.stdout.glob +0 -5
- package/src/bsdiff/zstd/tests/cli-tests/compression/window-resize.sh +0 -9
- package/src/bsdiff/zstd/tests/cli-tests/compression/window-resize.sh.stderr.ignore +0 -0
- package/src/bsdiff/zstd/tests/cli-tests/compression/window-resize.sh.stdout.glob +0 -3
- package/src/bsdiff/zstd/tests/cli-tests/decompression/detectErrors.sh +0 -11
- package/src/bsdiff/zstd/tests/cli-tests/decompression/golden.sh +0 -7
- package/src/bsdiff/zstd/tests/cli-tests/decompression/pass-through.sh +0 -57
- package/src/bsdiff/zstd/tests/cli-tests/decompression/pass-through.sh.stderr.exact +0 -11
- package/src/bsdiff/zstd/tests/cli-tests/decompression/pass-through.sh.stdout.exact +0 -25
- package/src/bsdiff/zstd/tests/cli-tests/dict-builder/empty-input.sh +0 -9
- package/src/bsdiff/zstd/tests/cli-tests/dict-builder/empty-input.sh.stderr.exact +0 -1
- package/src/bsdiff/zstd/tests/cli-tests/dict-builder/no-inputs.sh +0 -3
- package/src/bsdiff/zstd/tests/cli-tests/dict-builder/no-inputs.sh.exit +0 -1
- package/src/bsdiff/zstd/tests/cli-tests/dict-builder/no-inputs.sh.stderr.exact +0 -5
- package/src/bsdiff/zstd/tests/cli-tests/dictionaries/dictionary-mismatch.sh +0 -29
- package/src/bsdiff/zstd/tests/cli-tests/dictionaries/dictionary-mismatch.sh.stderr.exact +0 -7
- package/src/bsdiff/zstd/tests/cli-tests/dictionaries/golden.sh +0 -9
- package/src/bsdiff/zstd/tests/cli-tests/dictionaries/setup +0 -6
- package/src/bsdiff/zstd/tests/cli-tests/dictionaries/setup_once +0 -24
- package/src/bsdiff/zstd/tests/cli-tests/file-handling/directory-mirror.sh +0 -49
- package/src/bsdiff/zstd/tests/cli-tests/file-handling/directory-mirror.sh.stderr.exact +0 -0
- package/src/bsdiff/zstd/tests/cli-tests/file-handling/directory-mirror.sh.stdout.exact +0 -0
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/compress-file-to-dir-without-write-perm.sh +0 -12
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/compress-file-to-dir-without-write-perm.sh.stderr.exact +0 -26
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/compress-file-to-file.sh +0 -9
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/compress-file-to-file.sh.stderr.exact +0 -42
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/compress-file-to-stdout.sh +0 -8
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/compress-file-to-stdout.sh.stderr.exact +0 -24
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/compress-stdin-to-file.sh +0 -8
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/compress-stdin-to-file.sh.stderr.exact +0 -24
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/compress-stdin-to-stdout.sh +0 -8
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/compress-stdin-to-stdout.sh.stderr.exact +0 -18
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/decompress-file-to-file.sh +0 -8
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/decompress-file-to-file.sh.stderr.exact +0 -38
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/decompress-file-to-stdout.sh +0 -7
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/decompress-file-to-stdout.sh.stderr.exact +0 -18
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/decompress-stdin-to-file.sh +0 -7
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/decompress-stdin-to-file.sh.stderr.exact +0 -20
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/decompress-stdin-to-stdout.sh +0 -7
- package/src/bsdiff/zstd/tests/cli-tests/file-stat/decompress-stdin-to-stdout.sh.stderr.exact +0 -14
- package/src/bsdiff/zstd/tests/cli-tests/progress/no-progress.sh +0 -46
- package/src/bsdiff/zstd/tests/cli-tests/progress/no-progress.sh.stderr.glob +0 -96
- package/src/bsdiff/zstd/tests/cli-tests/progress/progress.sh +0 -41
- package/src/bsdiff/zstd/tests/cli-tests/progress/progress.sh.stderr.glob +0 -62
- package/src/bsdiff/zstd/tests/cli-tests/run.py +0 -731
- package/src/bsdiff/zstd/tests/cli-tests/zstd-symlinks/setup +0 -6
- package/src/bsdiff/zstd/tests/cli-tests/zstd-symlinks/zstdcat.sh +0 -12
- package/src/bsdiff/zstd/tests/cli-tests/zstd-symlinks/zstdcat.sh.stdout.exact +0 -8
- package/src/bsdiff/zstd/tests/datagencli.c +0 -149
- package/src/bsdiff/zstd/tests/decodecorpus.c +0 -1936
- package/src/bsdiff/zstd/tests/dict-files/zero-weight-dict +0 -0
- package/src/bsdiff/zstd/tests/external_matchfinder.c +0 -140
- package/src/bsdiff/zstd/tests/external_matchfinder.h +0 -39
- package/src/bsdiff/zstd/tests/fullbench.c +0 -980
- package/src/bsdiff/zstd/tests/fuzz/Makefile +0 -277
- package/src/bsdiff/zstd/tests/fuzz/README.md +0 -161
- package/src/bsdiff/zstd/tests/fuzz/block_decompress.c +0 -53
- package/src/bsdiff/zstd/tests/fuzz/block_round_trip.c +0 -103
- package/src/bsdiff/zstd/tests/fuzz/decompress_cross_format.c +0 -130
- package/src/bsdiff/zstd/tests/fuzz/decompress_dstSize_tooSmall.c +0 -74
- package/src/bsdiff/zstd/tests/fuzz/dictionary_decompress.c +0 -77
- package/src/bsdiff/zstd/tests/fuzz/dictionary_loader.c +0 -106
- package/src/bsdiff/zstd/tests/fuzz/dictionary_round_trip.c +0 -155
- package/src/bsdiff/zstd/tests/fuzz/dictionary_stream_round_trip.c +0 -209
- package/src/bsdiff/zstd/tests/fuzz/fse_read_ncount.c +0 -100
- package/src/bsdiff/zstd/tests/fuzz/fuzz.h +0 -57
- package/src/bsdiff/zstd/tests/fuzz/fuzz.py +0 -911
- package/src/bsdiff/zstd/tests/fuzz/fuzz_data_producer.c +0 -95
- package/src/bsdiff/zstd/tests/fuzz/fuzz_data_producer.h +0 -66
- package/src/bsdiff/zstd/tests/fuzz/fuzz_helpers.c +0 -48
- package/src/bsdiff/zstd/tests/fuzz/fuzz_helpers.h +0 -81
- package/src/bsdiff/zstd/tests/fuzz/fuzz_third_party_seq_prod.h +0 -116
- package/src/bsdiff/zstd/tests/fuzz/generate_sequences.c +0 -88
- package/src/bsdiff/zstd/tests/fuzz/huf_decompress.c +0 -68
- package/src/bsdiff/zstd/tests/fuzz/huf_round_trip.c +0 -137
- package/src/bsdiff/zstd/tests/fuzz/raw_dictionary_round_trip.c +0 -119
- package/src/bsdiff/zstd/tests/fuzz/regression_driver.c +0 -90
- package/src/bsdiff/zstd/tests/fuzz/seekable_roundtrip.c +0 -88
- package/src/bsdiff/zstd/tests/fuzz/seq_prod_fuzz_example/Makefile +0 -16
- package/src/bsdiff/zstd/tests/fuzz/seq_prod_fuzz_example/README.md +0 -12
- package/src/bsdiff/zstd/tests/fuzz/seq_prod_fuzz_example/example_seq_prod.c +0 -52
- package/src/bsdiff/zstd/tests/fuzz/sequence_compression_api.c +0 -381
- package/src/bsdiff/zstd/tests/fuzz/simple_compress.c +0 -60
- package/src/bsdiff/zstd/tests/fuzz/simple_decompress.c +0 -59
- package/src/bsdiff/zstd/tests/fuzz/simple_round_trip.c +0 -182
- package/src/bsdiff/zstd/tests/fuzz/stream_decompress.c +0 -119
- package/src/bsdiff/zstd/tests/fuzz/stream_round_trip.c +0 -218
- package/src/bsdiff/zstd/tests/fuzz/zstd_frame_info.c +0 -43
- package/src/bsdiff/zstd/tests/fuzz/zstd_helpers.c +0 -207
- package/src/bsdiff/zstd/tests/fuzz/zstd_helpers.h +0 -56
- package/src/bsdiff/zstd/tests/fuzzer.c +0 -4933
- package/src/bsdiff/zstd/tests/golden-compression/PR-3517-block-splitter-corruption-test +0 -1
- package/src/bsdiff/zstd/tests/golden-compression/http +0 -1
- package/src/bsdiff/zstd/tests/golden-compression/huffman-compressed-larger +0 -0
- package/src/bsdiff/zstd/tests/golden-compression/large-literal-and-match-lengths +0 -0
- package/src/bsdiff/zstd/tests/golden-decompression/block-128k.zst +0 -0
- package/src/bsdiff/zstd/tests/golden-decompression/empty-block.zst +0 -0
- package/src/bsdiff/zstd/tests/golden-decompression/rle-first-block.zst +0 -0
- package/src/bsdiff/zstd/tests/golden-decompression/zeroSeq_2B.zst +0 -0
- package/src/bsdiff/zstd/tests/golden-decompression-errors/off0.bin.zst +0 -0
- package/src/bsdiff/zstd/tests/golden-decompression-errors/zeroSeq_extraneous.zst +0 -0
- package/src/bsdiff/zstd/tests/golden-dictionaries/http-dict-missing-symbols +0 -0
- package/src/bsdiff/zstd/tests/gzip/Makefile +0 -45
- package/src/bsdiff/zstd/tests/gzip/gzip-env.sh +0 -46
- package/src/bsdiff/zstd/tests/gzip/helin-segv.sh +0 -31
- package/src/bsdiff/zstd/tests/gzip/help-version.sh +0 -270
- package/src/bsdiff/zstd/tests/gzip/hufts-segv.gz +0 -0
- package/src/bsdiff/zstd/tests/gzip/hufts.sh +0 -34
- package/src/bsdiff/zstd/tests/gzip/init.cfg +0 -5
- package/src/bsdiff/zstd/tests/gzip/init.sh +0 -616
- package/src/bsdiff/zstd/tests/gzip/keep.sh +0 -51
- package/src/bsdiff/zstd/tests/gzip/list.sh +0 -31
- package/src/bsdiff/zstd/tests/gzip/memcpy-abuse.sh +0 -34
- package/src/bsdiff/zstd/tests/gzip/mixed.sh +0 -68
- package/src/bsdiff/zstd/tests/gzip/null-suffix-clobber.sh +0 -35
- package/src/bsdiff/zstd/tests/gzip/stdin.sh +0 -31
- package/src/bsdiff/zstd/tests/gzip/test-driver.sh +0 -150
- package/src/bsdiff/zstd/tests/gzip/trailing-nul.sh +0 -37
- package/src/bsdiff/zstd/tests/gzip/unpack-invalid.sh +0 -36
- package/src/bsdiff/zstd/tests/gzip/z-suffix.sh +0 -30
- package/src/bsdiff/zstd/tests/gzip/zdiff.sh +0 -48
- package/src/bsdiff/zstd/tests/gzip/zgrep-context.sh +0 -47
- package/src/bsdiff/zstd/tests/gzip/zgrep-f.sh +0 -43
- package/src/bsdiff/zstd/tests/gzip/zgrep-signal.sh +0 -64
- package/src/bsdiff/zstd/tests/gzip/znew-k.sh +0 -40
- package/src/bsdiff/zstd/tests/invalidDictionaries.c +0 -61
- package/src/bsdiff/zstd/tests/legacy.c +0 -260
- package/src/bsdiff/zstd/tests/libzstd_builds.sh +0 -104
- package/src/bsdiff/zstd/tests/longmatch.c +0 -102
- package/src/bsdiff/zstd/tests/loremOut.c +0 -50
- package/src/bsdiff/zstd/tests/loremOut.h +0 -15
- package/src/bsdiff/zstd/tests/paramgrill.c +0 -2966
- package/src/bsdiff/zstd/tests/playTests.sh +0 -1928
- package/src/bsdiff/zstd/tests/poolTests.c +0 -271
- package/src/bsdiff/zstd/tests/rateLimiter.py +0 -41
- package/src/bsdiff/zstd/tests/regression/Makefile +0 -60
- package/src/bsdiff/zstd/tests/regression/README.md +0 -28
- package/src/bsdiff/zstd/tests/regression/config.c +0 -404
- package/src/bsdiff/zstd/tests/regression/config.h +0 -91
- package/src/bsdiff/zstd/tests/regression/data.c +0 -631
- package/src/bsdiff/zstd/tests/regression/data.h +0 -121
- package/src/bsdiff/zstd/tests/regression/levels.h +0 -59
- package/src/bsdiff/zstd/tests/regression/method.c +0 -701
- package/src/bsdiff/zstd/tests/regression/method.h +0 -65
- package/src/bsdiff/zstd/tests/regression/result.c +0 -28
- package/src/bsdiff/zstd/tests/regression/result.h +0 -103
- package/src/bsdiff/zstd/tests/regression/results.csv +0 -1480
- package/src/bsdiff/zstd/tests/regression/test.c +0 -362
- package/src/bsdiff/zstd/tests/roundTripCrash.c +0 -241
- package/src/bsdiff/zstd/tests/seqgen.c +0 -260
- package/src/bsdiff/zstd/tests/seqgen.h +0 -58
- package/src/bsdiff/zstd/tests/test-license.py +0 -156
- package/src/bsdiff/zstd/tests/test-variants.sh +0 -115
- package/src/bsdiff/zstd/tests/test-zstd-versions.py +0 -308
- package/src/bsdiff/zstd/tests/zstreamtest.c +0 -3407
- package/src/bsdiff/zstd/zlibWrapper/BUCK +0 -22
- package/src/bsdiff/zstd/zlibWrapper/Makefile +0 -120
- package/src/bsdiff/zstd/zlibWrapper/README.md +0 -163
- package/src/bsdiff/zstd/zlibWrapper/examples/example.c +0 -598
- package/src/bsdiff/zstd/zlibWrapper/examples/example_original.c +0 -599
- package/src/bsdiff/zstd/zlibWrapper/examples/fitblk.c +0 -254
- package/src/bsdiff/zstd/zlibWrapper/examples/fitblk_original.c +0 -233
- package/src/bsdiff/zstd/zlibWrapper/examples/minigzip.c +0 -605
- package/src/bsdiff/zstd/zlibWrapper/examples/zwrapbench.c +0 -1018
- package/src/bsdiff/zstd/zlibWrapper/gzclose.c +0 -26
- package/src/bsdiff/zstd/zlibWrapper/gzcompatibility.h +0 -68
- package/src/bsdiff/zstd/zlibWrapper/gzguts.h +0 -229
- package/src/bsdiff/zstd/zlibWrapper/gzlib.c +0 -587
- package/src/bsdiff/zstd/zlibWrapper/gzread.c +0 -637
- package/src/bsdiff/zstd/zlibWrapper/gzwrite.c +0 -631
- package/src/bsdiff/zstd/zlibWrapper/zstd_zlibwrapper.c +0 -1200
- package/src/bsdiff/zstd/zlibWrapper/zstd_zlibwrapper.h +0 -91
- package/src/objc/build/objcWrapper.o +0 -0
- package/src/objc/objcWrapper.m +0 -1380
- package/src/zig/build/index.js +0 -782
- package/src/zig/build/libObjcWrapper.a +0 -0
- package/src/zig/build.zig +0 -29
- package/src/zig/macos/application.zig +0 -6
- package/src/zig/macos/objc.zig +0 -123
- package/src/zig/macos/tray.zig +0 -102
- package/src/zig/macos/webview.zig +0 -693
- package/src/zig/macos/window.zig +0 -189
- package/src/zig/main.zig +0 -16
- package/src/zig/rpc/pipesin.zig +0 -202
- package/src/zig/rpc/rpc.zig +0 -19
- package/src/zig/rpc/schema/handlers.zig +0 -402
- package/src/zig/rpc/schema/request.zig +0 -59
- package/src/zig/rpc/schema/schema.zig +0 -412
- package/src/zig/rpc/stdin.zig +0 -112
- package/src/zig/rpc/stdout.zig +0 -106
- package/src/zig/rpc/types.zig +0 -41
- package/src/zig/utils.zig +0 -49
- package/src/zig/zig-out/bin/webview +0 -0
package/src/bsdiff/bsdiff.zig
DELETED
|
@@ -1,842 +0,0 @@
|
|
|
1
|
-
// Copyright 2003-2005 Colin Percival
|
|
2
|
-
// Copyright 2024 Yoav Givati
|
|
3
|
-
// All rights reserved
|
|
4
|
-
//
|
|
5
|
-
// Redistribution and use in source and binary forms, with or without
|
|
6
|
-
// modification, are permitted providing that the following conditions
|
|
7
|
-
// are met:
|
|
8
|
-
// 1. Redistributions of source code must retain the above copyright
|
|
9
|
-
// notice, this list of conditions and the following disclaimer.
|
|
10
|
-
// 2. Redistributions in binary form must reproduce the above copyright
|
|
11
|
-
// notice, this list of conditions and the following disclaimer in the
|
|
12
|
-
// documentation and/or other materials provided with the distribution.
|
|
13
|
-
//
|
|
14
|
-
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
15
|
-
// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
16
|
-
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
17
|
-
// ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
18
|
-
// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
19
|
-
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
20
|
-
// OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
21
|
-
// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
22
|
-
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
|
23
|
-
// IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
24
|
-
// POSSIBILITY OF SUCH DAMAGE.
|
|
25
|
-
|
|
26
|
-
// Note: This is a modified version of bsdiff from Colin Percival.
|
|
27
|
-
// The goal is to move compression from bzip2 sections in the patch file to zstd for the whole patch file,
|
|
28
|
-
// explore other performance improvements leveraging zig, and potentially optimize for tar file diffing
|
|
29
|
-
// used by electrobun.
|
|
30
|
-
|
|
31
|
-
// todo:
|
|
32
|
-
// 1. implement qsufsort and split
|
|
33
|
-
// 2. implement search and matchlen
|
|
34
|
-
// 3. implement diffb
|
|
35
|
-
// 4. add wrapper that takes two absolute file paths and test creating patches
|
|
36
|
-
// 5. implement bspatch.zig
|
|
37
|
-
// 6. test applying a patch file with checksum
|
|
38
|
-
// 7. compare TRDIFF10 with zstd compression with bsdiff4.
|
|
39
|
-
// 8. create a cli interace that takes two file paths and creates a patch file
|
|
40
|
-
// 9. make build zig fast and small to compare sizes and perf and use in cli
|
|
41
|
-
// 10. consider making a standalone repo
|
|
42
|
-
const std = @import("std");
|
|
43
|
-
|
|
44
|
-
const zstd = @cImport({
|
|
45
|
-
@cInclude("zstd.h");
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
const vectorSize = std.simd.suggestVectorSize(u8) orelse 4;
|
|
49
|
-
|
|
50
|
-
// 1. create a bsdiff implementation that supports bzip2 classic bsdiff, and a mode that doesn't compress the patch file at all (so you can apply any compression to the whole file)
|
|
51
|
-
// since only the electrobun cli needs to compress the file size doesn't matter, we just need prebuilt binaries to electrobun build on different platforms
|
|
52
|
-
// 2. compile binaries for every target platform of bsdiff and bspatch with/without bzip2 compression.
|
|
53
|
-
// 2. the electrobun launcher will import the bzip-less bspatch.zig implementation and use the bspatch.zig directly in launcher.zig
|
|
54
|
-
// 4. the launcher will have an alternate mode to decompress a zstd file.
|
|
55
|
-
// 5. the cli will just use exec to run bsdiff against two tar files, it can do this in parallel to compare multiple versions at the same time.
|
|
56
|
-
// 6. the cli will then compress all the patch files with the zstd node library, also in parallel. support maybe the last 5 versions of the app. (configurable)
|
|
57
|
-
// 5. the electrobun bun api will call the launcher in the mode when it needs to decompress a zstd compressed patch file and apply it.
|
|
58
|
-
|
|
59
|
-
// 1. update bsdiff to take file path args instead of hardcoded
|
|
60
|
-
// 2. build bsdiff binary for arm and make it available to the cli
|
|
61
|
-
// 3. update electrobun cli to use bsdiff and the node zstd to generate patches in parallel by spawning multiple processes
|
|
62
|
-
// Note: patches don't contain all the information to create the old file from the new file, so the last x versions need to be kept and downloaded.
|
|
63
|
-
// 4. write the cli logic to download, generate patches, and create the artifacts folder
|
|
64
|
-
// 5. update the launcher binary to include zstd decompress and bspatch.zig directly.
|
|
65
|
-
// 6. create electrobun update api to check for updates, download, apply patches, and restart the app.
|
|
66
|
-
|
|
67
|
-
// 7. then later move bsdiff to its own repo, implement bzip backwards compatability, and a npm package with typescript wrapper.
|
|
68
|
-
pub fn main() !void {
|
|
69
|
-
var allocator = std.heap.page_allocator;
|
|
70
|
-
|
|
71
|
-
var args = try std.process.argsWithAllocator(allocator);
|
|
72
|
-
|
|
73
|
-
defer args.deinit();
|
|
74
|
-
|
|
75
|
-
// skip the first arg which is the program name
|
|
76
|
-
_ = args.skip();
|
|
77
|
-
|
|
78
|
-
const oldFilePath = args.next() orelse "";
|
|
79
|
-
const newFilePath = args.next() orelse "";
|
|
80
|
-
const patchFilePath = args.next() orelse "";
|
|
81
|
-
// By default we compress the blocks with bzip2 to make patches compatible with
|
|
82
|
-
// the original bsdiff implementation.
|
|
83
|
-
// In electrobun we disable block compression and compress the whole patch file with zstd
|
|
84
|
-
// in a separate process.
|
|
85
|
-
const optionUseZstd = args.next() orelse "";
|
|
86
|
-
const useZstd = std.mem.eql(u8, optionUseZstd, "--use-zstd");
|
|
87
|
-
|
|
88
|
-
if (oldFilePath.len == 0 or newFilePath.len == 0 or patchFilePath.len == 0) {
|
|
89
|
-
std.debug.print("Usage: bsdiff <oldFilePath> <newFilePath> <patchFilePath>\n", .{});
|
|
90
|
-
std.debug.print("Usage: bsdiff <oldFilePath> <newFilePath> <patchFilePath> --use-zstd\n", .{});
|
|
91
|
-
std.process.exit(1);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
const oldFile = try std.fs.cwd().openFile(oldFilePath, .{ .mode = .read_only });
|
|
95
|
-
defer oldFile.close();
|
|
96
|
-
|
|
97
|
-
const oldFileSize = try oldFile.getEndPos();
|
|
98
|
-
var oldFileBuff = try allocator.alloc(u8, oldFileSize);
|
|
99
|
-
defer allocator.free(oldFileBuff);
|
|
100
|
-
_ = try oldFile.readAll(oldFileBuff);
|
|
101
|
-
|
|
102
|
-
const newFile = try std.fs.cwd().openFile(newFilePath, .{ .mode = .read_only });
|
|
103
|
-
defer newFile.close();
|
|
104
|
-
|
|
105
|
-
const newFileSize = try newFile.getEndPos();
|
|
106
|
-
var newFileBuff = try allocator.alloc(u8, newFileSize);
|
|
107
|
-
defer allocator.free(newFileBuff);
|
|
108
|
-
_ = try newFile.readAll(newFileBuff);
|
|
109
|
-
|
|
110
|
-
const patch = try calculateDifferences(&allocator, oldFileBuff, newFileBuff, useZstd);
|
|
111
|
-
|
|
112
|
-
// Write the patch file, internal blocks compressed with bzip2
|
|
113
|
-
const patchFile = try std.fs.cwd().createFile(patchFilePath, .{});
|
|
114
|
-
defer patchFile.close();
|
|
115
|
-
|
|
116
|
-
_ = try patchFile.writeAll(patch);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
fn calculateDifferences(allocator: *std.mem.Allocator, oldData: []const u8, newData: []const u8, useZstd: bool) ![]u8 {
|
|
120
|
-
if (!useZstd) {
|
|
121
|
-
std.debug.print("Block compression with bzip2 not yet implemented.\n", .{});
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
// Allocate memory for the suffix array based on the length of the old data
|
|
125
|
-
var suffixIndexes = try allocator.alloc(i64, oldData.len + 1);
|
|
126
|
-
defer allocator.free(suffixIndexes);
|
|
127
|
-
|
|
128
|
-
// Note: This is where a significant amount of time is spent in the diffing process
|
|
129
|
-
// Todo: replace with a more modern suffix sort algorithm like libdivsufsort
|
|
130
|
-
try qsufsortFast(allocator, suffixIndexes, oldData);
|
|
131
|
-
|
|
132
|
-
const newsize = newData.len;
|
|
133
|
-
const oldsize = oldData.len;
|
|
134
|
-
|
|
135
|
-
var streamingBytes = true;
|
|
136
|
-
// compression threads
|
|
137
|
-
// control block
|
|
138
|
-
var controlBlockStreamOffset: usize = 0;
|
|
139
|
-
var controlBlockStream = try allocator.alloc(u8, newsize);
|
|
140
|
-
var controlBlockInput = zstd.ZSTD_inBuffer{ .src = controlBlockStream.ptr, .size = 0, .pos = 0 };
|
|
141
|
-
var controlBlockCompressed = try allocator.alloc(u8, zstd.ZSTD_compressBound(controlBlockStream.len));
|
|
142
|
-
var controlBlockOutput = zstd.ZSTD_outBuffer{ .dst = controlBlockCompressed.ptr, .size = controlBlockCompressed.len, .pos = 0 };
|
|
143
|
-
const controlBlockThread = try std.Thread.spawn(.{}, compressBlockStream, .{ &controlBlockInput, &controlBlockOutput, &streamingBytes });
|
|
144
|
-
// diff block
|
|
145
|
-
// var diffBlockStreamOffset: usize = 0;
|
|
146
|
-
var diffBlockStream = try allocator.alloc(u8, newsize);
|
|
147
|
-
var diffBlockInput = zstd.ZSTD_inBuffer{ .src = diffBlockStream.ptr, .size = 0, .pos = 0 };
|
|
148
|
-
var diffBlockCompressed = try allocator.alloc(u8, zstd.ZSTD_compressBound(diffBlockStream.len));
|
|
149
|
-
var diffBlockOutput = zstd.ZSTD_outBuffer{ .dst = diffBlockCompressed.ptr, .size = diffBlockCompressed.len, .pos = 0 };
|
|
150
|
-
const diffBlockThread = try std.Thread.spawn(.{}, compressBlockStream, .{ &diffBlockInput, &diffBlockOutput, &streamingBytes });
|
|
151
|
-
// extra block
|
|
152
|
-
var extraBlockStream = try allocator.alloc(u8, newsize);
|
|
153
|
-
var extraBlockInput = zstd.ZSTD_inBuffer{ .src = extraBlockStream.ptr, .size = 0, .pos = 0 };
|
|
154
|
-
var extraBlockCompressed = try allocator.alloc(u8, zstd.ZSTD_compressBound(extraBlockStream.len));
|
|
155
|
-
var extraBlockOutput = zstd.ZSTD_outBuffer{ .dst = extraBlockCompressed.ptr, .size = extraBlockCompressed.len, .pos = 0 };
|
|
156
|
-
const extraBlockThread = try std.Thread.spawn(.{}, compressBlockStream, .{ &extraBlockInput, &extraBlockOutput, &streamingBytes });
|
|
157
|
-
|
|
158
|
-
// Header is
|
|
159
|
-
// 0 8 "BSDIFF40" or "TRDIFF10" // The only difference in file format is bzip2 vs zstd compression of the blocks
|
|
160
|
-
// 8 8 length of ctrl block i64
|
|
161
|
-
// 16 8 length of diff block i64
|
|
162
|
-
// 24 8 length of extra block i64
|
|
163
|
-
// File is
|
|
164
|
-
// 0 32 Header
|
|
165
|
-
// 32 ?? ctrl block uncompresses to i64
|
|
166
|
-
// ?? ?? diff block uncompresses to i8
|
|
167
|
-
// ?? ?? extra block uncompresses to u8
|
|
168
|
-
|
|
169
|
-
// Placeholder for the buffer used in offtout
|
|
170
|
-
var buffer = [_]u8{0} ** 8;
|
|
171
|
-
|
|
172
|
-
// Initialize variables for tracking positions and scores during the diffing process
|
|
173
|
-
var scanIndex: i64 = 0;
|
|
174
|
-
var matchLength: i64 = 0;
|
|
175
|
-
var lastScanIndex: i64 = 0;
|
|
176
|
-
var lastMatchPosition: i64 = 0;
|
|
177
|
-
var lastOffset: i64 = 0;
|
|
178
|
-
var matchScore: i64 = 0;
|
|
179
|
-
var matchPosition: i64 = 0;
|
|
180
|
-
|
|
181
|
-
// More variables for managing the diffing process
|
|
182
|
-
var scoreCounter: i64 = 0;
|
|
183
|
-
var forwardScore: i64 = 0;
|
|
184
|
-
var forwardLength: i64 = 0;
|
|
185
|
-
var backwardScore: i64 = 0;
|
|
186
|
-
var backwardLength: i64 = 0;
|
|
187
|
-
|
|
188
|
-
// Variables for handling overlaps in the diffing process
|
|
189
|
-
var overlapLength: i64 = 0;
|
|
190
|
-
var bestOverlapScore: i64 = 0;
|
|
191
|
-
var bestOverlapLength: i64 = 0;
|
|
192
|
-
|
|
193
|
-
// var controlBlockOffset: usize = 0;
|
|
194
|
-
|
|
195
|
-
// Begin the main loop for calculating differences
|
|
196
|
-
while (scanIndex < newsize) {
|
|
197
|
-
matchScore = 0;
|
|
198
|
-
scanIndex += matchLength;
|
|
199
|
-
scoreCounter = scanIndex;
|
|
200
|
-
|
|
201
|
-
// Loop through newData, searching for matches in oldData
|
|
202
|
-
while (scanIndex < newsize) {
|
|
203
|
-
// Note: most of the time during the diffing phase is spend in search()
|
|
204
|
-
matchLength = @intCast(search(suffixIndexes, oldData, newData[@intCast(scanIndex)..], 0, @intCast(oldsize), &matchPosition));
|
|
205
|
-
|
|
206
|
-
// Increment matchScore based on direct matches between newData and shifted oldData
|
|
207
|
-
while (scoreCounter < scanIndex + matchLength) {
|
|
208
|
-
const currentScanPos = scoreCounter + lastOffset;
|
|
209
|
-
if (currentScanPos < oldsize and oldData[@intCast(currentScanPos)] == newData[@intCast(scoreCounter)]) {
|
|
210
|
-
matchScore += 1;
|
|
211
|
-
}
|
|
212
|
-
scoreCounter += 1;
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
// Break conditions for optimizing the search process
|
|
216
|
-
if (matchLength == matchScore and matchLength != 0) {
|
|
217
|
-
break;
|
|
218
|
-
}
|
|
219
|
-
if (matchLength > matchScore + 8) {
|
|
220
|
-
break;
|
|
221
|
-
}
|
|
222
|
-
if (scanIndex + lastOffset < oldsize and oldData[@intCast(scanIndex + lastOffset)] == newData[@intCast(scanIndex)]) {
|
|
223
|
-
matchScore -= 1;
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
scanIndex += 1;
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
// After finding a match, calculate the forward and backward lengths for the diff and extra blocks
|
|
230
|
-
if (matchLength != matchScore or scanIndex == newsize) {
|
|
231
|
-
scoreCounter = 0;
|
|
232
|
-
forwardScore = 0;
|
|
233
|
-
forwardLength = 0;
|
|
234
|
-
var i: i64 = 0;
|
|
235
|
-
|
|
236
|
-
// Calculate forward length - how much data from the old file matches directly after the current position
|
|
237
|
-
while (lastScanIndex + i < scanIndex and lastMatchPosition + i < oldsize) {
|
|
238
|
-
if (oldData[@intCast(lastMatchPosition + i)] == newData[@intCast(lastScanIndex + i)]) {
|
|
239
|
-
scoreCounter += 1;
|
|
240
|
-
}
|
|
241
|
-
i += 1;
|
|
242
|
-
if (scoreCounter * 2 - i > forwardScore * 2 - forwardLength) {
|
|
243
|
-
forwardScore = scoreCounter;
|
|
244
|
-
forwardLength = i;
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
// Calculate backward length - similar to forward length but in the opposite direction
|
|
249
|
-
backwardLength = 0;
|
|
250
|
-
if (scanIndex < newsize) {
|
|
251
|
-
scoreCounter = 0;
|
|
252
|
-
backwardScore = 0;
|
|
253
|
-
i = 1;
|
|
254
|
-
while (scanIndex >= lastScanIndex + i and matchPosition >= i) {
|
|
255
|
-
if (oldData[@intCast(matchPosition - i)] == newData[@intCast(scanIndex - i)]) {
|
|
256
|
-
scoreCounter += 1;
|
|
257
|
-
}
|
|
258
|
-
if (scoreCounter * 2 - i > backwardScore * 2 - backwardLength) {
|
|
259
|
-
backwardScore = scoreCounter;
|
|
260
|
-
backwardLength = i;
|
|
261
|
-
}
|
|
262
|
-
i += 1;
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
// Handle overlaps between forward and backward matches
|
|
267
|
-
if (lastScanIndex + forwardLength > scanIndex - backwardLength) {
|
|
268
|
-
overlapLength = (lastScanIndex + forwardLength) - (scanIndex - backwardLength);
|
|
269
|
-
scoreCounter = 0;
|
|
270
|
-
bestOverlapScore = 0;
|
|
271
|
-
bestOverlapLength = 0;
|
|
272
|
-
i = 0;
|
|
273
|
-
|
|
274
|
-
while (i < overlapLength) {
|
|
275
|
-
if (newData[@intCast(lastScanIndex + forwardLength - overlapLength + i)] == oldData[@intCast(lastMatchPosition + forwardLength - overlapLength + i)]) {
|
|
276
|
-
scoreCounter += 1;
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
if (newData[@intCast(scanIndex - backwardLength + i)] == oldData[@intCast(matchPosition - backwardLength + i)]) {
|
|
280
|
-
scoreCounter -= 1;
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
if (scoreCounter > bestOverlapScore) {
|
|
284
|
-
bestOverlapScore = scoreCounter;
|
|
285
|
-
bestOverlapLength = i + 1;
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
i += 1;
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
forwardLength += bestOverlapLength - overlapLength;
|
|
292
|
-
backwardLength -= bestOverlapLength;
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
i = 0;
|
|
296
|
-
|
|
297
|
-
// Write the calculated diff and extra data to their respective blocks
|
|
298
|
-
while (i < forwardLength) {
|
|
299
|
-
// perf: use simd for calculations where possible
|
|
300
|
-
if (i + vectorSize <= forwardLength) {
|
|
301
|
-
var oldpos: usize = @intCast(lastMatchPosition + i);
|
|
302
|
-
var newpos: usize = @intCast(lastScanIndex + i);
|
|
303
|
-
var diffpos: usize = @intCast(diffBlockInput.size + @as(usize, @intCast(i)));
|
|
304
|
-
|
|
305
|
-
const newVec: @Vector(vectorSize, u8) = newData[newpos..][0..vectorSize].*;
|
|
306
|
-
const oldVec: @Vector(vectorSize, u8) = oldData[oldpos..][0..vectorSize].*;
|
|
307
|
-
const resultVec = @subWithOverflow(newVec, oldVec)[0];
|
|
308
|
-
const resultArray: [vectorSize]u8 = resultVec;
|
|
309
|
-
@memcpy(diffBlockStream[diffpos..][0..vectorSize], &resultArray);
|
|
310
|
-
|
|
311
|
-
i += vectorSize;
|
|
312
|
-
continue;
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
const newByte: u8 = newData[@intCast(lastScanIndex + i)];
|
|
316
|
-
const oldByte: u8 = oldData[@intCast(lastMatchPosition + i)];
|
|
317
|
-
const diffByte: u8 = @subWithOverflow(newByte, oldByte)[0];
|
|
318
|
-
|
|
319
|
-
diffBlockStream[@intCast(diffBlockInput.size + @as(usize, @intCast(i)))] = diffByte;
|
|
320
|
-
|
|
321
|
-
i += 1;
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
i = 0;
|
|
325
|
-
|
|
326
|
-
// Write extra data that doesn't match directly but needs to be added to the new data
|
|
327
|
-
const newBytesAded = (scanIndex - backwardLength) - (lastScanIndex + forwardLength);
|
|
328
|
-
|
|
329
|
-
// Note: Oddly doing a @memcpy here is significantly slower than a loop
|
|
330
|
-
while (i < newBytesAded) {
|
|
331
|
-
// extraBlock[@intCast(extraBlockInput.size + @as(usize, @intCast(i)))] = newData[@intCast(lastScanIndex + forwardLength + i)];
|
|
332
|
-
extraBlockStream[@intCast(extraBlockInput.size + @as(usize, @intCast(i)))] = newData[@intCast(lastScanIndex + forwardLength + i)];
|
|
333
|
-
i += 1;
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
const readDiffBy = forwardLength;
|
|
337
|
-
const readExtraBy = newBytesAded;
|
|
338
|
-
const seekBy = (matchPosition - backwardLength) - (lastMatchPosition + forwardLength);
|
|
339
|
-
|
|
340
|
-
// Update lengths and control block information for the next iteration
|
|
341
|
-
diffBlockInput.size += @intCast(readDiffBy);
|
|
342
|
-
extraBlockInput.size += @intCast(readExtraBy);
|
|
343
|
-
|
|
344
|
-
offtout(readDiffBy, controlBlockStream[controlBlockStreamOffset..][0..8]);
|
|
345
|
-
controlBlockStreamOffset += 8;
|
|
346
|
-
offtout(readExtraBy, controlBlockStream[controlBlockStreamOffset..][0..8]);
|
|
347
|
-
controlBlockStreamOffset += 8;
|
|
348
|
-
offtout(seekBy, controlBlockStream[controlBlockStreamOffset..][0..8]);
|
|
349
|
-
controlBlockStreamOffset += 8;
|
|
350
|
-
controlBlockInput.size = controlBlockStreamOffset;
|
|
351
|
-
|
|
352
|
-
// Update positions for the next loop iteration
|
|
353
|
-
lastScanIndex = scanIndex - backwardLength;
|
|
354
|
-
lastMatchPosition = matchPosition - backwardLength;
|
|
355
|
-
lastOffset = matchPosition - scanIndex;
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
// Tell the compression threads to wrap up and wait for them
|
|
360
|
-
streamingBytes = false;
|
|
361
|
-
diffBlockThread.join();
|
|
362
|
-
controlBlockThread.join();
|
|
363
|
-
extraBlockThread.join();
|
|
364
|
-
|
|
365
|
-
// Combine header, diffBlock, and extraBlock into a single byte slice to return
|
|
366
|
-
const headerLength = 32;
|
|
367
|
-
|
|
368
|
-
var patch = try allocator.alloc(u8, headerLength + controlBlockOutput.pos + diffBlockOutput.pos + extraBlockOutput.pos);
|
|
369
|
-
// write the header compressed
|
|
370
|
-
@memcpy(patch[0..8], "TRDIFF10");
|
|
371
|
-
|
|
372
|
-
offtout(@intCast(controlBlockOutput.pos), &buffer);
|
|
373
|
-
@memcpy(patch[8..16], &buffer);
|
|
374
|
-
|
|
375
|
-
offtout(@intCast(diffBlockOutput.pos), &buffer);
|
|
376
|
-
@memcpy(patch[16..24], &buffer);
|
|
377
|
-
|
|
378
|
-
offtout(@intCast(newsize), &buffer);
|
|
379
|
-
@memcpy(patch[24..32], &buffer);
|
|
380
|
-
|
|
381
|
-
var patchFileOffset: usize = headerLength;
|
|
382
|
-
@memcpy(patch[patchFileOffset..][0..controlBlockOutput.pos], controlBlockCompressed.ptr);
|
|
383
|
-
patchFileOffset += controlBlockOutput.pos;
|
|
384
|
-
|
|
385
|
-
@memcpy(patch[patchFileOffset..][0..diffBlockOutput.pos], diffBlockCompressed.ptr);
|
|
386
|
-
patchFileOffset += diffBlockOutput.pos;
|
|
387
|
-
|
|
388
|
-
@memcpy(patch[patchFileOffset..][0..extraBlockOutput.pos], extraBlockCompressed.ptr);
|
|
389
|
-
patchFileOffset += extraBlockOutput.pos;
|
|
390
|
-
|
|
391
|
-
return patch;
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
var totalCompressedSize: usize = 0;
|
|
395
|
-
|
|
396
|
-
// Notes on Zstd:
|
|
397
|
-
// compressed output between single shot and streaming with a single frame is roughly the same.
|
|
398
|
-
// with a single frame zstd takes roughly 20% longer to compress the same data. but with streaming you can compress in parallel to the actual diffing in another thread.
|
|
399
|
-
fn compressBlock(allocator: *std.mem.Allocator, block: []const u8) !void {
|
|
400
|
-
// non-streaming
|
|
401
|
-
const maxCompressedSize = zstd.ZSTD_compressBound(block.len);
|
|
402
|
-
var compressedBlock = try allocator.alloc(u8, maxCompressedSize);
|
|
403
|
-
// defer allocator.free(compressedBlock);
|
|
404
|
-
|
|
405
|
-
const compressedSize = zstd.ZSTD_compress(compressedBlock.ptr, compressedBlock.len, block.ptr, block.len, 22);
|
|
406
|
-
totalCompressedSize += compressedSize;
|
|
407
|
-
// return compressedSize;
|
|
408
|
-
// return compressedBlock[0..compressedSize];
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
fn compressBlockStream(input: *zstd.ZSTD_inBuffer, output: *zstd.ZSTD_outBuffer, streamingBytes: *bool) !void {
|
|
412
|
-
const cstream = zstd.ZSTD_createCStream();
|
|
413
|
-
defer {
|
|
414
|
-
_ = zstd.ZSTD_freeCStream(cstream);
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
// Note: Experimentally there's no significant difference between 19 and 22 with regard to compression output
|
|
418
|
-
// creates smaller output at 19 than bzip2. However there is a huge time cost between 19 and 22, roughly 20% longer.
|
|
419
|
-
// setting this to 22 the total bsdiff time matches the original bsdiff c implementation
|
|
420
|
-
// setting this to 19 the total bsdiff time is roughly 20% faster than the original bsdiff c implementation
|
|
421
|
-
// in both cases the output is roughly 10% smaller.
|
|
422
|
-
// obviously this will vary based on the data being compressed.
|
|
423
|
-
_ = zstd.ZSTD_initCStream(cstream, 19);
|
|
424
|
-
|
|
425
|
-
while (streamingBytes.* or input.pos < input.size) {
|
|
426
|
-
if (input.pos < input.size) {
|
|
427
|
-
_ = zstd.ZSTD_compressStream(cstream, output, input);
|
|
428
|
-
} else {
|
|
429
|
-
std.time.sleep(std.time.ns_per_ms * 10);
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
|
|
433
|
-
_ = zstd.ZSTD_endStream(cstream, output);
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
// offtout puts an int64 (little endian) to buf
|
|
437
|
-
fn offtout(x: i64, buf: []u8) void {
|
|
438
|
-
var y: u64 = undefined;
|
|
439
|
-
if (x < 0) {
|
|
440
|
-
y = @as(u64, @bitCast(-x)) | 0x8000000000000000;
|
|
441
|
-
} else {
|
|
442
|
-
y = @as(u64, @bitCast(x));
|
|
443
|
-
}
|
|
444
|
-
|
|
445
|
-
buf[0] = @intCast(y & 0xFF);
|
|
446
|
-
buf[1] = @intCast((y >> 8) & 0xFF);
|
|
447
|
-
buf[2] = @intCast((y >> 16) & 0xFF);
|
|
448
|
-
buf[3] = @intCast((y >> 24) & 0xFF);
|
|
449
|
-
buf[4] = @intCast((y >> 32) & 0xFF);
|
|
450
|
-
buf[5] = @intCast((y >> 40) & 0xFF);
|
|
451
|
-
buf[6] = @intCast((y >> 48) & 0xFF);
|
|
452
|
-
buf[7] = @intCast((y >> 56) & 0xFF);
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
/// Do a binary search to find the longest match of `newData` within `oldData` using precomputed suffixIndexes.
|
|
456
|
-
fn search(suffixIndexes: []i64, oldData: []const u8, newData: []const u8, from: usize, to: usize, bestMatchPosition: *i64) usize {
|
|
457
|
-
var midPoint: usize = 0;
|
|
458
|
-
var matchLength: usize = 0;
|
|
459
|
-
const oldDataSize = oldData.len;
|
|
460
|
-
const newDataSize = newData.len;
|
|
461
|
-
const searchLength = to - from;
|
|
462
|
-
|
|
463
|
-
// Base case: If the search range is less than 2, directly compare the matches at the start and end points.
|
|
464
|
-
if (searchLength < 2) {
|
|
465
|
-
midPoint = matchlenFast(oldData[@intCast(suffixIndexes[from])..], newData);
|
|
466
|
-
matchLength = matchlenFast(oldData[@intCast(suffixIndexes[to])..], newData);
|
|
467
|
-
|
|
468
|
-
if (midPoint > matchLength) {
|
|
469
|
-
bestMatchPosition.* = suffixIndexes[from];
|
|
470
|
-
return midPoint;
|
|
471
|
-
}
|
|
472
|
-
bestMatchPosition.* = suffixIndexes[to];
|
|
473
|
-
return matchLength;
|
|
474
|
-
}
|
|
475
|
-
|
|
476
|
-
// Calculate the midpoint of the current search range.
|
|
477
|
-
midPoint = from + @divTrunc((searchLength), 2);
|
|
478
|
-
// Determine the length to compare based on the remaining length in `oldData` and the total length of `newData`.
|
|
479
|
-
const compareLength = @min(oldDataSize - @as(usize, @intCast(suffixIndexes[midPoint])), newDataSize);
|
|
480
|
-
const compareFrom: usize = @intCast(suffixIndexes[midPoint]);
|
|
481
|
-
// Compare the substring of `oldData` starting from `compareStart` with the beginning of `newData`.
|
|
482
|
-
const compareResult = compareSlicesFast(oldData[compareFrom .. compareFrom + compareLength], newData[0..compareLength]);
|
|
483
|
-
|
|
484
|
-
// Recursively search in the half of the range where the comparison indicates the match might be found.
|
|
485
|
-
if (compareResult < 0) {
|
|
486
|
-
return search(suffixIndexes, oldData, newData, midPoint, to, bestMatchPosition);
|
|
487
|
-
} else {
|
|
488
|
-
return search(suffixIndexes, oldData, newData, from, midPoint, bestMatchPosition);
|
|
489
|
-
}
|
|
490
|
-
}
|
|
491
|
-
|
|
492
|
-
fn compareSlicesOrig(a: []const u8, b: []const u8) i64 {
|
|
493
|
-
const minSize = @min(a.len, b.len);
|
|
494
|
-
// std.debug.print("minSize: {}\n", .{minSize});
|
|
495
|
-
for (0..minSize) |i| {
|
|
496
|
-
if (a[i] < b[i]) return -1;
|
|
497
|
-
if (a[i] > b[i]) return 1;
|
|
498
|
-
}
|
|
499
|
-
|
|
500
|
-
// If all compared elements are equal, decide based on length
|
|
501
|
-
if (a.len < b.len) return -1;
|
|
502
|
-
if (a.len > b.len) return 1;
|
|
503
|
-
return 0;
|
|
504
|
-
}
|
|
505
|
-
|
|
506
|
-
// For two 48MB files doing lookaheads makes it about 6.5 seconds (30%) faster
|
|
507
|
-
// this is because for software updates the files are typically mostly the same
|
|
508
|
-
// and this function tends to compare large swaths of the file in one go as it
|
|
509
|
-
// bisects down
|
|
510
|
-
fn compareSlicesFast(a: []const u8, b: []const u8) i64 {
|
|
511
|
-
const minSize = @min(a.len, b.len);
|
|
512
|
-
var i: usize = 0;
|
|
513
|
-
var lookAheadIndex: usize = 0;
|
|
514
|
-
var lookAheadDistance: usize = 8;
|
|
515
|
-
|
|
516
|
-
while (i < minSize) {
|
|
517
|
-
if (i >= lookAheadIndex and i + lookAheadDistance < minSize) {
|
|
518
|
-
while (i + lookAheadDistance < minSize) {
|
|
519
|
-
lookAheadIndex = i + lookAheadDistance;
|
|
520
|
-
|
|
521
|
-
const aSlice = a[i..lookAheadIndex];
|
|
522
|
-
const bSlice = b[i..lookAheadIndex];
|
|
523
|
-
|
|
524
|
-
const aSlicePointer: *const [8]u8 = @ptrCast(&aSlice[0]);
|
|
525
|
-
const bSlicePointer: *const [8]u8 = @ptrCast(&bSlice[0]);
|
|
526
|
-
|
|
527
|
-
const aAs64 = std.mem.readIntBig(u64, aSlicePointer);
|
|
528
|
-
const bAs64 = std.mem.readIntBig(u64, bSlicePointer);
|
|
529
|
-
|
|
530
|
-
if (aAs64 == bAs64) {
|
|
531
|
-
i = lookAheadIndex;
|
|
532
|
-
} else {
|
|
533
|
-
break;
|
|
534
|
-
}
|
|
535
|
-
}
|
|
536
|
-
}
|
|
537
|
-
|
|
538
|
-
// perf: 0 and -1 tend to be most common, so check those first
|
|
539
|
-
if (a[i] == b[i]) {
|
|
540
|
-
i += 1;
|
|
541
|
-
continue;
|
|
542
|
-
} else if (a[i] < b[i]) {
|
|
543
|
-
return -1;
|
|
544
|
-
} else {
|
|
545
|
-
return 1;
|
|
546
|
-
}
|
|
547
|
-
|
|
548
|
-
if (a[i] == b[i]) {
|
|
549
|
-
i += 1;
|
|
550
|
-
continue;
|
|
551
|
-
} else if (a[i] < b[i]) {
|
|
552
|
-
return -1;
|
|
553
|
-
} else {
|
|
554
|
-
return 1;
|
|
555
|
-
}
|
|
556
|
-
|
|
557
|
-
// i += 1;
|
|
558
|
-
// std.debug.print("match: {}\n", .{i});
|
|
559
|
-
}
|
|
560
|
-
// If all compared elements are equal, decide based on length
|
|
561
|
-
// perf: when used in the diffing algorithm search function
|
|
562
|
-
// these tend to be equal when we get here, so check that first
|
|
563
|
-
// this saves a surprising amount of time. for file diffs that take 20 seconds
|
|
564
|
-
// with the c bsdiff, this saves about 500ms.
|
|
565
|
-
if (a.len == b.len) {
|
|
566
|
-
return 0;
|
|
567
|
-
} else if (a.len < b.len) {
|
|
568
|
-
return -1;
|
|
569
|
-
} else {
|
|
570
|
-
return 1;
|
|
571
|
-
}
|
|
572
|
-
}
|
|
573
|
-
|
|
574
|
-
/// Calculates the length of the longest prefix match between two byte arrays using a lookahead optimization.
|
|
575
|
-
// in practice the total iterations using matchlenFast are around 16% of the total iterations needed by a brute force matchlen
|
|
576
|
-
// eg: diff did 297,101,075 total iterations instead of 1,852,824,342
|
|
577
|
-
// on m1 max it shaves about 4% off the total time when diffing two 48MB files
|
|
578
|
-
fn matchlenFast(oldData: []const u8, newData: []const u8) usize {
|
|
579
|
-
var matchLength: usize = 0;
|
|
580
|
-
var lookAheadIndex: usize = 0;
|
|
581
|
-
// This works well with 8, you tend be able to skip more iteration loops and get more matches with 7
|
|
582
|
-
// eg: in a 48MB file diff, you skip an additional 50 million iterations with 7 than with 8
|
|
583
|
-
var lookAheadDistance: usize = 7;
|
|
584
|
-
|
|
585
|
-
const oldsize = oldData.len;
|
|
586
|
-
const newsize = newData.len;
|
|
587
|
-
const minSize = @min(oldsize, newsize);
|
|
588
|
-
|
|
589
|
-
while (matchLength < minSize) {
|
|
590
|
-
// perf: Go faster by comparing 7 bytes at a time
|
|
591
|
-
if (matchLength >= lookAheadIndex and matchLength + lookAheadDistance < minSize) {
|
|
592
|
-
while (matchLength + lookAheadDistance < minSize) {
|
|
593
|
-
lookAheadIndex = matchLength + lookAheadDistance;
|
|
594
|
-
|
|
595
|
-
const oldSlice = oldData[matchLength..lookAheadIndex];
|
|
596
|
-
const newSlice = newData[matchLength..lookAheadIndex];
|
|
597
|
-
|
|
598
|
-
const oldSlicePointer: *const [7]u8 = @ptrCast(&oldSlice[0]);
|
|
599
|
-
const newSlicePointer: *const [7]u8 = @ptrCast(&newSlice[0]);
|
|
600
|
-
|
|
601
|
-
const oldAs56 = std.mem.readIntBig(u56, oldSlicePointer);
|
|
602
|
-
const newAs56 = std.mem.readIntBig(u56, newSlicePointer);
|
|
603
|
-
|
|
604
|
-
if (oldAs56 == newAs56) {
|
|
605
|
-
matchLength = lookAheadIndex;
|
|
606
|
-
} else {
|
|
607
|
-
break;
|
|
608
|
-
}
|
|
609
|
-
}
|
|
610
|
-
}
|
|
611
|
-
|
|
612
|
-
if (oldData[matchLength] != newData[matchLength]) {
|
|
613
|
-
break;
|
|
614
|
-
}
|
|
615
|
-
matchLength += 1;
|
|
616
|
-
}
|
|
617
|
-
return matchLength;
|
|
618
|
-
}
|
|
619
|
-
|
|
620
|
-
fn qsufsortFast(allocator: *std.mem.Allocator, suffixIndexes: []i64, buf: []const u8) !void {
|
|
621
|
-
// perf: instead of creating a buckets array of 256 elements, and shifting them over one index back and forth in the alogirthm,
|
|
622
|
-
// we can create a slightly longer array, and just reposition the slice which should be a bit faster
|
|
623
|
-
|
|
624
|
-
var _buckets: [257]i64 = [_]i64{0} ** 257;
|
|
625
|
-
var buckets = _buckets[1..];
|
|
626
|
-
|
|
627
|
-
// inverse of the suffix array, sorted array of suffixes. indexes are suffixes sorted longest to shortest, values the index of the first character group in the sorted array
|
|
628
|
-
const inverseSuffix = try allocator.alloc(i64, suffixIndexes.len);
|
|
629
|
-
defer allocator.free(inverseSuffix);
|
|
630
|
-
const bufzise = buf.len;
|
|
631
|
-
const bufzisePlusOne: i64 = @intCast(buf.len + 1);
|
|
632
|
-
var startTime = std.time.milliTimestamp();
|
|
633
|
-
|
|
634
|
-
for (buf) |b| {
|
|
635
|
-
buckets[b] += 1;
|
|
636
|
-
}
|
|
637
|
-
|
|
638
|
-
startTime = std.time.milliTimestamp();
|
|
639
|
-
|
|
640
|
-
// looping up, set each element to the sum of the previous elements
|
|
641
|
-
// bucket[1] = bucket[0] + bucket[1];
|
|
642
|
-
// this effectively makes them the starting index of the next bucket
|
|
643
|
-
for (1..256) |i| {
|
|
644
|
-
buckets[i] += buckets[i - 1];
|
|
645
|
-
}
|
|
646
|
-
|
|
647
|
-
// looping down, shift each element one index to the right
|
|
648
|
-
// bucket[255] = bucket[254];
|
|
649
|
-
// then set bucket[0] = 0;
|
|
650
|
-
buckets = _buckets[0..256];
|
|
651
|
-
|
|
652
|
-
buckets[0] = 0;
|
|
653
|
-
// incrementing each 'starting index' for each bucket to get the 'next index for that bucket'
|
|
654
|
-
// use the index to set the position of each suffix
|
|
655
|
-
for (buf, 0..) |b, i| {
|
|
656
|
-
buckets[b] += 1;
|
|
657
|
-
// Note: in zig array indexes are assumed to be usize, so we need to cast i64 to usize
|
|
658
|
-
suffixIndexes[@intCast(buckets[@intCast(b)])] = @intCast(i);
|
|
659
|
-
}
|
|
660
|
-
// at this point we have the suffixes sorted by bucket
|
|
661
|
-
|
|
662
|
-
startTime = std.time.milliTimestamp();
|
|
663
|
-
suffixIndexes[0] = @intCast(bufzise);
|
|
664
|
-
|
|
665
|
-
// create inverseSuffix that maps each suffix to the last index of
|
|
666
|
-
// that suffix grouping in the semi-sorted array.
|
|
667
|
-
for (buf, 0..) |b, i| {
|
|
668
|
-
inverseSuffix[i] = buckets[b];
|
|
669
|
-
}
|
|
670
|
-
|
|
671
|
-
startTime = std.time.milliTimestamp();
|
|
672
|
-
|
|
673
|
-
inverseSuffix[bufzise] = 0;
|
|
674
|
-
|
|
675
|
-
for (1..256) |i| {
|
|
676
|
-
if (buckets[i] == buckets[i - 1] + 1) {
|
|
677
|
-
suffixIndexes[@intCast(buckets[i])] = -1;
|
|
678
|
-
}
|
|
679
|
-
}
|
|
680
|
-
|
|
681
|
-
suffixIndexes[0] = -1;
|
|
682
|
-
|
|
683
|
-
var h: i64 = 1;
|
|
684
|
-
while (suffixIndexes[0] != -bufzisePlusOne) {
|
|
685
|
-
var ln: i64 = 0;
|
|
686
|
-
var i: i64 = 0;
|
|
687
|
-
while (i < bufzisePlusOne) {
|
|
688
|
-
const suffixIndexesI = suffixIndexes[@intCast(i)];
|
|
689
|
-
if (suffixIndexesI < 0) {
|
|
690
|
-
ln -= suffixIndexesI;
|
|
691
|
-
i -= suffixIndexesI;
|
|
692
|
-
} else {
|
|
693
|
-
if (ln != 0) {
|
|
694
|
-
suffixIndexes[@intCast(i - ln)] = -ln;
|
|
695
|
-
}
|
|
696
|
-
ln = inverseSuffix[@intCast(suffixIndexesI)] + 1 - i;
|
|
697
|
-
split(suffixIndexes, inverseSuffix, i, ln, h);
|
|
698
|
-
i += ln;
|
|
699
|
-
ln = 0;
|
|
700
|
-
}
|
|
701
|
-
}
|
|
702
|
-
if (ln != 0) {
|
|
703
|
-
suffixIndexes[@intCast(i - ln)] = -ln;
|
|
704
|
-
}
|
|
705
|
-
h += h;
|
|
706
|
-
}
|
|
707
|
-
|
|
708
|
-
startTime = std.time.milliTimestamp();
|
|
709
|
-
|
|
710
|
-
for (0..buf.len) |i| {
|
|
711
|
-
suffixIndexes[@intCast(inverseSuffix[@intCast(i)])] = @intCast(i);
|
|
712
|
-
}
|
|
713
|
-
|
|
714
|
-
startTime = std.time.milliTimestamp();
|
|
715
|
-
|
|
716
|
-
suffixIndexes[0] = 0;
|
|
717
|
-
}
|
|
718
|
-
|
|
719
|
-
var swapTemp: i64 = 0;
|
|
720
|
-
|
|
721
|
-
fn split(suffixIndexes: []i64, inverseSuffix: []i64, start: i64, ln: i64, h: i64) void {
|
|
722
|
-
var i: i64 = 0;
|
|
723
|
-
var j: i64 = 0;
|
|
724
|
-
var k: i64 = 0;
|
|
725
|
-
var x: i64 = 0;
|
|
726
|
-
var jj: i64 = 0;
|
|
727
|
-
var kk: i64 = 0;
|
|
728
|
-
|
|
729
|
-
if (ln < 16) {
|
|
730
|
-
k = start;
|
|
731
|
-
const end = start + ln;
|
|
732
|
-
while (k < end) {
|
|
733
|
-
j = 1;
|
|
734
|
-
x = inverseSuffix[@intCast(suffixIndexes[@intCast(k)] + h)];
|
|
735
|
-
i = 1;
|
|
736
|
-
|
|
737
|
-
while (k + i < end) {
|
|
738
|
-
const KplusI: usize = @intCast(k + i);
|
|
739
|
-
const suffixIndexesKplusI: usize = @intCast(suffixIndexes[KplusI]);
|
|
740
|
-
const suffixIndexesKplusIh: usize = @intCast(suffixIndexesKplusI + @as(usize, @intCast(h)));
|
|
741
|
-
const inverseSuffixsuffixIndexeskPlusIh: i64 = inverseSuffix[suffixIndexesKplusIh];
|
|
742
|
-
|
|
743
|
-
if (inverseSuffixsuffixIndexeskPlusIh < x) {
|
|
744
|
-
x = inverseSuffixsuffixIndexeskPlusIh;
|
|
745
|
-
j = 0;
|
|
746
|
-
}
|
|
747
|
-
if (inverseSuffixsuffixIndexeskPlusIh == x) {
|
|
748
|
-
const kPlusJ: usize = @intCast(k + j);
|
|
749
|
-
swapTemp = suffixIndexes[kPlusJ];
|
|
750
|
-
suffixIndexes[kPlusJ] = @intCast(suffixIndexesKplusI);
|
|
751
|
-
suffixIndexes[KplusI] = swapTemp;
|
|
752
|
-
j += 1;
|
|
753
|
-
}
|
|
754
|
-
|
|
755
|
-
i += 1;
|
|
756
|
-
}
|
|
757
|
-
|
|
758
|
-
const kPlusJMinus1: i64 = k + j - 1;
|
|
759
|
-
const k_usize: usize = @intCast(k);
|
|
760
|
-
for (0..@intCast(j)) |ii| {
|
|
761
|
-
inverseSuffix[@intCast(suffixIndexes[k_usize + ii])] = kPlusJMinus1;
|
|
762
|
-
}
|
|
763
|
-
|
|
764
|
-
if (j == 1) suffixIndexes[@intCast(k)] = -1;
|
|
765
|
-
k += j;
|
|
766
|
-
}
|
|
767
|
-
return;
|
|
768
|
-
}
|
|
769
|
-
|
|
770
|
-
x = inverseSuffix[@intCast(suffixIndexes[@intCast(start + (@divTrunc(ln, 2)))] + h)];
|
|
771
|
-
kk = 0;
|
|
772
|
-
jj = kk;
|
|
773
|
-
|
|
774
|
-
i = start;
|
|
775
|
-
const startPlusLn: i64 = start + ln;
|
|
776
|
-
while (i < startPlusLn) {
|
|
777
|
-
const inverseSuffixsuffixIndexesIPlusH: i64 = inverseSuffix[@intCast(suffixIndexes[@intCast(i)] + h)];
|
|
778
|
-
if (inverseSuffixsuffixIndexesIPlusH < x) {
|
|
779
|
-
jj += 1;
|
|
780
|
-
} else if (inverseSuffixsuffixIndexesIPlusH == x) {
|
|
781
|
-
kk += 1;
|
|
782
|
-
}
|
|
783
|
-
|
|
784
|
-
i += 1;
|
|
785
|
-
}
|
|
786
|
-
|
|
787
|
-
jj += start;
|
|
788
|
-
kk += jj;
|
|
789
|
-
|
|
790
|
-
i = start;
|
|
791
|
-
k = 0;
|
|
792
|
-
j = k;
|
|
793
|
-
|
|
794
|
-
while (i < jj) {
|
|
795
|
-
const inverseSuffixsuffixIndexesIPlusH: i64 = inverseSuffix[@intCast(suffixIndexes[@intCast(i)] + h)];
|
|
796
|
-
if (inverseSuffixsuffixIndexesIPlusH < x) {
|
|
797
|
-
i += 1;
|
|
798
|
-
} else if (inverseSuffixsuffixIndexesIPlusH == x) {
|
|
799
|
-
swapTemp = suffixIndexes[@intCast(i)];
|
|
800
|
-
suffixIndexes[@intCast(i)] = suffixIndexes[@intCast(jj + j)];
|
|
801
|
-
suffixIndexes[@intCast(jj + j)] = swapTemp;
|
|
802
|
-
j += 1;
|
|
803
|
-
} else {
|
|
804
|
-
swapTemp = suffixIndexes[@intCast(i)];
|
|
805
|
-
suffixIndexes[@intCast(i)] = suffixIndexes[@intCast(kk + k)];
|
|
806
|
-
suffixIndexes[@intCast(kk + k)] = swapTemp;
|
|
807
|
-
k += 1;
|
|
808
|
-
}
|
|
809
|
-
}
|
|
810
|
-
|
|
811
|
-
const kkMinusJJ: i64 = kk - jj;
|
|
812
|
-
while (j < kkMinusJJ) {
|
|
813
|
-
// while (jj + j < kk) {
|
|
814
|
-
const jjPlusJ: usize = @intCast(jj + j);
|
|
815
|
-
if (inverseSuffix[@intCast(suffixIndexes[jjPlusJ] + h)] == x) {
|
|
816
|
-
j += 1;
|
|
817
|
-
} else {
|
|
818
|
-
swapTemp = suffixIndexes[jjPlusJ];
|
|
819
|
-
suffixIndexes[jjPlusJ] = suffixIndexes[@intCast(kk + k)];
|
|
820
|
-
suffixIndexes[@intCast(kk + k)] = swapTemp;
|
|
821
|
-
k += 1;
|
|
822
|
-
}
|
|
823
|
-
}
|
|
824
|
-
|
|
825
|
-
if (jj > start) {
|
|
826
|
-
split(suffixIndexes, inverseSuffix, start, jj - start, h);
|
|
827
|
-
}
|
|
828
|
-
|
|
829
|
-
i = 0;
|
|
830
|
-
while (i < kk - jj) {
|
|
831
|
-
inverseSuffix[@intCast(suffixIndexes[@intCast(jj + i)])] = kk - 1;
|
|
832
|
-
i += 1;
|
|
833
|
-
}
|
|
834
|
-
|
|
835
|
-
if (jj == kk - 1) {
|
|
836
|
-
suffixIndexes[@intCast(jj)] = -1;
|
|
837
|
-
}
|
|
838
|
-
|
|
839
|
-
if (start + ln > kk) {
|
|
840
|
-
split(suffixIndexes, inverseSuffix, kk, start + ln - kk, h);
|
|
841
|
-
}
|
|
842
|
-
}
|