react-native-quick-crypto 1.0.18 → 1.1.0
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/QuickCrypto.podspec +12 -38
- package/README.md +2 -0
- package/android/CMakeLists.txt +3 -0
- package/cpp/utils/HybridUtils.cpp +39 -77
- package/deps/simdutf/.clang-format +4 -0
- package/deps/simdutf/.github/ISSUE_TEMPLATE/bug_report.md +62 -0
- package/deps/simdutf/.github/ISSUE_TEMPLATE/config.yml +1 -0
- package/deps/simdutf/.github/ISSUE_TEMPLATE/feature_request.md +35 -0
- package/deps/simdutf/.github/ISSUE_TEMPLATE/standard-issue-template.md +29 -0
- package/deps/simdutf/.github/pull_request_template.md +51 -0
- package/deps/simdutf/.github/workflows/aarch64.yml +39 -0
- package/deps/simdutf/.github/workflows/alpine.yml +27 -0
- package/deps/simdutf/.github/workflows/amalgamation_demos.yml +34 -0
- package/deps/simdutf/.github/workflows/armv7.yml +32 -0
- package/deps/simdutf/.github/workflows/atomic_fuzz.yml +25 -0
- package/deps/simdutf/.github/workflows/cifuzz.yml +37 -0
- package/deps/simdutf/.github/workflows/clangformat.yml +36 -0
- package/deps/simdutf/.github/workflows/debian-latestcxxstandards.yml +40 -0
- package/deps/simdutf/.github/workflows/debian.yml +33 -0
- package/deps/simdutf/.github/workflows/documentation.yml +36 -0
- package/deps/simdutf/.github/workflows/emscripten.yml +19 -0
- package/deps/simdutf/.github/workflows/loongarch64-gcc-14.2.yml +39 -0
- package/deps/simdutf/.github/workflows/macos-latest.yml +29 -0
- package/deps/simdutf/.github/workflows/msys2-clang.yml +48 -0
- package/deps/simdutf/.github/workflows/msys2.yml +50 -0
- package/deps/simdutf/.github/workflows/ppc64le.yml +29 -0
- package/deps/simdutf/.github/workflows/rvv-1024-clang-18.yml +35 -0
- package/deps/simdutf/.github/workflows/rvv-128-clang-17.yml +35 -0
- package/deps/simdutf/.github/workflows/rvv-256-gcc-14.yml +31 -0
- package/deps/simdutf/.github/workflows/s390x.yml +29 -0
- package/deps/simdutf/.github/workflows/selective-amalgamation.yml +29 -0
- package/deps/simdutf/.github/workflows/typos.yml +19 -0
- package/deps/simdutf/.github/workflows/ubuntu22-cxx20.yml +30 -0
- package/deps/simdutf/.github/workflows/ubuntu22.yml +32 -0
- package/deps/simdutf/.github/workflows/ubuntu22_gcc12.yml +27 -0
- package/deps/simdutf/.github/workflows/ubuntu22sani.yml +29 -0
- package/deps/simdutf/.github/workflows/ubuntu24-cxxstandards.yml +34 -0
- package/deps/simdutf/.github/workflows/ubuntu24-unsignedchar.yml +34 -0
- package/deps/simdutf/.github/workflows/ubuntu24.yml +32 -0
- package/deps/simdutf/.github/workflows/ubuntu24sani.yml +36 -0
- package/deps/simdutf/.github/workflows/ubuntu24sani_clang.yml +29 -0
- package/deps/simdutf/.github/workflows/vs17-arm-ci.yml +21 -0
- package/deps/simdutf/.github/workflows/vs17-ci-cxx20.yml +41 -0
- package/deps/simdutf/.github/workflows/vs17-ci.yml +41 -0
- package/deps/simdutf/.github/workflows/vs17-clang-ci.yml +41 -0
- package/deps/simdutf/.github/workflows/vs17-cxxstandards.yml +36 -0
- package/deps/simdutf/AI_USAGE_POLICY.md +56 -0
- package/deps/simdutf/AUTHORS +6 -0
- package/deps/simdutf/CMakeLists.txt +231 -0
- package/deps/simdutf/CONTRIBUTING.md +214 -0
- package/deps/simdutf/CONTRIBUTORS +1 -0
- package/deps/simdutf/Doxyfile +2584 -0
- package/deps/simdutf/LICENSE-APACHE +201 -0
- package/deps/simdutf/LICENSE-MIT +18 -0
- package/deps/simdutf/Makefile.crosscompile +54 -0
- package/deps/simdutf/README-RVV.md +16 -0
- package/deps/simdutf/README.md +2782 -0
- package/deps/simdutf/SECURITY.md +8 -0
- package/deps/simdutf/benchmarks/CMakeLists.txt +101 -0
- package/deps/simdutf/benchmarks/alignment.cpp +150 -0
- package/deps/simdutf/benchmarks/base64/CMakeLists.txt +30 -0
- package/deps/simdutf/benchmarks/base64/benchmark_base64.cpp +875 -0
- package/deps/simdutf/benchmarks/base64/libbase64_spaces.h +49 -0
- package/deps/simdutf/benchmarks/base64/node_base64.h +227 -0
- package/deps/simdutf/benchmarks/base64/openssl3_base64.h +334 -0
- package/deps/simdutf/benchmarks/benchmark.cpp +65 -0
- package/deps/simdutf/benchmarks/benchmark_to_well_formed_utf16.cpp +347 -0
- package/deps/simdutf/benchmarks/competition/.clang-format-ignore +5 -0
- package/deps/simdutf/benchmarks/competition/CppCon2018/utf_utils.cpp +1276 -0
- package/deps/simdutf/benchmarks/competition/CppCon2018/utf_utils.h +595 -0
- package/deps/simdutf/benchmarks/competition/README.md +7 -0
- package/deps/simdutf/benchmarks/competition/hoehrmann/hoehrmann.h +91 -0
- package/deps/simdutf/benchmarks/competition/inoue2008/inoue_utf8_to_utf16.h +444 -0
- package/deps/simdutf/benchmarks/competition/inoue2008/inoue_utf8_to_utf16_tables.h +13183 -0
- package/deps/simdutf/benchmarks/competition/inoue2008/script.py +73 -0
- package/deps/simdutf/benchmarks/competition/llvm/ConvertUTF.cpp +738 -0
- package/deps/simdutf/benchmarks/competition/llvm/ConvertUTF.h +293 -0
- package/deps/simdutf/benchmarks/competition/u8u16/COPYRIGHT +8 -0
- package/deps/simdutf/benchmarks/competition/u8u16/Makefile +44 -0
- package/deps/simdutf/benchmarks/competition/u8u16/OSL3.0.txt +169 -0
- package/deps/simdutf/benchmarks/competition/u8u16/Profiling/BOM_Profiler.h +148 -0
- package/deps/simdutf/benchmarks/competition/u8u16/Profiling/i386_timer.h +45 -0
- package/deps/simdutf/benchmarks/competition/u8u16/Profiling/ppc_timer.c +34 -0
- package/deps/simdutf/benchmarks/competition/u8u16/README +56 -0
- package/deps/simdutf/benchmarks/competition/u8u16/config/config_defs.h +43 -0
- package/deps/simdutf/benchmarks/competition/u8u16/config/g4_config.h +27 -0
- package/deps/simdutf/benchmarks/competition/u8u16/config/mmx_config.h +16 -0
- package/deps/simdutf/benchmarks/competition/u8u16/config/p4_config.h +18 -0
- package/deps/simdutf/benchmarks/competition/u8u16/config/p4_ideal_config.h +16 -0
- package/deps/simdutf/benchmarks/competition/u8u16/config/spu_config.h +28 -0
- package/deps/simdutf/benchmarks/competition/u8u16/config/ssse3_config.h +20 -0
- package/deps/simdutf/benchmarks/competition/u8u16/iconv_u8u16.c +2 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/altivec_simd.h +440 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/libgen/make_basic_ops.py +121 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/libgen/make_half_operand_versions.py +158 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/libgen/make_test.py +270 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/mmx_simd.h +141 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/mmx_simd_basic.h +216 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/mmx_simd_built_in.h +119 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/mmx_simd_modified.h +2430 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/outline.txt +39 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/spu_simd.h +421 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/sse_simd.h +836 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/stdint.h +222 -0
- package/deps/simdutf/benchmarks/competition/u8u16/libu8u16_BE.c +4 -0
- package/deps/simdutf/benchmarks/competition/u8u16/libu8u16_LE.c +5 -0
- package/deps/simdutf/benchmarks/competition/u8u16/proto/u8u16.py +390 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/Makefile +18 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/bytelex.h +448 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/charsets/ASCII_EBCDIC.h +284 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/libu8u16.c +1975 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/libu8u16.pdf +0 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/libu8u16.w +2263 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/multiliteral.h +239 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/u8u16.c +232 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/x8x16.c +194 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/xml_error.c +193 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/xml_error.h +167 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/xmldecl.c +288 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/xmldecl.h +117 -0
- package/deps/simdutf/benchmarks/competition/u8u16/u8u16_g4.c +2 -0
- package/deps/simdutf/benchmarks/competition/u8u16/u8u16_mmx.c +2 -0
- package/deps/simdutf/benchmarks/competition/u8u16/u8u16_p4.c +3 -0
- package/deps/simdutf/benchmarks/competition/u8u16/u8u16_p4_ideal.c +2 -0
- package/deps/simdutf/benchmarks/competition/u8u16/u8u16_spu.c +2 -0
- package/deps/simdutf/benchmarks/competition/u8u16/u8u16_ssse3.c +3 -0
- package/deps/simdutf/benchmarks/competition/u8u16/x8x16_p4.c +2 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/LICENSE +23 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/data/test_minimal.txt +44 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/readme.md +106 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_clang_corr_tests.cmd +11 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_clang_corr_tests.sh +13 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_corr_tests.sh +13 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_example.sh +13 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_file_conv.sh +14 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_iconv_lib.sh +11 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_iconv_sample.sh +8 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_corr_tests.cmd +12 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_example.cmd +13 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_file_conv.cmd +14 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_iconv_lib.cmd +11 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_iconv_sample.cmd +8 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_corr_tests.cmd +11 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_example.cmd +12 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_file_conv.cmd +13 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_iconv_lib.cmd +10 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_iconv_sample.cmd +9 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/html_table.py +25 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/measure.py +94 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/resize.py +20 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/wipe_all.cmd +2 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/wipe_interm.cmd +1 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/base/CustomMemcpy.h +75 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/base/PerfDefs.h +47 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/base/Timing.cpp +17 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/base/Timing.h +76 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/AllProcessors.cpp +35 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/BaseBufferProcessor.cpp +117 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/BaseBufferProcessor.h +210 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/BufferDecoder.h +158 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/BufferEncoder.h +104 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/ProcessorPlugins.h +334 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/ProcessorSelector.h +186 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/DecoderLut.cpp +140 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/DecoderLut.h +42 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/DecoderProcess.h +100 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/Dfa.h +57 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/EncoderLut.cpp +85 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/EncoderLut.h +27 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/EncoderProcess.h +126 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/ProcessTrivial.h +108 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/iconv/iconv.cpp +139 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/iconv/iconv.h +74 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/message/MessageConverter.cpp +65 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/message/MessageConverter.h +91 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/tests/CorrectnessTests.cpp +772 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/tests/Example.cpp +12 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/tests/FileConverter.cpp +486 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/tests/iconv_sample.c +162 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/utf8lut.h +15 -0
- package/deps/simdutf/benchmarks/competition/utf8sse4/fromutf8-sse.cpp +292 -0
- package/deps/simdutf/benchmarks/competition/utfcpp/LICENSE +23 -0
- package/deps/simdutf/benchmarks/competition/utfcpp/README.md +1503 -0
- package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/checked.h +335 -0
- package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/core.h +338 -0
- package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/cpp11.h +103 -0
- package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/cpp17.h +103 -0
- package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/unchecked.h +274 -0
- package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8.h +34 -0
- package/deps/simdutf/benchmarks/dataset/README.md +155 -0
- package/deps/simdutf/benchmarks/dataset/emoji.txt +204 -0
- package/deps/simdutf/benchmarks/dataset/scripts/utf8type.py +40 -0
- package/deps/simdutf/benchmarks/dataset/wikipedia_mars/Makefile +80 -0
- package/deps/simdutf/benchmarks/dataset/wikipedia_mars/convert_to_utf6.py +20 -0
- package/deps/simdutf/benchmarks/find/CMakeLists.txt +6 -0
- package/deps/simdutf/benchmarks/find/findbenchmark.cpp +63 -0
- package/deps/simdutf/benchmarks/find/findbenchmarker.h +46 -0
- package/deps/simdutf/benchmarks/shortbench.cpp +555 -0
- package/deps/simdutf/benchmarks/src/CMakeLists.txt +52 -0
- package/deps/simdutf/benchmarks/src/apple_arm_events.h +1104 -0
- package/deps/simdutf/benchmarks/src/benchmark.cpp +3899 -0
- package/deps/simdutf/benchmarks/src/benchmark.h +317 -0
- package/deps/simdutf/benchmarks/src/benchmark_base.cpp +144 -0
- package/deps/simdutf/benchmarks/src/benchmark_base.h +98 -0
- package/deps/simdutf/benchmarks/src/cmdline.cpp +176 -0
- package/deps/simdutf/benchmarks/src/cmdline.h +35 -0
- package/deps/simdutf/benchmarks/src/event_counter.h +162 -0
- package/deps/simdutf/benchmarks/src/linux-perf-events.h +104 -0
- package/deps/simdutf/benchmarks/stream.cpp +209 -0
- package/deps/simdutf/benchmarks/threaded.cpp +123 -0
- package/deps/simdutf/cmake/CPM.cmake +1363 -0
- package/deps/simdutf/cmake/JoinPaths.cmake +23 -0
- package/deps/simdutf/cmake/add_cpp_test.cmake +68 -0
- package/deps/simdutf/cmake/simdutf-config.cmake.in +2 -0
- package/deps/simdutf/cmake/simdutf-flags.cmake +26 -0
- package/deps/simdutf/cmake/toolchains-ci/riscv64-linux-gnu.cmake +4 -0
- package/deps/simdutf/cmake/toolchains-dev/README.md +32 -0
- package/deps/simdutf/cmake/toolchains-dev/aarch64.cmake +14 -0
- package/deps/simdutf/cmake/toolchains-dev/loongarch64.cmake +22 -0
- package/deps/simdutf/cmake/toolchains-dev/powerpc64.cmake +16 -0
- package/deps/simdutf/cmake/toolchains-dev/powerpc64le.cmake +16 -0
- package/deps/simdutf/cmake/toolchains-dev/riscv64.cmake +16 -0
- package/deps/simdutf/cmake/toolchains-dev/rvv-spike.cmake +38 -0
- package/deps/simdutf/doc/avx512.png +0 -0
- package/deps/simdutf/doc/logo.png +0 -0
- package/deps/simdutf/doc/logo.svg +165 -0
- package/deps/simdutf/doc/node2023.png +0 -0
- package/deps/simdutf/doc/shortinput.md +78 -0
- package/deps/simdutf/doc/utf16utf8.png +0 -0
- package/deps/simdutf/doc/utf8utf16.png +0 -0
- package/deps/simdutf/doc/widelogo.png +0 -0
- package/deps/simdutf/doxygen.py +50 -0
- package/deps/simdutf/fuzz/.clang-format +9 -0
- package/deps/simdutf/fuzz/CMakeLists.txt +45 -0
- package/deps/simdutf/fuzz/README.md +168 -0
- package/deps/simdutf/fuzz/atomic_base64.cpp +448 -0
- package/deps/simdutf/fuzz/base64.cpp +278 -0
- package/deps/simdutf/fuzz/build.sh +83 -0
- package/deps/simdutf/fuzz/conversion.cpp +669 -0
- package/deps/simdutf/fuzz/helpers/.clang-format-ignore +1 -0
- package/deps/simdutf/fuzz/helpers/common.h +135 -0
- package/deps/simdutf/fuzz/helpers/nameof.hpp +1258 -0
- package/deps/simdutf/fuzz/main.cpp +72 -0
- package/deps/simdutf/fuzz/minimize_and_cleanse.sh +87 -0
- package/deps/simdutf/fuzz/misc.cpp +216 -0
- package/deps/simdutf/fuzz/random_fuzz.sh +154 -0
- package/deps/simdutf/fuzz/roundtrip.cpp +588 -0
- package/deps/simdutf/fuzz/safe_conversion.cpp +104 -0
- package/deps/simdutf/include/simdutf/avx512.h +79 -0
- package/deps/simdutf/include/simdutf/base64_implementation.h +158 -0
- package/deps/simdutf/include/simdutf/base64_tables.h +887 -0
- package/deps/simdutf/include/simdutf/common_defs.h +186 -0
- package/deps/simdutf/include/simdutf/compiler_check.h +50 -0
- package/deps/simdutf/include/simdutf/constexpr_ptr.h +138 -0
- package/deps/simdutf/include/simdutf/encoding_types.h +189 -0
- package/deps/simdutf/include/simdutf/error.h +126 -0
- package/deps/simdutf/include/simdutf/implementation.h +7081 -0
- package/deps/simdutf/include/simdutf/internal/isadetection.h +325 -0
- package/deps/simdutf/include/simdutf/portability.h +285 -0
- package/deps/simdutf/include/simdutf/scalar/ascii.h +86 -0
- package/deps/simdutf/include/simdutf/scalar/atomic_util.h +105 -0
- package/deps/simdutf/include/simdutf/scalar/base64.h +911 -0
- package/deps/simdutf/include/simdutf/scalar/latin1.h +26 -0
- package/deps/simdutf/include/simdutf/scalar/latin1_to_utf16/latin1_to_utf16.h +52 -0
- package/deps/simdutf/include/simdutf/scalar/latin1_to_utf32/latin1_to_utf32.h +27 -0
- package/deps/simdutf/include/simdutf/scalar/latin1_to_utf8/latin1_to_utf8.h +191 -0
- package/deps/simdutf/include/simdutf/scalar/swap_bytes.h +35 -0
- package/deps/simdutf/include/simdutf/scalar/utf16.h +226 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_latin1/utf16_to_latin1.h +108 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_latin1/valid_utf16_to_latin1.h +40 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_utf32/utf16_to_utf32.h +86 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_utf32/valid_utf16_to_utf32.h +44 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_utf8/utf16_to_utf8.h +295 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_utf8/valid_utf16_to_utf8.h +91 -0
- package/deps/simdutf/include/simdutf/scalar/utf32.h +82 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_latin1/utf32_to_latin1.h +68 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_latin1/valid_utf32_to_latin1.h +67 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_utf16/utf32_to_utf16.h +84 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_utf16/valid_utf32_to_utf16.h +44 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_utf8/utf32_to_utf8.h +142 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_utf8/valid_utf32_to_utf8.h +72 -0
- package/deps/simdutf/include/simdutf/scalar/utf8.h +326 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_latin1/utf8_to_latin1.h +225 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_latin1/valid_utf8_to_latin1.h +87 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_utf16/utf8_to_utf16.h +342 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_utf16/valid_utf8_to_utf16.h +106 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_utf32/utf8_to_utf32.h +299 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_utf32/valid_utf8_to_utf32.h +83 -0
- package/deps/simdutf/include/simdutf/simdutf_version.h +26 -0
- package/deps/simdutf/include/simdutf.h +26 -0
- package/deps/simdutf/include/simdutf_c.h +342 -0
- package/deps/simdutf/riscv/Dockerfile +16 -0
- package/deps/simdutf/riscv/README.md +24 -0
- package/deps/simdutf/riscv/remove-docker-station +8 -0
- package/deps/simdutf/riscv/run-docker-station +31 -0
- package/deps/simdutf/scripts/.flake8 +2 -0
- package/deps/simdutf/scripts/Makefile +2 -0
- package/deps/simdutf/scripts/README_ADD_FUNCTION.md +49 -0
- package/deps/simdutf/scripts/add_function.py +330 -0
- package/deps/simdutf/scripts/amalgamation_tests.py +156 -0
- package/deps/simdutf/scripts/base64/Makefile +2 -0
- package/deps/simdutf/scripts/base64/README.md +2 -0
- package/deps/simdutf/scripts/base64/avx512.py +76 -0
- package/deps/simdutf/scripts/base64/neon_decode.py +143 -0
- package/deps/simdutf/scripts/base64/neon_generate_lut.py +101 -0
- package/deps/simdutf/scripts/base64/sse.py +252 -0
- package/deps/simdutf/scripts/base64/sseregular.py +160 -0
- package/deps/simdutf/scripts/base64/sseurl.py +283 -0
- package/deps/simdutf/scripts/base64/table.py +59 -0
- package/deps/simdutf/scripts/base64bench_print.py +145 -0
- package/deps/simdutf/scripts/benchmark-all.py +119 -0
- package/deps/simdutf/scripts/benchmark_print.py +324 -0
- package/deps/simdutf/scripts/check_feature_macros.py +156 -0
- package/deps/simdutf/scripts/check_typos.sh +13 -0
- package/deps/simdutf/scripts/clang_format.sh +35 -0
- package/deps/simdutf/scripts/clang_format_docker.sh +38 -0
- package/deps/simdutf/scripts/common.py +24 -0
- package/deps/simdutf/scripts/compilation_benchmark.py +55 -0
- package/deps/simdutf/scripts/compile_many_variations.sh +64 -0
- package/deps/simdutf/scripts/create_latex_table.py +62 -0
- package/deps/simdutf/scripts/docker/Dockerfile +14 -0
- package/deps/simdutf/scripts/docker/Makefile +9 -0
- package/deps/simdutf/scripts/docker/README.md +30 -0
- package/deps/simdutf/scripts/docker/llvm.gpg +0 -0
- package/deps/simdutf/scripts/ppc64_convert_utf16_to_utf8.py +155 -0
- package/deps/simdutf/scripts/prepare_doxygen.sh +21 -0
- package/deps/simdutf/scripts/release.py +197 -0
- package/deps/simdutf/scripts/shortinputplots.py +97 -0
- package/deps/simdutf/scripts/sse_convert_utf16_to_utf8.py +422 -0
- package/deps/simdutf/scripts/sse_convert_utf32_to_utf16.py +105 -0
- package/deps/simdutf/scripts/sse_utf8_utf16_decode.py +186 -0
- package/deps/simdutf/scripts/sse_validate_utf16le_proof.py +137 -0
- package/deps/simdutf/scripts/sse_validate_utf16le_testcases.py +129 -0
- package/deps/simdutf/scripts/table.py +207 -0
- package/deps/simdutf/scripts/tests/new.txt +33 -0
- package/deps/simdutf/scripts/tests/old.txt +33 -0
- package/deps/simdutf/scripts/tests/results.txt +272 -0
- package/deps/simdutf/simdutf.pc.in +11 -0
- package/deps/simdutf/singleheader/.flake8 +2 -0
- package/deps/simdutf/singleheader/CMakeLists.txt +64 -0
- package/deps/simdutf/singleheader/README-dev.md +81 -0
- package/deps/simdutf/singleheader/README.md +19 -0
- package/deps/simdutf/singleheader/amalgamate.py +513 -0
- package/deps/simdutf/singleheader/amalgamation_demo.c +59 -0
- package/deps/simdutf/singleheader/amalgamation_demo.cpp +54 -0
- package/deps/simdutf/singleheader/test-features.py +262 -0
- package/deps/simdutf/src/CMakeLists.txt +78 -0
- package/deps/simdutf/src/arm64/arm_base64.cpp +791 -0
- package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf16.cpp +24 -0
- package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf32.cpp +24 -0
- package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf8.cpp +70 -0
- package/deps/simdutf/src/arm64/arm_convert_utf16_to_latin1.cpp +61 -0
- package/deps/simdutf/src/arm64/arm_convert_utf16_to_utf32.cpp +185 -0
- package/deps/simdutf/src/arm64/arm_convert_utf16_to_utf8.cpp +780 -0
- package/deps/simdutf/src/arm64/arm_convert_utf32_to_latin1.cpp +60 -0
- package/deps/simdutf/src/arm64/arm_convert_utf32_to_utf16.cpp +208 -0
- package/deps/simdutf/src/arm64/arm_convert_utf32_to_utf8.cpp +505 -0
- package/deps/simdutf/src/arm64/arm_convert_utf8_to_latin1.cpp +69 -0
- package/deps/simdutf/src/arm64/arm_convert_utf8_to_utf16.cpp +313 -0
- package/deps/simdutf/src/arm64/arm_convert_utf8_to_utf32.cpp +179 -0
- package/deps/simdutf/src/arm64/arm_find.cpp +199 -0
- package/deps/simdutf/src/arm64/arm_utf16fix.cpp +185 -0
- package/deps/simdutf/src/arm64/arm_validate_utf16.cpp +165 -0
- package/deps/simdutf/src/arm64/arm_validate_utf32le.cpp +65 -0
- package/deps/simdutf/src/arm64/implementation.cpp +1442 -0
- package/deps/simdutf/src/encoding_types.cpp +67 -0
- package/deps/simdutf/src/error.cpp +3 -0
- package/deps/simdutf/src/fallback/implementation.cpp +589 -0
- package/deps/simdutf/src/generic/ascii_validation.h +50 -0
- package/deps/simdutf/src/generic/base64.h +233 -0
- package/deps/simdutf/src/generic/base64lengths.h +63 -0
- package/deps/simdutf/src/generic/buf_block_reader.h +109 -0
- package/deps/simdutf/src/generic/find.h +75 -0
- package/deps/simdutf/src/generic/utf16/change_endianness.h +24 -0
- package/deps/simdutf/src/generic/utf16/count_code_points_bytemask.h +58 -0
- package/deps/simdutf/src/generic/utf16/to_well_formed.h +93 -0
- package/deps/simdutf/src/generic/utf16/utf32_length_from_utf16.h +15 -0
- package/deps/simdutf/src/generic/utf16/utf8_length_from_utf16.h +35 -0
- package/deps/simdutf/src/generic/utf16/utf8_length_from_utf16_bytemask.h +199 -0
- package/deps/simdutf/src/generic/utf16.h +73 -0
- package/deps/simdutf/src/generic/utf32.h +136 -0
- package/deps/simdutf/src/generic/utf8/utf16_length_from_utf8_bytemask.h +53 -0
- package/deps/simdutf/src/generic/utf8.h +92 -0
- package/deps/simdutf/src/generic/utf8_to_latin1/utf8_to_latin1.h +316 -0
- package/deps/simdutf/src/generic/utf8_to_latin1/valid_utf8_to_latin1.h +78 -0
- package/deps/simdutf/src/generic/utf8_to_utf16/utf8_to_utf16.h +332 -0
- package/deps/simdutf/src/generic/utf8_to_utf16/valid_utf8_to_utf16.h +74 -0
- package/deps/simdutf/src/generic/utf8_to_utf32/utf8_to_utf32.h +318 -0
- package/deps/simdutf/src/generic/utf8_to_utf32/valid_utf8_to_utf32.h +42 -0
- package/deps/simdutf/src/generic/utf8_validation/utf8_lookup4_algorithm.h +223 -0
- package/deps/simdutf/src/generic/utf8_validation/utf8_validator.h +84 -0
- package/deps/simdutf/src/generic/validate_utf16.h +164 -0
- package/deps/simdutf/src/generic/validate_utf32.h +99 -0
- package/deps/simdutf/src/haswell/avx2_base64.cpp +837 -0
- package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf16.cpp +28 -0
- package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf32.cpp +20 -0
- package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf8.cpp +83 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf16_to_latin1.cpp +83 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf16_to_utf32.cpp +210 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf16_to_utf8.cpp +602 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf32_to_latin1.cpp +116 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf32_to_utf16.cpp +164 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf32_to_utf8.cpp +569 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf8_to_latin1.cpp +60 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf8_to_utf16.cpp +195 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf8_to_utf32.cpp +135 -0
- package/deps/simdutf/src/haswell/avx2_utf16fix.cpp +173 -0
- package/deps/simdutf/src/haswell/avx2_validate_utf16.cpp +17 -0
- package/deps/simdutf/src/haswell/implementation.cpp +1447 -0
- package/deps/simdutf/src/icelake/icelake_ascii_validation.inl.cpp +19 -0
- package/deps/simdutf/src/icelake/icelake_base64.inl.cpp +630 -0
- package/deps/simdutf/src/icelake/icelake_common.inl.cpp +37 -0
- package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf16.inl.cpp +36 -0
- package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf32.inl.cpp +23 -0
- package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf8.inl.cpp +107 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf16_to_latin1.inl.cpp +103 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf16_to_utf32.inl.cpp +136 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf16_to_utf8.inl.cpp +206 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf32_to_latin1.inl.cpp +74 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf32_to_utf16.inl.cpp +338 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf32_to_utf8.inl.cpp +574 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf8_to_latin1.inl.cpp +104 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf8_to_utf16.inl.cpp +75 -0
- package/deps/simdutf/src/icelake/icelake_convert_valid_utf8_to_latin1.inl.cpp +69 -0
- package/deps/simdutf/src/icelake/icelake_find.inl.cpp +146 -0
- package/deps/simdutf/src/icelake/icelake_from_utf8.inl.cpp +266 -0
- package/deps/simdutf/src/icelake/icelake_from_valid_utf8.inl.cpp +136 -0
- package/deps/simdutf/src/icelake/icelake_macros.inl.cpp +143 -0
- package/deps/simdutf/src/icelake/icelake_utf16fix.cpp +138 -0
- package/deps/simdutf/src/icelake/icelake_utf32_validation.inl.cpp +63 -0
- package/deps/simdutf/src/icelake/icelake_utf8_common.inl.cpp +753 -0
- package/deps/simdutf/src/icelake/icelake_utf8_length_from_utf16.inl.cpp +269 -0
- package/deps/simdutf/src/icelake/icelake_utf8_validation.inl.cpp +116 -0
- package/deps/simdutf/src/icelake/implementation.cpp +1903 -0
- package/deps/simdutf/src/implementation.cpp +2526 -0
- package/deps/simdutf/src/lasx/implementation.cpp +1531 -0
- package/deps/simdutf/src/lasx/lasx_base64.cpp +695 -0
- package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf16.cpp +76 -0
- package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf32.cpp +55 -0
- package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf8.cpp +65 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf16_to_latin1.cpp +64 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf16_to_utf32.cpp +183 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf16_to_utf8.cpp +550 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf32_to_latin1.cpp +73 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf32_to_utf16.cpp +218 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf32_to_utf8.cpp +589 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf8_to_latin1.cpp +72 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf8_to_utf16.cpp +296 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf8_to_utf32.cpp +190 -0
- package/deps/simdutf/src/lasx/lasx_find.cpp +64 -0
- package/deps/simdutf/src/lasx/lasx_validate_utf16.cpp +13 -0
- package/deps/simdutf/src/lasx/lasx_validate_utf32le.cpp +84 -0
- package/deps/simdutf/src/lsx/implementation.cpp +1417 -0
- package/deps/simdutf/src/lsx/lsx_base64.cpp +675 -0
- package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf16.cpp +39 -0
- package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf32.cpp +27 -0
- package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf8.cpp +56 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf16_to_latin1.cpp +64 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf16_to_utf32.cpp +133 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf16_to_utf8.cpp +518 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf32_to_latin1.cpp +66 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf32_to_utf16.cpp +155 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf32_to_utf8.cpp +459 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf8_to_latin1.cpp +75 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf8_to_utf16.cpp +291 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf8_to_utf32.cpp +179 -0
- package/deps/simdutf/src/lsx/lsx_find.cpp +60 -0
- package/deps/simdutf/src/lsx/lsx_validate_utf16.cpp +13 -0
- package/deps/simdutf/src/lsx/lsx_validate_utf32le.cpp +68 -0
- package/deps/simdutf/src/ppc64/implementation.cpp +992 -0
- package/deps/simdutf/src/ppc64/ppc64_base64.cpp +480 -0
- package/deps/simdutf/src/ppc64/ppc64_base64_internal_tests.cpp +401 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf16.cpp +12 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf32.cpp +12 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf8.cpp +149 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_latin1.cpp +67 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_utf32.cpp +87 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_utf8.cpp +296 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_latin1.cpp +57 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_utf16.cpp +117 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_utf8.cpp +166 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_latin1.cpp +69 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_utf16.cpp +211 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_utf32.cpp +153 -0
- package/deps/simdutf/src/ppc64/ppc64_utf16_to_utf8_tables.h +1011 -0
- package/deps/simdutf/src/ppc64/ppc64_utf8_length_from_latin1.cpp +37 -0
- package/deps/simdutf/src/ppc64/ppc64_validate_utf16.cpp +19 -0
- package/deps/simdutf/src/ppc64/templates.cpp +91 -0
- package/deps/simdutf/src/rvv/implementation.cpp +138 -0
- package/deps/simdutf/src/rvv/rvv_find.cpp +27 -0
- package/deps/simdutf/src/rvv/rvv_helpers.inl.cpp +23 -0
- package/deps/simdutf/src/rvv/rvv_latin1_to.inl.cpp +71 -0
- package/deps/simdutf/src/rvv/rvv_length_from.inl.cpp +164 -0
- package/deps/simdutf/src/rvv/rvv_utf16_to.inl.cpp +399 -0
- package/deps/simdutf/src/rvv/rvv_utf16fix.cpp +110 -0
- package/deps/simdutf/src/rvv/rvv_utf32_to.inl.cpp +307 -0
- package/deps/simdutf/src/rvv/rvv_utf8_to.inl.cpp +435 -0
- package/deps/simdutf/src/rvv/rvv_validate.inl.cpp +275 -0
- package/deps/simdutf/src/simdutf/arm64/begin.h +2 -0
- package/deps/simdutf/src/simdutf/arm64/bitmanipulation.h +34 -0
- package/deps/simdutf/src/simdutf/arm64/end.h +2 -0
- package/deps/simdutf/src/simdutf/arm64/implementation.h +307 -0
- package/deps/simdutf/src/simdutf/arm64/intrinsics.h +10 -0
- package/deps/simdutf/src/simdutf/arm64/simd.h +547 -0
- package/deps/simdutf/src/simdutf/arm64/simd16-inl.h +403 -0
- package/deps/simdutf/src/simdutf/arm64/simd32-inl.h +129 -0
- package/deps/simdutf/src/simdutf/arm64/simd64-inl.h +28 -0
- package/deps/simdutf/src/simdutf/arm64.h +43 -0
- package/deps/simdutf/src/simdutf/fallback/begin.h +1 -0
- package/deps/simdutf/src/simdutf/fallback/bitmanipulation.h +13 -0
- package/deps/simdutf/src/simdutf/fallback/end.h +1 -0
- package/deps/simdutf/src/simdutf/fallback/implementation.h +331 -0
- package/deps/simdutf/src/simdutf/fallback.h +42 -0
- package/deps/simdutf/src/simdutf/haswell/begin.h +15 -0
- package/deps/simdutf/src/simdutf/haswell/bitmanipulation.h +35 -0
- package/deps/simdutf/src/simdutf/haswell/end.h +13 -0
- package/deps/simdutf/src/simdutf/haswell/implementation.h +338 -0
- package/deps/simdutf/src/simdutf/haswell/intrinsics.h +67 -0
- package/deps/simdutf/src/simdutf/haswell/simd.h +363 -0
- package/deps/simdutf/src/simdutf/haswell/simd16-inl.h +261 -0
- package/deps/simdutf/src/simdutf/haswell/simd32-inl.h +111 -0
- package/deps/simdutf/src/simdutf/haswell/simd64-inl.h +34 -0
- package/deps/simdutf/src/simdutf/haswell.h +63 -0
- package/deps/simdutf/src/simdutf/icelake/begin.h +14 -0
- package/deps/simdutf/src/simdutf/icelake/bitmanipulation.h +44 -0
- package/deps/simdutf/src/simdutf/icelake/end.h +12 -0
- package/deps/simdutf/src/simdutf/icelake/implementation.h +346 -0
- package/deps/simdutf/src/simdutf/icelake/intrinsics.h +138 -0
- package/deps/simdutf/src/simdutf/icelake/simd.h +17 -0
- package/deps/simdutf/src/simdutf/icelake/simd16-inl.h +90 -0
- package/deps/simdutf/src/simdutf/icelake/simd32-inl.h +47 -0
- package/deps/simdutf/src/simdutf/icelake.h +81 -0
- package/deps/simdutf/src/simdutf/lasx/begin.h +8 -0
- package/deps/simdutf/src/simdutf/lasx/bitmanipulation.h +25 -0
- package/deps/simdutf/src/simdutf/lasx/end.h +8 -0
- package/deps/simdutf/src/simdutf/lasx/implementation.h +310 -0
- package/deps/simdutf/src/simdutf/lasx/intrinsics.h +319 -0
- package/deps/simdutf/src/simdutf/lasx/simd.h +551 -0
- package/deps/simdutf/src/simdutf/lasx/simd16-inl.h +234 -0
- package/deps/simdutf/src/simdutf/lasx/simd32-inl.h +74 -0
- package/deps/simdutf/src/simdutf/lasx/simd64-inl.h +52 -0
- package/deps/simdutf/src/simdutf/lasx.h +49 -0
- package/deps/simdutf/src/simdutf/lsx/begin.h +2 -0
- package/deps/simdutf/src/simdutf/lsx/bitmanipulation.h +25 -0
- package/deps/simdutf/src/simdutf/lsx/end.h +2 -0
- package/deps/simdutf/src/simdutf/lsx/implementation.h +309 -0
- package/deps/simdutf/src/simdutf/lsx/intrinsics.h +196 -0
- package/deps/simdutf/src/simdutf/lsx/simd.h +421 -0
- package/deps/simdutf/src/simdutf/lsx/simd16-inl.h +242 -0
- package/deps/simdutf/src/simdutf/lsx/simd32-inl.h +69 -0
- package/deps/simdutf/src/simdutf/lsx/simd64-inl.h +50 -0
- package/deps/simdutf/src/simdutf/lsx.h +52 -0
- package/deps/simdutf/src/simdutf/ppc64/begin.h +1 -0
- package/deps/simdutf/src/simdutf/ppc64/bitmanipulation.h +29 -0
- package/deps/simdutf/src/simdutf/ppc64/end.h +1 -0
- package/deps/simdutf/src/simdutf/ppc64/implementation.h +348 -0
- package/deps/simdutf/src/simdutf/ppc64/intrinsics.h +19 -0
- package/deps/simdutf/src/simdutf/ppc64/simd.h +177 -0
- package/deps/simdutf/src/simdutf/ppc64/simd16-inl.h +327 -0
- package/deps/simdutf/src/simdutf/ppc64/simd32-inl.h +247 -0
- package/deps/simdutf/src/simdutf/ppc64/simd8-inl.h +618 -0
- package/deps/simdutf/src/simdutf/ppc64.h +40 -0
- package/deps/simdutf/src/simdutf/rvv/begin.h +7 -0
- package/deps/simdutf/src/simdutf/rvv/end.h +7 -0
- package/deps/simdutf/src/simdutf/rvv/implementation.h +321 -0
- package/deps/simdutf/src/simdutf/rvv/intrinsics.h +131 -0
- package/deps/simdutf/src/simdutf/rvv.h +41 -0
- package/deps/simdutf/src/simdutf/westmere/begin.h +8 -0
- package/deps/simdutf/src/simdutf/westmere/bitmanipulation.h +37 -0
- package/deps/simdutf/src/simdutf/westmere/end.h +8 -0
- package/deps/simdutf/src/simdutf/westmere/implementation.h +338 -0
- package/deps/simdutf/src/simdutf/westmere/intrinsics.h +38 -0
- package/deps/simdutf/src/simdutf/westmere/simd.h +379 -0
- package/deps/simdutf/src/simdutf/westmere/simd16-inl.h +242 -0
- package/deps/simdutf/src/simdutf/westmere/simd32-inl.h +151 -0
- package/deps/simdutf/src/simdutf/westmere/simd64-inl.h +33 -0
- package/deps/simdutf/src/simdutf/westmere.h +59 -0
- package/deps/simdutf/src/simdutf.cpp +152 -0
- package/deps/simdutf/src/simdutf_c.cpp +525 -0
- package/deps/simdutf/src/tables/utf16_to_utf8_tables.h +768 -0
- package/deps/simdutf/src/tables/utf32_to_utf16_tables.h +53 -0
- package/deps/simdutf/src/tables/utf8_to_utf16_tables.h +826 -0
- package/deps/simdutf/src/westmere/implementation.cpp +1479 -0
- package/deps/simdutf/src/westmere/internal/loader.cpp +7 -0
- package/deps/simdutf/src/westmere/internal/write_v_u16_11bits_to_utf8.cpp +66 -0
- package/deps/simdutf/src/westmere/sse_base64.cpp +672 -0
- package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf16.cpp +21 -0
- package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf32.cpp +31 -0
- package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf8.cpp +71 -0
- package/deps/simdutf/src/westmere/sse_convert_utf16_to_latin1.cpp +70 -0
- package/deps/simdutf/src/westmere/sse_convert_utf16_to_utf32.cpp +206 -0
- package/deps/simdutf/src/westmere/sse_convert_utf16_to_utf8.cpp +504 -0
- package/deps/simdutf/src/westmere/sse_convert_utf32_to_latin1.cpp +82 -0
- package/deps/simdutf/src/westmere/sse_convert_utf32_to_utf16.cpp +209 -0
- package/deps/simdutf/src/westmere/sse_convert_utf32_to_utf8.cpp +589 -0
- package/deps/simdutf/src/westmere/sse_convert_utf8_to_latin1.cpp +58 -0
- package/deps/simdutf/src/westmere/sse_convert_utf8_to_utf16.cpp +197 -0
- package/deps/simdutf/src/westmere/sse_convert_utf8_to_utf32.cpp +141 -0
- package/deps/simdutf/src/westmere/sse_utf16fix.cpp +82 -0
- package/deps/simdutf/src/westmere/sse_validate_utf16.cpp +17 -0
- package/deps/simdutf/tests/CMakeLists.txt +483 -0
- package/deps/simdutf/tests/atomic_base64_tests.cpp +2845 -0
- package/deps/simdutf/tests/base64_tests.cpp +3617 -0
- package/deps/simdutf/tests/basic_fuzzer.cpp +805 -0
- package/deps/simdutf/tests/bele_tests.cpp +182 -0
- package/deps/simdutf/tests/constexpr_base64_tests.cpp +387 -0
- package/deps/simdutf/tests/convert_latin1_to_utf16be_tests.cpp +52 -0
- package/deps/simdutf/tests/convert_latin1_to_utf16le_tests.cpp +80 -0
- package/deps/simdutf/tests/convert_latin1_to_utf32_tests.cpp +66 -0
- package/deps/simdutf/tests/convert_latin1_to_utf8_tests.cpp +120 -0
- package/deps/simdutf/tests/convert_utf16_to_utf8_safe_tests.cpp +203 -0
- package/deps/simdutf/tests/convert_utf16_to_utf8_with_replacement_tests.cpp +276 -0
- package/deps/simdutf/tests/convert_utf16be_to_latin1_tests.cpp +109 -0
- package/deps/simdutf/tests/convert_utf16be_to_latin1_tests_with_errors.cpp +136 -0
- package/deps/simdutf/tests/convert_utf16be_to_utf32_tests.cpp +193 -0
- package/deps/simdutf/tests/convert_utf16be_to_utf32_with_errors_tests.cpp +381 -0
- package/deps/simdutf/tests/convert_utf16be_to_utf8_tests.cpp +259 -0
- package/deps/simdutf/tests/convert_utf16be_to_utf8_with_errors_tests.cpp +266 -0
- package/deps/simdutf/tests/convert_utf16le_to_latin1_tests.cpp +148 -0
- package/deps/simdutf/tests/convert_utf16le_to_latin1_tests_with_errors.cpp +176 -0
- package/deps/simdutf/tests/convert_utf16le_to_utf32_tests.cpp +213 -0
- package/deps/simdutf/tests/convert_utf16le_to_utf32_with_errors_tests.cpp +318 -0
- package/deps/simdutf/tests/convert_utf16le_to_utf8_tests.cpp +343 -0
- package/deps/simdutf/tests/convert_utf16le_to_utf8_with_errors_tests.cpp +271 -0
- package/deps/simdutf/tests/convert_utf32_to_latin1_tests.cpp +111 -0
- package/deps/simdutf/tests/convert_utf32_to_latin1_with_errors_tests.cpp +96 -0
- package/deps/simdutf/tests/convert_utf32_to_utf16be_tests.cpp +148 -0
- package/deps/simdutf/tests/convert_utf32_to_utf16be_with_errors_tests.cpp +192 -0
- package/deps/simdutf/tests/convert_utf32_to_utf16le_tests.cpp +166 -0
- package/deps/simdutf/tests/convert_utf32_to_utf16le_with_errors_tests.cpp +215 -0
- package/deps/simdutf/tests/convert_utf32_to_utf8_tests.cpp +181 -0
- package/deps/simdutf/tests/convert_utf32_to_utf8_with_errors_tests.cpp +261 -0
- package/deps/simdutf/tests/convert_utf8_to_latin1_tests.cpp +516 -0
- package/deps/simdutf/tests/convert_utf8_to_latin1_with_errors_tests.cpp +579 -0
- package/deps/simdutf/tests/convert_utf8_to_utf16be_tests.cpp +412 -0
- package/deps/simdutf/tests/convert_utf8_to_utf16be_with_errors_tests.cpp +480 -0
- package/deps/simdutf/tests/convert_utf8_to_utf16le_tests.cpp +671 -0
- package/deps/simdutf/tests/convert_utf8_to_utf16le_with_errors_tests.cpp +455 -0
- package/deps/simdutf/tests/convert_utf8_to_utf32_tests.cpp +1204 -0
- package/deps/simdutf/tests/convert_utf8_to_utf32_with_errors_tests.cpp +337 -0
- package/deps/simdutf/tests/convert_valid_utf16be_to_latin1_tests.cpp +37 -0
- package/deps/simdutf/tests/convert_valid_utf16be_to_utf32_tests.cpp +97 -0
- package/deps/simdutf/tests/convert_valid_utf16be_to_utf8_tests.cpp +126 -0
- package/deps/simdutf/tests/convert_valid_utf16le_to_latin1_tests.cpp +71 -0
- package/deps/simdutf/tests/convert_valid_utf16le_to_utf32_tests.cpp +122 -0
- package/deps/simdutf/tests/convert_valid_utf16le_to_utf8_tests.cpp +244 -0
- package/deps/simdutf/tests/convert_valid_utf32_to_latin1_tests.cpp +49 -0
- package/deps/simdutf/tests/convert_valid_utf32_to_utf16be_tests.cpp +92 -0
- package/deps/simdutf/tests/convert_valid_utf32_to_utf16le_tests.cpp +114 -0
- package/deps/simdutf/tests/convert_valid_utf32_to_utf8_tests.cpp +109 -0
- package/deps/simdutf/tests/convert_valid_utf8_to_latin1_tests.cpp +84 -0
- package/deps/simdutf/tests/convert_valid_utf8_to_utf16be_tests.cpp +124 -0
- package/deps/simdutf/tests/convert_valid_utf8_to_utf16le_tests.cpp +221 -0
- package/deps/simdutf/tests/convert_valid_utf8_to_utf32_tests.cpp +155 -0
- package/deps/simdutf/tests/count_utf16be.cpp +64 -0
- package/deps/simdutf/tests/count_utf16le.cpp +61 -0
- package/deps/simdutf/tests/count_utf8.cpp +87 -0
- package/deps/simdutf/tests/detect_encodings_tests.cpp +312 -0
- package/deps/simdutf/tests/embed/valid_utf8.txt +1 -0
- package/deps/simdutf/tests/embed_tests.cpp +22 -0
- package/deps/simdutf/tests/find_tests.cpp +77 -0
- package/deps/simdutf/tests/fixed_string_tests.cpp +153 -0
- package/deps/simdutf/tests/helpers/CMakeLists.txt +25 -0
- package/deps/simdutf/tests/helpers/compiletime_conversions.h +222 -0
- package/deps/simdutf/tests/helpers/fixed_string.h +267 -0
- package/deps/simdutf/tests/helpers/random_int.cpp +30 -0
- package/deps/simdutf/tests/helpers/random_int.h +39 -0
- package/deps/simdutf/tests/helpers/random_utf16.cpp +123 -0
- package/deps/simdutf/tests/helpers/random_utf16.h +52 -0
- package/deps/simdutf/tests/helpers/random_utf32.cpp +41 -0
- package/deps/simdutf/tests/helpers/random_utf32.h +40 -0
- package/deps/simdutf/tests/helpers/random_utf8.cpp +93 -0
- package/deps/simdutf/tests/helpers/random_utf8.h +36 -0
- package/deps/simdutf/tests/helpers/test.cpp +231 -0
- package/deps/simdutf/tests/helpers/test.h +193 -0
- package/deps/simdutf/tests/helpers/transcode_test_base.cpp +1257 -0
- package/deps/simdutf/tests/helpers/transcode_test_base.h +683 -0
- package/deps/simdutf/tests/helpers/utf16.h +27 -0
- package/deps/simdutf/tests/installation_tests/find/CMakeLists.txt +43 -0
- package/deps/simdutf/tests/installation_tests/from_fetch/CMakeLists.txt +47 -0
- package/deps/simdutf/tests/internal_tests.cpp +27 -0
- package/deps/simdutf/tests/null_safety_tests.cpp +94 -0
- package/deps/simdutf/tests/random_fuzzer.cpp +779 -0
- package/deps/simdutf/tests/readme_tests.cpp +274 -0
- package/deps/simdutf/tests/reference/CMakeLists.txt +23 -0
- package/deps/simdutf/tests/reference/decode_utf16.h +81 -0
- package/deps/simdutf/tests/reference/decode_utf32.h +47 -0
- package/deps/simdutf/tests/reference/encode_latin1.cpp +1 -0
- package/deps/simdutf/tests/reference/encode_latin1.h +32 -0
- package/deps/simdutf/tests/reference/encode_utf16.cpp +49 -0
- package/deps/simdutf/tests/reference/encode_utf16.h +20 -0
- package/deps/simdutf/tests/reference/encode_utf32.cpp +1 -0
- package/deps/simdutf/tests/reference/encode_utf32.h +36 -0
- package/deps/simdutf/tests/reference/encode_utf8.cpp +1 -0
- package/deps/simdutf/tests/reference/encode_utf8.h +40 -0
- package/deps/simdutf/tests/reference/validate_utf16.cpp +60 -0
- package/deps/simdutf/tests/reference/validate_utf16.h +14 -0
- package/deps/simdutf/tests/reference/validate_utf16_to_latin1.cpp +35 -0
- package/deps/simdutf/tests/reference/validate_utf16_to_latin1.h +13 -0
- package/deps/simdutf/tests/reference/validate_utf32.cpp +27 -0
- package/deps/simdutf/tests/reference/validate_utf32.h +12 -0
- package/deps/simdutf/tests/reference/validate_utf32_to_latin1.cpp +27 -0
- package/deps/simdutf/tests/reference/validate_utf32_to_latin1.h +12 -0
- package/deps/simdutf/tests/reference/validate_utf8.cpp +82 -0
- package/deps/simdutf/tests/reference/validate_utf8.h +11 -0
- package/deps/simdutf/tests/reference/validate_utf8_to_latin1.cpp +43 -0
- package/deps/simdutf/tests/reference/validate_utf8_to_latin1.h +12 -0
- package/deps/simdutf/tests/select_implementation.cpp +43 -0
- package/deps/simdutf/tests/simdutf_c_tests.cpp +244 -0
- package/deps/simdutf/tests/span_tests.cpp +401 -0
- package/deps/simdutf/tests/special_tests.cpp +559 -0
- package/deps/simdutf/tests/straight_c_test.c +187 -0
- package/deps/simdutf/tests/text_encoding_tests.cpp +77 -0
- package/deps/simdutf/tests/to_well_formed_utf16_tests.cpp +377 -0
- package/deps/simdutf/tests/utf8_length_from_utf16_tests.cpp +202 -0
- package/deps/simdutf/tests/validate_ascii_basic_tests.cpp +165 -0
- package/deps/simdutf/tests/validate_ascii_with_errors_tests.cpp +77 -0
- package/deps/simdutf/tests/validate_utf16be_basic_tests.cpp +175 -0
- package/deps/simdutf/tests/validate_utf16be_with_errors_tests.cpp +188 -0
- package/deps/simdutf/tests/validate_utf16le_basic_tests.cpp +268 -0
- package/deps/simdutf/tests/validate_utf16le_with_errors_tests.cpp +274 -0
- package/deps/simdutf/tests/validate_utf32_basic_tests.cpp +92 -0
- package/deps/simdutf/tests/validate_utf32_with_errors_tests.cpp +114 -0
- package/deps/simdutf/tests/validate_utf8_basic_tests.cpp +178 -0
- package/deps/simdutf/tests/validate_utf8_brute_force_tests.cpp +88 -0
- package/deps/simdutf/tests/validate_utf8_puzzler_tests.cpp +33 -0
- package/deps/simdutf/tests/validate_utf8_with_errors_tests.cpp +228 -0
- package/deps/simdutf/tools/CMakeLists.txt +85 -0
- package/deps/simdutf/tools/fastbase64.cpp +250 -0
- package/deps/simdutf/tools/sutf.cpp +556 -0
- package/deps/simdutf/tools/sutf.h +40 -0
- package/lib/commonjs/blake3.js +2 -1
- package/lib/commonjs/blake3.js.map +1 -1
- package/lib/commonjs/diffie-hellman.js +5 -4
- package/lib/commonjs/diffie-hellman.js.map +1 -1
- package/lib/commonjs/ecdh.js +5 -4
- package/lib/commonjs/ecdh.js.map +1 -1
- package/lib/module/blake3.js +2 -1
- package/lib/module/blake3.js.map +1 -1
- package/lib/module/diffie-hellman.js +5 -4
- package/lib/module/diffie-hellman.js.map +1 -1
- package/lib/module/ecdh.js +5 -4
- package/lib/module/ecdh.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/typescript/blake3.d.ts.map +1 -1
- package/lib/typescript/diffie-hellman.d.ts.map +1 -1
- package/lib/typescript/ecdh.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/blake3.ts +2 -1
- package/src/diffie-hellman.ts +5 -7
- package/src/ecdh.ts +5 -8
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
namespace simdutf {
|
|
2
|
+
namespace SIMDUTF_IMPLEMENTATION {
|
|
3
|
+
namespace {
|
|
4
|
+
namespace utf16 {
|
|
5
|
+
|
|
6
|
+
// Note: this is direct translation of westmere implementation.
|
|
7
|
+
|
|
8
|
+
/*
|
|
9
|
+
* Process one block of 8 characters. If in_place is false,
|
|
10
|
+
* copy the block from in to out. If there is a sequencing
|
|
11
|
+
* error in the block, overwrite the illsequenced characters
|
|
12
|
+
* with the replacement character. This function reads one
|
|
13
|
+
* character before the beginning of the buffer as a lookback.
|
|
14
|
+
* If that character is illsequenced, it too is overwritten.
|
|
15
|
+
*/
|
|
16
|
+
template <endianness big_endian, bool in_place>
|
|
17
|
+
simdutf_really_inline void utf16fix_block(char16_t *out, const char16_t *in) {
|
|
18
|
+
const char16_t replacement = scalar::utf16::replacement<big_endian>();
|
|
19
|
+
|
|
20
|
+
using vector_u16 = simd16<uint16_t>;
|
|
21
|
+
auto swap_if_needed = [](uint16_t x) simdutf_constexpr -> uint16_t {
|
|
22
|
+
return scalar::utf16::swap_if_needed<big_endian>(x);
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const auto lookback = vector_u16::load(in - 1);
|
|
26
|
+
const auto block = vector_u16::load(in);
|
|
27
|
+
|
|
28
|
+
const auto lb_masked = lookback & swap_if_needed(0xfc00);
|
|
29
|
+
const auto block_masked = block & swap_if_needed(0xfc00);
|
|
30
|
+
|
|
31
|
+
const auto lb_is_high = lb_masked == swap_if_needed(0xd800);
|
|
32
|
+
const auto block_is_low = block_masked == swap_if_needed(0xdc00);
|
|
33
|
+
const auto illseq = lb_is_high ^ block_is_low;
|
|
34
|
+
if (!illseq.is_zero()) {
|
|
35
|
+
/* compute the cause of the illegal sequencing */
|
|
36
|
+
const auto lb_illseq = ~block_is_low & lb_is_high;
|
|
37
|
+
const auto block_illseq =
|
|
38
|
+
(~lb_is_high & block_is_low) | lb_illseq.template byte_right_shift<2>();
|
|
39
|
+
|
|
40
|
+
/* fix illegal sequencing in the lookback */
|
|
41
|
+
const auto lb = lb_illseq.first();
|
|
42
|
+
out[-1] = char16_t((lb & replacement) | (~lb & out[-1]));
|
|
43
|
+
/* fix illegal sequencing in the main block */
|
|
44
|
+
const auto mask = as_vector_u16(block_illseq);
|
|
45
|
+
const auto fixed = (~mask & block) | (mask & replacement);
|
|
46
|
+
|
|
47
|
+
fixed.store(reinterpret_cast<uint16_t *>(out));
|
|
48
|
+
} else if (!in_place) {
|
|
49
|
+
block.store(reinterpret_cast<uint16_t *>(out));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
template <endianness big_endian>
|
|
54
|
+
void to_well_formed(const char16_t *in, size_t n, char16_t *out) {
|
|
55
|
+
using vector_u16 = simd16<uint16_t>;
|
|
56
|
+
constexpr size_t N = vector_u16::ELEMENTS;
|
|
57
|
+
|
|
58
|
+
if (n < N + 1) {
|
|
59
|
+
scalar::utf16::to_well_formed_utf16<big_endian>(in, n, out);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const char16_t replacement = scalar::utf16::replacement<big_endian>();
|
|
64
|
+
|
|
65
|
+
out[0] =
|
|
66
|
+
scalar::utf16::is_low_surrogate<big_endian>(in[0]) ? replacement : in[0];
|
|
67
|
+
|
|
68
|
+
/* duplicate code to have the compiler specialise utf16fix_block() */
|
|
69
|
+
if (in == out) {
|
|
70
|
+
constexpr bool inplace = true;
|
|
71
|
+
for (size_t i = 1; i + N < n; i += N) {
|
|
72
|
+
utf16fix_block<big_endian, inplace>(out + i, in + i);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
utf16fix_block<big_endian, inplace>(out + n - N, in + n - N);
|
|
76
|
+
} else {
|
|
77
|
+
constexpr bool copy_data = false;
|
|
78
|
+
for (size_t i = 1; i + N < n; i += N) {
|
|
79
|
+
utf16fix_block<big_endian, copy_data>(out + i, in + i);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
utf16fix_block<big_endian, copy_data>(out + n - N, in + n - N);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
out[n - 1] = scalar::utf16::is_high_surrogate<big_endian>(out[n - 1])
|
|
86
|
+
? replacement
|
|
87
|
+
: out[n - 1];
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
} // namespace utf16
|
|
91
|
+
} // unnamed namespace
|
|
92
|
+
} // namespace SIMDUTF_IMPLEMENTATION
|
|
93
|
+
} // namespace simdutf
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
namespace simdutf {
|
|
2
|
+
namespace SIMDUTF_IMPLEMENTATION {
|
|
3
|
+
namespace {
|
|
4
|
+
namespace utf16 {
|
|
5
|
+
|
|
6
|
+
template <endianness big_endian>
|
|
7
|
+
simdutf_really_inline size_t utf32_length_from_utf16(const char16_t *in,
|
|
8
|
+
size_t size) {
|
|
9
|
+
return count_code_points<big_endian>(in, size);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
} // namespace utf16
|
|
13
|
+
} // unnamed namespace
|
|
14
|
+
} // namespace SIMDUTF_IMPLEMENTATION
|
|
15
|
+
} // namespace simdutf
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
namespace simdutf {
|
|
2
|
+
namespace SIMDUTF_IMPLEMENTATION {
|
|
3
|
+
namespace {
|
|
4
|
+
namespace utf16 {
|
|
5
|
+
|
|
6
|
+
template <endianness big_endian>
|
|
7
|
+
simdutf_really_inline size_t utf8_length_from_utf16(const char16_t *in,
|
|
8
|
+
size_t size) {
|
|
9
|
+
size_t pos = 0;
|
|
10
|
+
size_t count = 0;
|
|
11
|
+
// This algorithm could no doubt be improved!
|
|
12
|
+
for (; pos < size / 32 * 32; pos += 32) {
|
|
13
|
+
simd16x32<uint16_t> input(reinterpret_cast<const uint16_t *>(in + pos));
|
|
14
|
+
if simdutf_constexpr (!match_system(big_endian)) {
|
|
15
|
+
input.swap_bytes();
|
|
16
|
+
}
|
|
17
|
+
uint64_t ascii_mask = input.lteq(0x7F);
|
|
18
|
+
uint64_t twobyte_mask = input.lteq(0x7FF);
|
|
19
|
+
uint64_t not_pair_mask = input.not_in_range(0xD800, 0xDFFF);
|
|
20
|
+
|
|
21
|
+
size_t ascii_count = count_ones(ascii_mask) / 2;
|
|
22
|
+
size_t twobyte_count = count_ones(twobyte_mask & ~ascii_mask) / 2;
|
|
23
|
+
size_t threebyte_count = count_ones(not_pair_mask & ~twobyte_mask) / 2;
|
|
24
|
+
size_t fourbyte_count = 32 - count_ones(not_pair_mask) / 2;
|
|
25
|
+
count += 2 * fourbyte_count + 3 * threebyte_count + 2 * twobyte_count +
|
|
26
|
+
ascii_count;
|
|
27
|
+
}
|
|
28
|
+
return count + scalar::utf16::utf8_length_from_utf16<big_endian>(in + pos,
|
|
29
|
+
size - pos);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
} // namespace utf16
|
|
33
|
+
} // unnamed namespace
|
|
34
|
+
} // namespace SIMDUTF_IMPLEMENTATION
|
|
35
|
+
} // namespace simdutf
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
namespace simdutf {
|
|
2
|
+
namespace SIMDUTF_IMPLEMENTATION {
|
|
3
|
+
namespace {
|
|
4
|
+
namespace utf16 {
|
|
5
|
+
|
|
6
|
+
using namespace simd;
|
|
7
|
+
|
|
8
|
+
template <endianness big_endian>
|
|
9
|
+
simdutf_really_inline size_t utf8_length_from_utf16_bytemask(const char16_t *in,
|
|
10
|
+
size_t size) {
|
|
11
|
+
size_t pos = 0;
|
|
12
|
+
|
|
13
|
+
using vector_u16 = simd16<uint16_t>;
|
|
14
|
+
constexpr size_t N = vector_u16::ELEMENTS;
|
|
15
|
+
|
|
16
|
+
const auto one = vector_u16::splat(1);
|
|
17
|
+
|
|
18
|
+
auto v_count = vector_u16::zero();
|
|
19
|
+
|
|
20
|
+
// each char16 yields at least one byte
|
|
21
|
+
size_t count = size / N * N;
|
|
22
|
+
|
|
23
|
+
// in a single iteration the increment is 0, 1 or 2, despite we have
|
|
24
|
+
// three additions
|
|
25
|
+
constexpr size_t max_iterations = 65535 / 2;
|
|
26
|
+
size_t iteration = max_iterations;
|
|
27
|
+
|
|
28
|
+
for (; pos < size / N * N; pos += N) {
|
|
29
|
+
auto input = vector_u16::load(reinterpret_cast<const uint16_t *>(in + pos));
|
|
30
|
+
if simdutf_constexpr (!match_system(big_endian)) {
|
|
31
|
+
input = input.swap_bytes();
|
|
32
|
+
}
|
|
33
|
+
// 0xd800 .. 0xdbff - low surrogate
|
|
34
|
+
// 0xdc00 .. 0xdfff - high surrogate
|
|
35
|
+
const auto is_surrogate = ((input & uint16_t(0xf800)) == uint16_t(0xd800));
|
|
36
|
+
|
|
37
|
+
// c0 - chars that yield 2- or 3-byte UTF-8 codes
|
|
38
|
+
const auto c0 = min(input & uint16_t(0xff80), one);
|
|
39
|
+
|
|
40
|
+
// c1 - chars that yield 3-byte UTF-8 codes (including surrogates)
|
|
41
|
+
const auto c1 = min(input & uint16_t(0xf800), one);
|
|
42
|
+
|
|
43
|
+
/*
|
|
44
|
+
Explanation how the counting works.
|
|
45
|
+
|
|
46
|
+
In the case of a non-surrogate character we count:
|
|
47
|
+
* always 1 -- see how `count` is initialized above;
|
|
48
|
+
* c0 = 1 if the current char yields 2 or 3 bytes;
|
|
49
|
+
* c1 = 1 if the current char yields 3 bytes.
|
|
50
|
+
|
|
51
|
+
Thus, we always have correct count for the current char:
|
|
52
|
+
from 1, 2 or 3 bytes.
|
|
53
|
+
|
|
54
|
+
A trickier part is how we count surrogate pairs. Whether
|
|
55
|
+
we encounter a surrogate (low or high), we count it as
|
|
56
|
+
3 chars and then minus 1 (`is_surrogate` is -1 or 0).
|
|
57
|
+
Each surrogate char yields 2. A surrogate pair, that
|
|
58
|
+
is a low surrogate followed by a high one, yields
|
|
59
|
+
the expected 4 bytes.
|
|
60
|
+
|
|
61
|
+
It also correctly handles cases when low surrogate is
|
|
62
|
+
processed by the this loop, but high surrogate is counted
|
|
63
|
+
by the scalar procedure. The scalar procedure uses exactly
|
|
64
|
+
the described approach, thanks to that for valid UTF-16
|
|
65
|
+
strings it always count correctly.
|
|
66
|
+
*/
|
|
67
|
+
v_count += c0;
|
|
68
|
+
v_count += c1;
|
|
69
|
+
v_count += vector_u16(is_surrogate);
|
|
70
|
+
|
|
71
|
+
iteration -= 1;
|
|
72
|
+
if (iteration == 0) {
|
|
73
|
+
count += v_count.sum();
|
|
74
|
+
v_count = vector_u16::zero();
|
|
75
|
+
iteration = max_iterations;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (iteration > 0) {
|
|
80
|
+
count += v_count.sum();
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return count + scalar::utf16::utf8_length_from_utf16<big_endian>(in + pos,
|
|
84
|
+
size - pos);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
template <endianness big_endian>
|
|
88
|
+
simdutf_really_inline result
|
|
89
|
+
utf8_length_from_utf16_with_replacement(const char16_t *in, size_t size) {
|
|
90
|
+
using vector_u16 = simd16<uint16_t>;
|
|
91
|
+
constexpr size_t N = vector_u16::ELEMENTS;
|
|
92
|
+
if (N + 1 > size) {
|
|
93
|
+
return scalar::utf16::utf8_length_from_utf16_with_replacement<big_endian>(
|
|
94
|
+
in, size);
|
|
95
|
+
} // special case for short inputs
|
|
96
|
+
size_t pos = 0;
|
|
97
|
+
bool any_surrogates = false;
|
|
98
|
+
|
|
99
|
+
const auto one = vector_u16::splat(1);
|
|
100
|
+
|
|
101
|
+
auto v_count = vector_u16::zero();
|
|
102
|
+
auto v_mismatched_count = vector_u16::zero();
|
|
103
|
+
|
|
104
|
+
size_t count = 0;
|
|
105
|
+
size_t mismatched_count = 0;
|
|
106
|
+
|
|
107
|
+
// in a single iteration the increment is 0, 1 or 2, despite we have
|
|
108
|
+
// three additions
|
|
109
|
+
constexpr size_t max_iterations = 65535 / 2;
|
|
110
|
+
size_t iteration = max_iterations;
|
|
111
|
+
|
|
112
|
+
if (scalar::utf16::is_low_surrogate<big_endian>(in[0])) {
|
|
113
|
+
any_surrogates = true;
|
|
114
|
+
mismatched_count += 1;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
for (; pos < (size - 1) / N * N; pos += N) {
|
|
118
|
+
auto input = vector_u16::load(reinterpret_cast<const uint16_t *>(in + pos));
|
|
119
|
+
if simdutf_constexpr (!match_system(big_endian)) {
|
|
120
|
+
input = input.swap_bytes();
|
|
121
|
+
}
|
|
122
|
+
// 0xd800 .. 0xdbff - low surrogate
|
|
123
|
+
// 0xdc00 .. 0xdfff - high surrogate
|
|
124
|
+
const auto is_surrogate = ((input & uint16_t(0xf800)) == uint16_t(0xd800));
|
|
125
|
+
|
|
126
|
+
// c0 - chars that yield 2- or 3-byte UTF-8 codes
|
|
127
|
+
const auto c0 = min(input & uint16_t(0xff80), one);
|
|
128
|
+
|
|
129
|
+
// c1 - chars that yield 3-byte UTF-8 codes (including surrogates)
|
|
130
|
+
const auto c1 = min(input & uint16_t(0xf800), one);
|
|
131
|
+
|
|
132
|
+
v_count += c0;
|
|
133
|
+
v_count += c1;
|
|
134
|
+
v_count += vector_u16(is_surrogate);
|
|
135
|
+
if (is_surrogate.to_bitmask() != 0 ||
|
|
136
|
+
scalar::utf16::is_low_surrogate<big_endian>(in[pos + N])) {
|
|
137
|
+
any_surrogates = true;
|
|
138
|
+
auto input_next =
|
|
139
|
+
vector_u16::load(reinterpret_cast<const uint16_t *>(in + pos + 1));
|
|
140
|
+
if simdutf_constexpr (!match_system(big_endian)) {
|
|
141
|
+
input_next = input_next.swap_bytes();
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
const auto lb_masked = input & (0xfc00);
|
|
145
|
+
const auto block_masked = input_next & (0xfc00);
|
|
146
|
+
|
|
147
|
+
const auto lb_is_high = lb_masked == (0xd800);
|
|
148
|
+
const auto block_is_low = block_masked == (0xdc00);
|
|
149
|
+
|
|
150
|
+
const auto illseq = min(vector_u16(lb_is_high ^ block_is_low), one);
|
|
151
|
+
|
|
152
|
+
v_mismatched_count += illseq;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
iteration -= 1;
|
|
156
|
+
if (iteration == 0) {
|
|
157
|
+
count += v_count.sum();
|
|
158
|
+
v_count = vector_u16::zero();
|
|
159
|
+
mismatched_count += v_mismatched_count.sum();
|
|
160
|
+
v_mismatched_count = vector_u16::zero();
|
|
161
|
+
iteration = max_iterations;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
if (iteration > 0) {
|
|
166
|
+
count += v_count.sum();
|
|
167
|
+
mismatched_count += v_mismatched_count.sum();
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
if (scalar::utf16::is_low_surrogate<big_endian>(in[pos])) {
|
|
171
|
+
any_surrogates = true;
|
|
172
|
+
if (!scalar::utf16::is_high_surrogate<big_endian>(in[pos - 1])) {
|
|
173
|
+
mismatched_count -= 1;
|
|
174
|
+
count += 2;
|
|
175
|
+
pos += 1;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
count += pos;
|
|
179
|
+
count += mismatched_count;
|
|
180
|
+
if (scalar::utf16::is_high_surrogate<big_endian>(in[pos - 1])) {
|
|
181
|
+
any_surrogates = true;
|
|
182
|
+
if (pos == size) {
|
|
183
|
+
count += 2;
|
|
184
|
+
} else if (scalar::utf16::is_low_surrogate<big_endian>(in[pos])) {
|
|
185
|
+
pos += 1;
|
|
186
|
+
count += 2;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
result scalar_result =
|
|
190
|
+
scalar::utf16::utf8_length_from_utf16_with_replacement<big_endian>(
|
|
191
|
+
in + pos, size - pos);
|
|
192
|
+
return {any_surrogates ? SURROGATE : scalar_result.error,
|
|
193
|
+
count + scalar_result.count};
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
} // namespace utf16
|
|
197
|
+
} // unnamed namespace
|
|
198
|
+
} // namespace SIMDUTF_IMPLEMENTATION
|
|
199
|
+
} // namespace simdutf
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
namespace simdutf {
|
|
2
|
+
namespace SIMDUTF_IMPLEMENTATION {
|
|
3
|
+
namespace {
|
|
4
|
+
namespace utf16 {
|
|
5
|
+
|
|
6
|
+
template <endianness big_endian>
|
|
7
|
+
simdutf_really_inline size_t count_code_points(const char16_t *in,
|
|
8
|
+
size_t size) {
|
|
9
|
+
size_t pos = 0;
|
|
10
|
+
size_t count = 0;
|
|
11
|
+
for (; pos < size / 32 * 32; pos += 32) {
|
|
12
|
+
simd16x32<uint16_t> input(reinterpret_cast<const uint16_t *>(in + pos));
|
|
13
|
+
if simdutf_constexpr (!match_system(big_endian)) {
|
|
14
|
+
input.swap_bytes();
|
|
15
|
+
}
|
|
16
|
+
uint64_t not_pair = input.not_in_range(0xDC00, 0xDFFF);
|
|
17
|
+
count += count_ones(not_pair) / 2;
|
|
18
|
+
}
|
|
19
|
+
return count +
|
|
20
|
+
scalar::utf16::count_code_points<big_endian>(in + pos, size - pos);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
template <endianness big_endian>
|
|
24
|
+
simdutf_really_inline size_t utf8_length_from_utf16(const char16_t *in,
|
|
25
|
+
size_t size) {
|
|
26
|
+
size_t pos = 0;
|
|
27
|
+
size_t count = 0;
|
|
28
|
+
// This algorithm could no doubt be improved!
|
|
29
|
+
for (; pos < size / 32 * 32; pos += 32) {
|
|
30
|
+
simd16x32<uint16_t> input(reinterpret_cast<const uint16_t *>(in + pos));
|
|
31
|
+
if simdutf_constexpr (!match_system(big_endian)) {
|
|
32
|
+
input.swap_bytes();
|
|
33
|
+
}
|
|
34
|
+
uint64_t ascii_mask = input.lteq(0x7F);
|
|
35
|
+
uint64_t twobyte_mask = input.lteq(0x7FF);
|
|
36
|
+
uint64_t not_pair_mask = input.not_in_range(0xD800, 0xDFFF);
|
|
37
|
+
|
|
38
|
+
size_t ascii_count = count_ones(ascii_mask) / 2;
|
|
39
|
+
size_t twobyte_count = count_ones(twobyte_mask & ~ascii_mask) / 2;
|
|
40
|
+
size_t threebyte_count = count_ones(not_pair_mask & ~twobyte_mask) / 2;
|
|
41
|
+
size_t fourbyte_count = 32 - count_ones(not_pair_mask) / 2;
|
|
42
|
+
count += 2 * fourbyte_count + 3 * threebyte_count + 2 * twobyte_count +
|
|
43
|
+
ascii_count;
|
|
44
|
+
}
|
|
45
|
+
return count + scalar::utf16::utf8_length_from_utf16<big_endian>(in + pos,
|
|
46
|
+
size - pos);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
template <endianness big_endian>
|
|
50
|
+
simdutf_really_inline size_t utf32_length_from_utf16(const char16_t *in,
|
|
51
|
+
size_t size) {
|
|
52
|
+
return count_code_points<big_endian>(in, size);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
simdutf_really_inline void
|
|
56
|
+
change_endianness_utf16(const char16_t *in, size_t size, char16_t *output) {
|
|
57
|
+
size_t pos = 0;
|
|
58
|
+
|
|
59
|
+
while (pos < size / 32 * 32) {
|
|
60
|
+
simd16x32<uint16_t> input(reinterpret_cast<const uint16_t *>(in + pos));
|
|
61
|
+
input.swap_bytes();
|
|
62
|
+
input.store(reinterpret_cast<uint16_t *>(output));
|
|
63
|
+
pos += 32;
|
|
64
|
+
output += 32;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
scalar::utf16::change_endianness_utf16(in + pos, size - pos, output);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
} // namespace utf16
|
|
71
|
+
} // unnamed namespace
|
|
72
|
+
} // namespace SIMDUTF_IMPLEMENTATION
|
|
73
|
+
} // namespace simdutf
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
#include <limits>
|
|
2
|
+
|
|
3
|
+
namespace simdutf {
|
|
4
|
+
namespace SIMDUTF_IMPLEMENTATION {
|
|
5
|
+
namespace {
|
|
6
|
+
namespace utf32 {
|
|
7
|
+
|
|
8
|
+
template <typename T> T min(T a, T b) { return a <= b ? a : b; }
|
|
9
|
+
|
|
10
|
+
simdutf_really_inline size_t utf8_length_from_utf32(const char32_t *input,
|
|
11
|
+
size_t length) {
|
|
12
|
+
using vector_u32 = simd32<uint32_t>;
|
|
13
|
+
|
|
14
|
+
const char32_t *start = input;
|
|
15
|
+
|
|
16
|
+
// we add up to three ones in a single iteration (see the vectorized loop in
|
|
17
|
+
// section #2 below)
|
|
18
|
+
const size_t max_increment = 3;
|
|
19
|
+
|
|
20
|
+
const size_t N = vector_u32::ELEMENTS;
|
|
21
|
+
|
|
22
|
+
#if SIMDUTF_SIMD_HAS_UNSIGNED_CMP
|
|
23
|
+
const auto v_0000007f = vector_u32::splat(0x0000007f);
|
|
24
|
+
const auto v_000007ff = vector_u32::splat(0x000007ff);
|
|
25
|
+
const auto v_0000ffff = vector_u32::splat(0x0000ffff);
|
|
26
|
+
#else
|
|
27
|
+
const auto v_ffffff80 = vector_u32::splat(0xffffff80);
|
|
28
|
+
const auto v_fffff800 = vector_u32::splat(0xfffff800);
|
|
29
|
+
const auto v_ffff0000 = vector_u32::splat(0xffff0000);
|
|
30
|
+
const auto one = vector_u32::splat(1);
|
|
31
|
+
#endif // SIMDUTF_SIMD_HAS_UNSIGNED_CMP
|
|
32
|
+
|
|
33
|
+
size_t counter = 0;
|
|
34
|
+
|
|
35
|
+
// 1. vectorized loop unrolled 4 times
|
|
36
|
+
{
|
|
37
|
+
// we use vector of uint32 counters, this is why this limit is used
|
|
38
|
+
const size_t max_iterations =
|
|
39
|
+
std::numeric_limits<uint32_t>::max() / (max_increment * 4);
|
|
40
|
+
size_t blocks = length / (N * 4);
|
|
41
|
+
length -= blocks * (N * 4);
|
|
42
|
+
while (blocks != 0) {
|
|
43
|
+
const size_t iterations = min(blocks, max_iterations);
|
|
44
|
+
blocks -= iterations;
|
|
45
|
+
|
|
46
|
+
simd32<uint32_t> acc = vector_u32::zero();
|
|
47
|
+
for (size_t i = 0; i < iterations; i++) {
|
|
48
|
+
const auto in0 = vector_u32(input + 0 * N);
|
|
49
|
+
const auto in1 = vector_u32(input + 1 * N);
|
|
50
|
+
const auto in2 = vector_u32(input + 2 * N);
|
|
51
|
+
const auto in3 = vector_u32(input + 3 * N);
|
|
52
|
+
|
|
53
|
+
#if SIMDUTF_SIMD_HAS_UNSIGNED_CMP
|
|
54
|
+
acc -= as_vector_u32(in0 > v_0000007f);
|
|
55
|
+
acc -= as_vector_u32(in1 > v_0000007f);
|
|
56
|
+
acc -= as_vector_u32(in2 > v_0000007f);
|
|
57
|
+
acc -= as_vector_u32(in3 > v_0000007f);
|
|
58
|
+
|
|
59
|
+
acc -= as_vector_u32(in0 > v_000007ff);
|
|
60
|
+
acc -= as_vector_u32(in1 > v_000007ff);
|
|
61
|
+
acc -= as_vector_u32(in2 > v_000007ff);
|
|
62
|
+
acc -= as_vector_u32(in3 > v_000007ff);
|
|
63
|
+
|
|
64
|
+
acc -= as_vector_u32(in0 > v_0000ffff);
|
|
65
|
+
acc -= as_vector_u32(in1 > v_0000ffff);
|
|
66
|
+
acc -= as_vector_u32(in2 > v_0000ffff);
|
|
67
|
+
acc -= as_vector_u32(in3 > v_0000ffff);
|
|
68
|
+
#else
|
|
69
|
+
acc += min(one, in0 & v_ffffff80);
|
|
70
|
+
acc += min(one, in1 & v_ffffff80);
|
|
71
|
+
acc += min(one, in2 & v_ffffff80);
|
|
72
|
+
acc += min(one, in3 & v_ffffff80);
|
|
73
|
+
|
|
74
|
+
acc += min(one, in0 & v_fffff800);
|
|
75
|
+
acc += min(one, in1 & v_fffff800);
|
|
76
|
+
acc += min(one, in2 & v_fffff800);
|
|
77
|
+
acc += min(one, in3 & v_fffff800);
|
|
78
|
+
|
|
79
|
+
acc += min(one, in0 & v_ffff0000);
|
|
80
|
+
acc += min(one, in1 & v_ffff0000);
|
|
81
|
+
acc += min(one, in2 & v_ffff0000);
|
|
82
|
+
acc += min(one, in3 & v_ffff0000);
|
|
83
|
+
#endif // SIMDUTF_SIMD_HAS_UNSIGNED_CMP
|
|
84
|
+
|
|
85
|
+
input += 4 * N;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
counter += acc.sum();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// 2. vectorized loop for tail
|
|
93
|
+
{
|
|
94
|
+
const size_t max_iterations =
|
|
95
|
+
std::numeric_limits<uint32_t>::max() / max_increment;
|
|
96
|
+
size_t blocks = length / N;
|
|
97
|
+
length -= blocks * N;
|
|
98
|
+
while (blocks != 0) {
|
|
99
|
+
const size_t iterations = min(blocks, max_iterations);
|
|
100
|
+
blocks -= iterations;
|
|
101
|
+
|
|
102
|
+
auto acc = vector_u32::zero();
|
|
103
|
+
for (size_t i = 0; i < iterations; i++) {
|
|
104
|
+
const auto in = vector_u32(input);
|
|
105
|
+
|
|
106
|
+
#if SIMDUTF_SIMD_HAS_UNSIGNED_CMP
|
|
107
|
+
acc -= as_vector_u32(in > v_0000007f);
|
|
108
|
+
acc -= as_vector_u32(in > v_000007ff);
|
|
109
|
+
acc -= as_vector_u32(in > v_0000ffff);
|
|
110
|
+
#else
|
|
111
|
+
acc += min(one, in & v_ffffff80);
|
|
112
|
+
acc += min(one, in & v_fffff800);
|
|
113
|
+
acc += min(one, in & v_ffff0000);
|
|
114
|
+
#endif // SIMDUTF_SIMD_HAS_UNSIGNED_CMP
|
|
115
|
+
|
|
116
|
+
input += N;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
counter += acc.sum();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
const size_t consumed = input - start;
|
|
124
|
+
if (consumed != 0) {
|
|
125
|
+
// We don't count 0th bytes in the vectorized loops above, this
|
|
126
|
+
// is why we need to count them in the end.
|
|
127
|
+
counter += consumed;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
return counter + scalar::utf32::utf8_length_from_utf32(input, length);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
} // namespace utf32
|
|
134
|
+
} // unnamed namespace
|
|
135
|
+
} // namespace SIMDUTF_IMPLEMENTATION
|
|
136
|
+
} // namespace simdutf
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
namespace simdutf {
|
|
2
|
+
namespace SIMDUTF_IMPLEMENTATION {
|
|
3
|
+
namespace {
|
|
4
|
+
namespace utf8 {
|
|
5
|
+
|
|
6
|
+
using namespace simd;
|
|
7
|
+
|
|
8
|
+
simdutf_really_inline size_t utf16_length_from_utf8_bytemask(const char *in,
|
|
9
|
+
size_t size) {
|
|
10
|
+
using vector_i8 = simd8<int8_t>;
|
|
11
|
+
using vector_u8 = simd8<uint8_t>;
|
|
12
|
+
using vector_u64 = simd64<uint64_t>;
|
|
13
|
+
|
|
14
|
+
constexpr size_t N = vector_i8::SIZE;
|
|
15
|
+
constexpr size_t max_iterations = 255 / 2;
|
|
16
|
+
|
|
17
|
+
auto counters = vector_u64::zero();
|
|
18
|
+
auto local = vector_u8::zero();
|
|
19
|
+
|
|
20
|
+
size_t iterations = 0;
|
|
21
|
+
size_t pos = 0;
|
|
22
|
+
size_t count = 0;
|
|
23
|
+
for (; pos + N <= size; pos += N) {
|
|
24
|
+
const auto input =
|
|
25
|
+
vector_i8::load(reinterpret_cast<const int8_t *>(in + pos));
|
|
26
|
+
|
|
27
|
+
const auto continuation = input > int8_t(-65);
|
|
28
|
+
const auto utf_4bytes = vector_u8(input.value) >= uint8_t(240);
|
|
29
|
+
|
|
30
|
+
local -= vector_u8(continuation);
|
|
31
|
+
local -= vector_u8(utf_4bytes);
|
|
32
|
+
|
|
33
|
+
iterations += 1;
|
|
34
|
+
if (iterations == max_iterations) {
|
|
35
|
+
counters += sum_8bytes(local);
|
|
36
|
+
local = vector_u8::zero();
|
|
37
|
+
iterations = 0;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (iterations > 0) {
|
|
42
|
+
count += local.sum_bytes();
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
count += counters.sum();
|
|
46
|
+
|
|
47
|
+
return count + scalar::utf8::utf16_length_from_utf8(in + pos, size - pos);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
} // namespace utf8
|
|
51
|
+
} // unnamed namespace
|
|
52
|
+
} // namespace SIMDUTF_IMPLEMENTATION
|
|
53
|
+
} // namespace simdutf
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
namespace simdutf {
|
|
2
|
+
namespace SIMDUTF_IMPLEMENTATION {
|
|
3
|
+
namespace {
|
|
4
|
+
namespace utf8 {
|
|
5
|
+
|
|
6
|
+
using namespace simd;
|
|
7
|
+
|
|
8
|
+
simdutf_really_inline size_t count_code_points(const char *in, size_t size) {
|
|
9
|
+
size_t pos = 0;
|
|
10
|
+
size_t count = 0;
|
|
11
|
+
for (; pos + 64 <= size; pos += 64) {
|
|
12
|
+
simd8x64<int8_t> input(reinterpret_cast<const int8_t *>(in + pos));
|
|
13
|
+
uint64_t utf8_continuation_mask = input.gt(-65);
|
|
14
|
+
count += count_ones(utf8_continuation_mask);
|
|
15
|
+
}
|
|
16
|
+
return count + scalar::utf8::count_code_points(in + pos, size - pos);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
#ifdef SIMDUTF_SIMD_HAS_BYTEMASK
|
|
20
|
+
simdutf_really_inline size_t count_code_points_bytemask(const char *in,
|
|
21
|
+
size_t size) {
|
|
22
|
+
using vector_i8 = simd8<int8_t>;
|
|
23
|
+
using vector_u8 = simd8<uint8_t>;
|
|
24
|
+
using vector_u64 = simd64<uint64_t>;
|
|
25
|
+
|
|
26
|
+
constexpr size_t N = vector_i8::SIZE;
|
|
27
|
+
constexpr size_t max_iterations = 255 / 4;
|
|
28
|
+
|
|
29
|
+
size_t pos = 0;
|
|
30
|
+
size_t count = 0;
|
|
31
|
+
|
|
32
|
+
auto counters = vector_u64::zero();
|
|
33
|
+
auto local = vector_u8::zero();
|
|
34
|
+
size_t iterations = 0;
|
|
35
|
+
for (; pos + 4 * N <= size; pos += 4 * N) {
|
|
36
|
+
const auto input0 =
|
|
37
|
+
simd8<int8_t>::load(reinterpret_cast<const int8_t *>(in + pos + 0 * N));
|
|
38
|
+
const auto input1 =
|
|
39
|
+
simd8<int8_t>::load(reinterpret_cast<const int8_t *>(in + pos + 1 * N));
|
|
40
|
+
const auto input2 =
|
|
41
|
+
simd8<int8_t>::load(reinterpret_cast<const int8_t *>(in + pos + 2 * N));
|
|
42
|
+
const auto input3 =
|
|
43
|
+
simd8<int8_t>::load(reinterpret_cast<const int8_t *>(in + pos + 3 * N));
|
|
44
|
+
const auto mask0 = input0 > int8_t(-65);
|
|
45
|
+
const auto mask1 = input1 > int8_t(-65);
|
|
46
|
+
const auto mask2 = input2 > int8_t(-65);
|
|
47
|
+
const auto mask3 = input3 > int8_t(-65);
|
|
48
|
+
|
|
49
|
+
local -= vector_u8(mask0);
|
|
50
|
+
local -= vector_u8(mask1);
|
|
51
|
+
local -= vector_u8(mask2);
|
|
52
|
+
local -= vector_u8(mask3);
|
|
53
|
+
|
|
54
|
+
iterations += 1;
|
|
55
|
+
if (iterations == max_iterations) {
|
|
56
|
+
counters += sum_8bytes(local);
|
|
57
|
+
local = vector_u8::zero();
|
|
58
|
+
iterations = 0;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
if (iterations > 0) {
|
|
63
|
+
count += local.sum_bytes();
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
count += counters.sum();
|
|
67
|
+
|
|
68
|
+
return count + scalar::utf8::count_code_points(in + pos, size - pos);
|
|
69
|
+
}
|
|
70
|
+
#endif // SIMDUTF_SIMD_HAS_BYTEMASK
|
|
71
|
+
|
|
72
|
+
simdutf_really_inline size_t utf16_length_from_utf8(const char *in,
|
|
73
|
+
size_t size) {
|
|
74
|
+
size_t pos = 0;
|
|
75
|
+
size_t count = 0;
|
|
76
|
+
// This algorithm could no doubt be improved!
|
|
77
|
+
for (; pos + 64 <= size; pos += 64) {
|
|
78
|
+
simd8x64<int8_t> input(reinterpret_cast<const int8_t *>(in + pos));
|
|
79
|
+
uint64_t utf8_continuation_mask = input.lt(-65 + 1);
|
|
80
|
+
// We count one word for anything that is not a continuation (so
|
|
81
|
+
// leading bytes).
|
|
82
|
+
count += 64 - count_ones(utf8_continuation_mask);
|
|
83
|
+
int64_t utf8_4byte = input.gteq_unsigned(240);
|
|
84
|
+
count += count_ones(utf8_4byte);
|
|
85
|
+
}
|
|
86
|
+
return count + scalar::utf8::utf16_length_from_utf8(in + pos, size - pos);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
} // namespace utf8
|
|
90
|
+
} // unnamed namespace
|
|
91
|
+
} // namespace SIMDUTF_IMPLEMENTATION
|
|
92
|
+
} // namespace simdutf
|