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,1442 @@
|
|
|
1
|
+
#include "simdutf/arm64/begin.h"
|
|
2
|
+
#include "simdutf/implementation.h"
|
|
3
|
+
namespace simdutf {
|
|
4
|
+
namespace SIMDUTF_IMPLEMENTATION {
|
|
5
|
+
namespace {
|
|
6
|
+
#ifndef SIMDUTF_ARM64_H
|
|
7
|
+
#error "arm64.h must be included"
|
|
8
|
+
#endif
|
|
9
|
+
using namespace simd;
|
|
10
|
+
|
|
11
|
+
#if SIMDUTF_FEATURE_ASCII || SIMDUTF_FEATURE_DETECT_ENCODING || \
|
|
12
|
+
SIMDUTF_FEATURE_UTF8
|
|
13
|
+
simdutf_really_inline bool is_ascii(const simd8x64<uint8_t> &input) {
|
|
14
|
+
simd8<uint8_t> bits = input.reduce_or();
|
|
15
|
+
return bits.max_val() < 0b10000000u;
|
|
16
|
+
}
|
|
17
|
+
#endif // SIMDUTF_FEATURE_ASCII || SIMDUTF_FEATURE_DETECT_ENCODING ||
|
|
18
|
+
// SIMDUTF_FEATURE_UTF8
|
|
19
|
+
|
|
20
|
+
#if SIMDUTF_FEATURE_UTF8 || SIMDUTF_FEATURE_DETECT_ENCODING
|
|
21
|
+
simdutf_really_inline simd8<bool>
|
|
22
|
+
must_be_2_3_continuation(const simd8<uint8_t> prev2,
|
|
23
|
+
const simd8<uint8_t> prev3) {
|
|
24
|
+
simd8<bool> is_third_byte = prev2 >= uint8_t(0b11100000u);
|
|
25
|
+
simd8<bool> is_fourth_byte = prev3 >= uint8_t(0b11110000u);
|
|
26
|
+
return is_third_byte ^ is_fourth_byte;
|
|
27
|
+
}
|
|
28
|
+
#endif // SIMDUTF_FEATURE_UTF8 || SIMDUTF_FEATURE_DETECT_ENCODING
|
|
29
|
+
|
|
30
|
+
#if SIMDUTF_FEATURE_UTF8 && (SIMDUTF_FEATURE_UTF16 || SIMDUTF_FEATURE_UTF32)
|
|
31
|
+
// common functions for utf8 conversions
|
|
32
|
+
simdutf_really_inline uint16x4_t convert_utf8_3_byte_to_utf16(uint8x16_t in) {
|
|
33
|
+
// Low half contains 10cccccc|1110aaaa
|
|
34
|
+
// High half contains 10bbbbbb|10bbbbbb
|
|
35
|
+
#ifdef SIMDUTF_REGULAR_VISUAL_STUDIO
|
|
36
|
+
const uint8x16_t sh = simdutf_make_uint8x16_t(0, 2, 3, 5, 6, 8, 9, 11, 1, 1,
|
|
37
|
+
4, 4, 7, 7, 10, 10);
|
|
38
|
+
#else
|
|
39
|
+
const uint8x16_t sh = {0, 2, 3, 5, 6, 8, 9, 11, 1, 1, 4, 4, 7, 7, 10, 10};
|
|
40
|
+
#endif
|
|
41
|
+
uint8x16_t perm = vqtbl1q_u8(in, sh);
|
|
42
|
+
// Split into half vectors.
|
|
43
|
+
// 10cccccc|1110aaaa
|
|
44
|
+
uint8x8_t perm_low = vget_low_u8(perm); // no-op
|
|
45
|
+
// 10bbbbbb|10bbbbbb
|
|
46
|
+
uint8x8_t perm_high = vget_high_u8(perm);
|
|
47
|
+
// xxxxxxxx 10bbbbbb
|
|
48
|
+
uint16x4_t mid = vreinterpret_u16_u8(perm_high); // no-op
|
|
49
|
+
// xxxxxxxx 1110aaaa
|
|
50
|
+
uint16x4_t high = vreinterpret_u16_u8(perm_low); // no-op
|
|
51
|
+
// Assemble with shift left insert.
|
|
52
|
+
// xxxxxxaa aabbbbbb
|
|
53
|
+
uint16x4_t mid_high = vsli_n_u16(mid, high, 6);
|
|
54
|
+
// (perm_low << 8) | (perm_low >> 8)
|
|
55
|
+
// xxxxxxxx 10cccccc
|
|
56
|
+
uint16x4_t low = vreinterpret_u16_u8(vrev16_u8(perm_low));
|
|
57
|
+
// Shift left insert into the low bits
|
|
58
|
+
// aaaabbbb bbcccccc
|
|
59
|
+
uint16x4_t composed = vsli_n_u16(low, mid_high, 6);
|
|
60
|
+
return composed;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
simdutf_really_inline uint16x8_t convert_utf8_2_byte_to_utf16(uint8x16_t in) {
|
|
64
|
+
// Converts 6 2 byte UTF-8 characters to 6 UTF-16 characters.
|
|
65
|
+
// Technically this calculates 8, but 6 does better and happens more often
|
|
66
|
+
// (The languages which use these codepoints use ASCII spaces so 8 would need
|
|
67
|
+
// to be in the middle of a very long word).
|
|
68
|
+
|
|
69
|
+
// 10bbbbbb 110aaaaa
|
|
70
|
+
uint16x8_t upper = vreinterpretq_u16_u8(in);
|
|
71
|
+
// (in << 8) | (in >> 8)
|
|
72
|
+
// 110aaaaa 10bbbbbb
|
|
73
|
+
uint16x8_t lower = vreinterpretq_u16_u8(vrev16q_u8(in));
|
|
74
|
+
// 00000000 000aaaaa
|
|
75
|
+
uint16x8_t upper_masked = vandq_u16(upper, vmovq_n_u16(0x1F));
|
|
76
|
+
// Assemble with shift left insert.
|
|
77
|
+
// 00000aaa aabbbbbb
|
|
78
|
+
uint16x8_t composed = vsliq_n_u16(lower, upper_masked, 6);
|
|
79
|
+
return composed;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
simdutf_really_inline uint16x8_t
|
|
83
|
+
convert_utf8_1_to_2_byte_to_utf16(uint8x16_t in, size_t shufutf8_idx) {
|
|
84
|
+
// Converts 6 1-2 byte UTF-8 characters to 6 UTF-16 characters.
|
|
85
|
+
// This is a relatively easy scenario
|
|
86
|
+
// we process SIX (6) input code-code units. The max length in bytes of six
|
|
87
|
+
// code code units spanning between 1 and 2 bytes each is 12 bytes.
|
|
88
|
+
uint8x16_t sh = vld1q_u8(reinterpret_cast<const uint8_t *>(
|
|
89
|
+
simdutf::tables::utf8_to_utf16::shufutf8[shufutf8_idx]));
|
|
90
|
+
// Shuffle
|
|
91
|
+
// 1 byte: 00000000 0bbbbbbb
|
|
92
|
+
// 2 byte: 110aaaaa 10bbbbbb
|
|
93
|
+
uint16x8_t perm = vreinterpretq_u16_u8(vqtbl1q_u8(in, sh));
|
|
94
|
+
// Mask
|
|
95
|
+
// 1 byte: 00000000 0bbbbbbb
|
|
96
|
+
// 2 byte: 00000000 00bbbbbb
|
|
97
|
+
uint16x8_t ascii = vandq_u16(perm, vmovq_n_u16(0x7f)); // 6 or 7 bits
|
|
98
|
+
// 1 byte: 00000000 00000000
|
|
99
|
+
// 2 byte: 000aaaaa 00000000
|
|
100
|
+
uint16x8_t highbyte = vandq_u16(perm, vmovq_n_u16(0x1f00)); // 5 bits
|
|
101
|
+
// Combine with a shift right accumulate
|
|
102
|
+
// 1 byte: 00000000 0bbbbbbb
|
|
103
|
+
// 2 byte: 00000aaa aabbbbbb
|
|
104
|
+
uint16x8_t composed = vsraq_n_u16(ascii, highbyte, 2);
|
|
105
|
+
return composed;
|
|
106
|
+
}
|
|
107
|
+
#endif // SIMDUTF_FEATURE_UTF8 && (SIMDUTF_FEATURE_UTF16 ||
|
|
108
|
+
// SIMDUTF_FEATURE_UTF32)
|
|
109
|
+
|
|
110
|
+
#if SIMDUTF_FEATURE_UTF16
|
|
111
|
+
#include "arm64/arm_utf16fix.cpp"
|
|
112
|
+
#endif // SIMDUTF_FEATURE_UTF16
|
|
113
|
+
#if SIMDUTF_FEATURE_UTF16 || SIMDUTF_FEATURE_DETECT_ENCODING
|
|
114
|
+
#include "arm64/arm_validate_utf16.cpp"
|
|
115
|
+
#endif // SIMDUTF_FEATURE_UTF16 || SIMDUTF_FEATURE_DETECT_ENCODING
|
|
116
|
+
#if SIMDUTF_FEATURE_UTF32 || SIMDUTF_FEATURE_DETECT_ENCODING
|
|
117
|
+
#include "arm64/arm_validate_utf32le.cpp"
|
|
118
|
+
#endif // SIMDUTF_FEATURE_UTF32 || SIMDUTF_FEATURE_DETECT_ENCODING
|
|
119
|
+
|
|
120
|
+
#if SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_LATIN1
|
|
121
|
+
#include "arm64/arm_convert_latin1_to_utf16.cpp"
|
|
122
|
+
#endif // SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_LATIN1
|
|
123
|
+
#if SIMDUTF_FEATURE_UTF32 && SIMDUTF_FEATURE_LATIN1
|
|
124
|
+
#include "arm64/arm_convert_latin1_to_utf32.cpp"
|
|
125
|
+
#endif // SIMDUTF_FEATURE_UTF32 && SIMDUTF_FEATURE_LATIN1
|
|
126
|
+
#if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_LATIN1
|
|
127
|
+
#include "arm64/arm_convert_latin1_to_utf8.cpp"
|
|
128
|
+
#endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_LATIN1
|
|
129
|
+
|
|
130
|
+
#if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_LATIN1
|
|
131
|
+
#include "arm64/arm_convert_utf8_to_latin1.cpp"
|
|
132
|
+
#endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_LATIN1
|
|
133
|
+
#if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
|
|
134
|
+
#include "arm64/arm_convert_utf8_to_utf16.cpp"
|
|
135
|
+
#endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
|
|
136
|
+
#if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
|
|
137
|
+
#include "arm64/arm_convert_utf8_to_utf32.cpp"
|
|
138
|
+
#endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
|
|
139
|
+
|
|
140
|
+
#if SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_LATIN1
|
|
141
|
+
#include "arm64/arm_convert_utf16_to_latin1.cpp"
|
|
142
|
+
#endif // SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_LATIN1
|
|
143
|
+
#if SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_UTF32
|
|
144
|
+
#include "arm64/arm_convert_utf16_to_utf32.cpp"
|
|
145
|
+
#endif // SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_UTF32
|
|
146
|
+
#if SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_UTF8
|
|
147
|
+
#include "arm64/arm_convert_utf16_to_utf8.cpp"
|
|
148
|
+
#endif // SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_UTF8
|
|
149
|
+
|
|
150
|
+
#if SIMDUTF_FEATURE_BASE64
|
|
151
|
+
#include "arm64/arm_base64.cpp"
|
|
152
|
+
#include "arm64/arm_find.cpp"
|
|
153
|
+
#endif // SIMDUTF_FEATURE_BASE64
|
|
154
|
+
#if SIMDUTF_FEATURE_UTF32 && SIMDUTF_FEATURE_LATIN1
|
|
155
|
+
#include "arm64/arm_convert_utf32_to_latin1.cpp"
|
|
156
|
+
#endif // SIMDUTF_FEATURE_UTF32 && SIMDUTF_FEATURE_LATIN1
|
|
157
|
+
#if SIMDUTF_FEATURE_UTF32 && SIMDUTF_FEATURE_UTF16
|
|
158
|
+
#include "arm64/arm_convert_utf32_to_utf16.cpp"
|
|
159
|
+
#endif // SIMDUTF_FEATURE_UTF32 && SIMDUTF_FEATURE_UTF16
|
|
160
|
+
#if SIMDUTF_FEATURE_UTF32 && SIMDUTF_FEATURE_UTF8
|
|
161
|
+
#include "arm64/arm_convert_utf32_to_utf8.cpp"
|
|
162
|
+
#endif // SIMDUTF_FEATURE_UTF32 && SIMDUTF_FEATURE_UTF8
|
|
163
|
+
|
|
164
|
+
} // unnamed namespace
|
|
165
|
+
} // namespace SIMDUTF_IMPLEMENTATION
|
|
166
|
+
} // namespace simdutf
|
|
167
|
+
|
|
168
|
+
#include "generic/buf_block_reader.h"
|
|
169
|
+
#if SIMDUTF_FEATURE_UTF8 || SIMDUTF_FEATURE_DETECT_ENCODING
|
|
170
|
+
#include "generic/utf8_validation/utf8_lookup4_algorithm.h"
|
|
171
|
+
#include "generic/utf8_validation/utf8_validator.h"
|
|
172
|
+
#endif // SIMDUTF_FEATURE_UTF8 || SIMDUTF_FEATURE_DETECT_ENCODING
|
|
173
|
+
|
|
174
|
+
#if SIMDUTF_FEATURE_ASCII
|
|
175
|
+
#include "generic/ascii_validation.h"
|
|
176
|
+
#endif // SIMDUTF_FEATURE_ASCII
|
|
177
|
+
#if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
|
|
178
|
+
// transcoding from UTF-8 to UTF-16
|
|
179
|
+
#include "generic/utf8_to_utf16/utf8_to_utf16.h"
|
|
180
|
+
#include "generic/utf8_to_utf16/valid_utf8_to_utf16.h"
|
|
181
|
+
#endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
|
|
182
|
+
#if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
|
|
183
|
+
// transcoding from UTF-8 to UTF-32
|
|
184
|
+
#include "generic/utf8_to_utf32/utf8_to_utf32.h"
|
|
185
|
+
#include "generic/utf8_to_utf32/valid_utf8_to_utf32.h"
|
|
186
|
+
#endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
|
|
187
|
+
// other functions
|
|
188
|
+
#if SIMDUTF_FEATURE_UTF16
|
|
189
|
+
#include "generic/utf16.h"
|
|
190
|
+
#endif // SIMDUTF_FEATURE_UTF16
|
|
191
|
+
#if SIMDUTF_FEATURE_UTF8
|
|
192
|
+
#include "generic/utf8.h"
|
|
193
|
+
#endif // SIMDUTF_FEATURE_UTF8
|
|
194
|
+
#if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_LATIN1
|
|
195
|
+
// transcoding from UTF-8 to Latin 1
|
|
196
|
+
#include "generic/utf8_to_latin1/utf8_to_latin1.h"
|
|
197
|
+
#include "generic/utf8_to_latin1/valid_utf8_to_latin1.h"
|
|
198
|
+
#endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_LATIN1
|
|
199
|
+
#if SIMDUTF_FEATURE_BASE64
|
|
200
|
+
#include "generic/base64lengths.h"
|
|
201
|
+
#endif // SIMDUTF_FEATURE_BASE64
|
|
202
|
+
|
|
203
|
+
//
|
|
204
|
+
// Implementation-specific overrides
|
|
205
|
+
//
|
|
206
|
+
namespace simdutf {
|
|
207
|
+
namespace SIMDUTF_IMPLEMENTATION {
|
|
208
|
+
|
|
209
|
+
#if SIMDUTF_FEATURE_DETECT_ENCODING
|
|
210
|
+
simdutf_warn_unused int
|
|
211
|
+
implementation::detect_encodings(const char *input,
|
|
212
|
+
size_t length) const noexcept {
|
|
213
|
+
// If there is a BOM, then we trust it.
|
|
214
|
+
auto bom_encoding = simdutf::BOM::check_bom(input, length);
|
|
215
|
+
if (bom_encoding != encoding_type::unspecified) {
|
|
216
|
+
return bom_encoding;
|
|
217
|
+
}
|
|
218
|
+
// todo: reimplement as a one-pass algorithm.
|
|
219
|
+
int out = 0;
|
|
220
|
+
if (validate_utf8(input, length)) {
|
|
221
|
+
out |= encoding_type::UTF8;
|
|
222
|
+
}
|
|
223
|
+
if ((length % 2) == 0) {
|
|
224
|
+
if (validate_utf16le(reinterpret_cast<const char16_t *>(input),
|
|
225
|
+
length / 2)) {
|
|
226
|
+
out |= encoding_type::UTF16_LE;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
if ((length % 4) == 0) {
|
|
230
|
+
if (validate_utf32(reinterpret_cast<const char32_t *>(input), length / 4)) {
|
|
231
|
+
out |= encoding_type::UTF32_LE;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
return out;
|
|
235
|
+
}
|
|
236
|
+
#endif // SIMDUTF_FEATURE_DETECT_ENCODING
|
|
237
|
+
|
|
238
|
+
#if SIMDUTF_FEATURE_UTF8 || SIMDUTF_FEATURE_DETECT_ENCODING
|
|
239
|
+
simdutf_warn_unused bool
|
|
240
|
+
implementation::validate_utf8(const char *buf, size_t len) const noexcept {
|
|
241
|
+
return arm64::utf8_validation::generic_validate_utf8(buf, len);
|
|
242
|
+
}
|
|
243
|
+
#endif // SIMDUTF_FEATURE_UTF8 || SIMDUTF_FEATURE_DETECT_ENCODING
|
|
244
|
+
|
|
245
|
+
#if SIMDUTF_FEATURE_UTF8
|
|
246
|
+
simdutf_warn_unused result implementation::validate_utf8_with_errors(
|
|
247
|
+
const char *buf, size_t len) const noexcept {
|
|
248
|
+
return arm64::utf8_validation::generic_validate_utf8_with_errors(buf, len);
|
|
249
|
+
}
|
|
250
|
+
#endif // SIMDUTF_FEATURE_UTF8
|
|
251
|
+
|
|
252
|
+
#if SIMDUTF_FEATURE_ASCII
|
|
253
|
+
simdutf_warn_unused bool
|
|
254
|
+
implementation::validate_ascii(const char *buf, size_t len) const noexcept {
|
|
255
|
+
return arm64::ascii_validation::generic_validate_ascii(buf, len);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
simdutf_warn_unused result implementation::validate_ascii_with_errors(
|
|
259
|
+
const char *buf, size_t len) const noexcept {
|
|
260
|
+
return arm64::ascii_validation::generic_validate_ascii_with_errors(buf, len);
|
|
261
|
+
}
|
|
262
|
+
#endif // SIMDUTF_FEATURE_ASCII
|
|
263
|
+
|
|
264
|
+
#if SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_ASCII
|
|
265
|
+
simdutf_warn_unused bool
|
|
266
|
+
implementation::validate_utf16le_as_ascii(const char16_t *buf,
|
|
267
|
+
size_t len) const noexcept {
|
|
268
|
+
if (simdutf_unlikely(len == 0)) {
|
|
269
|
+
// empty input is valid. protected the implementation from nullptr.
|
|
270
|
+
return true;
|
|
271
|
+
}
|
|
272
|
+
const char16_t *tail =
|
|
273
|
+
arm_validate_utf16_as_ascii<endianness::LITTLE>(buf, len);
|
|
274
|
+
if (tail) {
|
|
275
|
+
return scalar::utf16::validate_as_ascii<endianness::LITTLE>(
|
|
276
|
+
tail, len - (tail - buf));
|
|
277
|
+
} else {
|
|
278
|
+
return false;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
simdutf_warn_unused bool
|
|
283
|
+
implementation::validate_utf16be_as_ascii(const char16_t *buf,
|
|
284
|
+
size_t len) const noexcept {
|
|
285
|
+
if (simdutf_unlikely(len == 0)) {
|
|
286
|
+
// empty input is valid. protected the implementation from nullptr.
|
|
287
|
+
return true;
|
|
288
|
+
}
|
|
289
|
+
const char16_t *tail = arm_validate_utf16_as_ascii<endianness::BIG>(buf, len);
|
|
290
|
+
if (tail) {
|
|
291
|
+
return scalar::utf16::validate_as_ascii<endianness::BIG>(
|
|
292
|
+
tail, len - (tail - buf));
|
|
293
|
+
} else {
|
|
294
|
+
return false;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
#endif // SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_ASCII
|
|
298
|
+
#if SIMDUTF_FEATURE_UTF16 || SIMDUTF_FEATURE_DETECT_ENCODING
|
|
299
|
+
simdutf_warn_unused bool
|
|
300
|
+
implementation::validate_utf16le(const char16_t *buf,
|
|
301
|
+
size_t len) const noexcept {
|
|
302
|
+
if (simdutf_unlikely(len == 0)) {
|
|
303
|
+
// empty input is valid. protected the implementation from nullptr.
|
|
304
|
+
return true;
|
|
305
|
+
}
|
|
306
|
+
const char16_t *tail = arm_validate_utf16<endianness::LITTLE>(buf, len);
|
|
307
|
+
if (tail) {
|
|
308
|
+
return scalar::utf16::validate<endianness::LITTLE>(tail,
|
|
309
|
+
len - (tail - buf));
|
|
310
|
+
} else {
|
|
311
|
+
return false;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
#endif // SIMDUTF_FEATURE_UTF16 || SIMDUTF_FEATURE_DETECT_ENCODING
|
|
315
|
+
|
|
316
|
+
#if SIMDUTF_FEATURE_UTF16
|
|
317
|
+
simdutf_warn_unused bool
|
|
318
|
+
implementation::validate_utf16be(const char16_t *buf,
|
|
319
|
+
size_t len) const noexcept {
|
|
320
|
+
if (simdutf_unlikely(len == 0)) {
|
|
321
|
+
// empty input is valid. protected the implementation from nullptr.
|
|
322
|
+
return true;
|
|
323
|
+
}
|
|
324
|
+
const char16_t *tail = arm_validate_utf16<endianness::BIG>(buf, len);
|
|
325
|
+
if (tail) {
|
|
326
|
+
return scalar::utf16::validate<endianness::BIG>(tail, len - (tail - buf));
|
|
327
|
+
} else {
|
|
328
|
+
return false;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
simdutf_warn_unused result implementation::validate_utf16le_with_errors(
|
|
333
|
+
const char16_t *buf, size_t len) const noexcept {
|
|
334
|
+
if (simdutf_unlikely(len == 0)) {
|
|
335
|
+
return result(error_code::SUCCESS, 0);
|
|
336
|
+
}
|
|
337
|
+
result res = arm_validate_utf16_with_errors<endianness::LITTLE>(buf, len);
|
|
338
|
+
if (res.count != len) {
|
|
339
|
+
result scalar_res = scalar::utf16::validate_with_errors<endianness::LITTLE>(
|
|
340
|
+
buf + res.count, len - res.count);
|
|
341
|
+
return result(scalar_res.error, res.count + scalar_res.count);
|
|
342
|
+
} else {
|
|
343
|
+
return res;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
simdutf_warn_unused result implementation::validate_utf16be_with_errors(
|
|
348
|
+
const char16_t *buf, size_t len) const noexcept {
|
|
349
|
+
if (simdutf_unlikely(len == 0)) {
|
|
350
|
+
return result(error_code::SUCCESS, 0);
|
|
351
|
+
}
|
|
352
|
+
result res = arm_validate_utf16_with_errors<endianness::BIG>(buf, len);
|
|
353
|
+
if (res.count != len) {
|
|
354
|
+
result scalar_res = scalar::utf16::validate_with_errors<endianness::BIG>(
|
|
355
|
+
buf + res.count, len - res.count);
|
|
356
|
+
return result(scalar_res.error, res.count + scalar_res.count);
|
|
357
|
+
} else {
|
|
358
|
+
return res;
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
void implementation::to_well_formed_utf16le(const char16_t *input, size_t len,
|
|
363
|
+
char16_t *output) const noexcept {
|
|
364
|
+
return utf16fix_neon_64bits<endianness::LITTLE>(input, len, output);
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
void implementation::to_well_formed_utf16be(const char16_t *input, size_t len,
|
|
368
|
+
char16_t *output) const noexcept {
|
|
369
|
+
return utf16fix_neon_64bits<endianness::BIG>(input, len, output);
|
|
370
|
+
}
|
|
371
|
+
#endif // SIMDUTF_FEATURE_UTF16
|
|
372
|
+
|
|
373
|
+
#if SIMDUTF_FEATURE_UTF32 || SIMDUTF_FEATURE_DETECT_ENCODING
|
|
374
|
+
simdutf_warn_unused bool
|
|
375
|
+
implementation::validate_utf32(const char32_t *buf, size_t len) const noexcept {
|
|
376
|
+
if (simdutf_unlikely(len == 0)) {
|
|
377
|
+
// empty input is valid. protected the implementation from nullptr.
|
|
378
|
+
return true;
|
|
379
|
+
}
|
|
380
|
+
const char32_t *tail = arm_validate_utf32le(buf, len);
|
|
381
|
+
if (tail) {
|
|
382
|
+
return scalar::utf32::validate(tail, len - (tail - buf));
|
|
383
|
+
} else {
|
|
384
|
+
return false;
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
#endif // SIMDUTF_FEATURE_UTF32 || SIMDUTF_FEATURE_DETECT_ENCODING
|
|
388
|
+
|
|
389
|
+
#if SIMDUTF_FEATURE_UTF32
|
|
390
|
+
simdutf_warn_unused result implementation::validate_utf32_with_errors(
|
|
391
|
+
const char32_t *buf, size_t len) const noexcept {
|
|
392
|
+
if (simdutf_unlikely(len == 0)) {
|
|
393
|
+
return result(error_code::SUCCESS, 0);
|
|
394
|
+
}
|
|
395
|
+
result res = arm_validate_utf32le_with_errors(buf, len);
|
|
396
|
+
if (res.count != len) {
|
|
397
|
+
result scalar_res =
|
|
398
|
+
scalar::utf32::validate_with_errors(buf + res.count, len - res.count);
|
|
399
|
+
return result(scalar_res.error, res.count + scalar_res.count);
|
|
400
|
+
} else {
|
|
401
|
+
return res;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
#endif // SIMDUTF_FEATURE_UTF32
|
|
405
|
+
|
|
406
|
+
#if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_LATIN1
|
|
407
|
+
simdutf_warn_unused size_t implementation::convert_latin1_to_utf8(
|
|
408
|
+
const char *buf, size_t len, char *utf8_output) const noexcept {
|
|
409
|
+
std::pair<const char *, char *> ret =
|
|
410
|
+
arm_convert_latin1_to_utf8(buf, len, utf8_output);
|
|
411
|
+
size_t converted_chars = ret.second - utf8_output;
|
|
412
|
+
|
|
413
|
+
if (ret.first != buf + len) {
|
|
414
|
+
const size_t scalar_converted_chars = scalar::latin1_to_utf8::convert(
|
|
415
|
+
ret.first, len - (ret.first - buf), ret.second);
|
|
416
|
+
converted_chars += scalar_converted_chars;
|
|
417
|
+
}
|
|
418
|
+
return converted_chars;
|
|
419
|
+
}
|
|
420
|
+
#endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_LATIN1
|
|
421
|
+
|
|
422
|
+
#if SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_LATIN1
|
|
423
|
+
simdutf_warn_unused size_t implementation::convert_latin1_to_utf16le(
|
|
424
|
+
const char *buf, size_t len, char16_t *utf16_output) const noexcept {
|
|
425
|
+
std::pair<const char *, char16_t *> ret =
|
|
426
|
+
arm_convert_latin1_to_utf16<endianness::LITTLE>(buf, len, utf16_output);
|
|
427
|
+
size_t converted_chars = ret.second - utf16_output;
|
|
428
|
+
if (ret.first != buf + len) {
|
|
429
|
+
const size_t scalar_converted_chars =
|
|
430
|
+
scalar::latin1_to_utf16::convert<endianness::LITTLE>(
|
|
431
|
+
ret.first, len - (ret.first - buf), ret.second);
|
|
432
|
+
converted_chars += scalar_converted_chars;
|
|
433
|
+
}
|
|
434
|
+
return converted_chars;
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
simdutf_warn_unused size_t implementation::convert_latin1_to_utf16be(
|
|
438
|
+
const char *buf, size_t len, char16_t *utf16_output) const noexcept {
|
|
439
|
+
std::pair<const char *, char16_t *> ret =
|
|
440
|
+
arm_convert_latin1_to_utf16<endianness::BIG>(buf, len, utf16_output);
|
|
441
|
+
size_t converted_chars = ret.second - utf16_output;
|
|
442
|
+
if (ret.first != buf + len) {
|
|
443
|
+
const size_t scalar_converted_chars =
|
|
444
|
+
scalar::latin1_to_utf16::convert<endianness::BIG>(
|
|
445
|
+
ret.first, len - (ret.first - buf), ret.second);
|
|
446
|
+
converted_chars += scalar_converted_chars;
|
|
447
|
+
}
|
|
448
|
+
return converted_chars;
|
|
449
|
+
}
|
|
450
|
+
#endif // SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_LATIN1
|
|
451
|
+
|
|
452
|
+
#if SIMDUTF_FEATURE_UTF32 && SIMDUTF_FEATURE_LATIN1
|
|
453
|
+
simdutf_warn_unused size_t implementation::convert_latin1_to_utf32(
|
|
454
|
+
const char *buf, size_t len, char32_t *utf32_output) const noexcept {
|
|
455
|
+
std::pair<const char *, char32_t *> ret =
|
|
456
|
+
arm_convert_latin1_to_utf32(buf, len, utf32_output);
|
|
457
|
+
size_t converted_chars = ret.second - utf32_output;
|
|
458
|
+
if (ret.first != buf + len) {
|
|
459
|
+
const size_t scalar_converted_chars = scalar::latin1_to_utf32::convert(
|
|
460
|
+
ret.first, len - (ret.first - buf), ret.second);
|
|
461
|
+
converted_chars += scalar_converted_chars;
|
|
462
|
+
}
|
|
463
|
+
return converted_chars;
|
|
464
|
+
}
|
|
465
|
+
#endif // SIMDUTF_FEATURE_UTF32 && SIMDUTF_FEATURE_LATIN1
|
|
466
|
+
|
|
467
|
+
#if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_LATIN1
|
|
468
|
+
simdutf_warn_unused size_t implementation::convert_utf8_to_latin1(
|
|
469
|
+
const char *buf, size_t len, char *latin1_output) const noexcept {
|
|
470
|
+
utf8_to_latin1::validating_transcoder converter;
|
|
471
|
+
return converter.convert(buf, len, latin1_output);
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
simdutf_warn_unused result implementation::convert_utf8_to_latin1_with_errors(
|
|
475
|
+
const char *buf, size_t len, char *latin1_output) const noexcept {
|
|
476
|
+
utf8_to_latin1::validating_transcoder converter;
|
|
477
|
+
return converter.convert_with_errors(buf, len, latin1_output);
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
simdutf_warn_unused size_t implementation::convert_valid_utf8_to_latin1(
|
|
481
|
+
const char *buf, size_t len, char *latin1_output) const noexcept {
|
|
482
|
+
return arm64::utf8_to_latin1::convert_valid(buf, len, latin1_output);
|
|
483
|
+
}
|
|
484
|
+
#endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_LATIN1
|
|
485
|
+
|
|
486
|
+
#if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
|
|
487
|
+
simdutf_warn_unused size_t implementation::convert_utf8_to_utf16le(
|
|
488
|
+
const char *buf, size_t len, char16_t *utf16_output) const noexcept {
|
|
489
|
+
utf8_to_utf16::validating_transcoder converter;
|
|
490
|
+
return converter.convert<endianness::LITTLE>(buf, len, utf16_output);
|
|
491
|
+
}
|
|
492
|
+
#endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
|
|
493
|
+
|
|
494
|
+
#if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
|
|
495
|
+
simdutf_warn_unused size_t implementation::convert_utf8_to_utf16be(
|
|
496
|
+
const char *buf, size_t len, char16_t *utf16_output) const noexcept {
|
|
497
|
+
utf8_to_utf16::validating_transcoder converter;
|
|
498
|
+
return converter.convert<endianness::BIG>(buf, len, utf16_output);
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
simdutf_warn_unused result implementation::convert_utf8_to_utf16le_with_errors(
|
|
502
|
+
const char *buf, size_t len, char16_t *utf16_output) const noexcept {
|
|
503
|
+
utf8_to_utf16::validating_transcoder converter;
|
|
504
|
+
return converter.convert_with_errors<endianness::LITTLE>(buf, len,
|
|
505
|
+
utf16_output);
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
simdutf_warn_unused result implementation::convert_utf8_to_utf16be_with_errors(
|
|
509
|
+
const char *buf, size_t len, char16_t *utf16_output) const noexcept {
|
|
510
|
+
utf8_to_utf16::validating_transcoder converter;
|
|
511
|
+
return converter.convert_with_errors<endianness::BIG>(buf, len, utf16_output);
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf16le(
|
|
515
|
+
const char *input, size_t size, char16_t *utf16_output) const noexcept {
|
|
516
|
+
return utf8_to_utf16::convert_valid<endianness::LITTLE>(input, size,
|
|
517
|
+
utf16_output);
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf16be(
|
|
521
|
+
const char *input, size_t size, char16_t *utf16_output) const noexcept {
|
|
522
|
+
return utf8_to_utf16::convert_valid<endianness::BIG>(input, size,
|
|
523
|
+
utf16_output);
|
|
524
|
+
}
|
|
525
|
+
#endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
|
|
526
|
+
|
|
527
|
+
#if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
|
|
528
|
+
simdutf_warn_unused size_t implementation::convert_utf8_to_utf32(
|
|
529
|
+
const char *buf, size_t len, char32_t *utf32_output) const noexcept {
|
|
530
|
+
utf8_to_utf32::validating_transcoder converter;
|
|
531
|
+
return converter.convert(buf, len, utf32_output);
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
simdutf_warn_unused result implementation::convert_utf8_to_utf32_with_errors(
|
|
535
|
+
const char *buf, size_t len, char32_t *utf32_output) const noexcept {
|
|
536
|
+
utf8_to_utf32::validating_transcoder converter;
|
|
537
|
+
return converter.convert_with_errors(buf, len, utf32_output);
|
|
538
|
+
}
|
|
539
|
+
#endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
|
|
540
|
+
|
|
541
|
+
#if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
|
|
542
|
+
simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf32(
|
|
543
|
+
const char *input, size_t size, char32_t *utf32_output) const noexcept {
|
|
544
|
+
return utf8_to_utf32::convert_valid(input, size, utf32_output);
|
|
545
|
+
}
|
|
546
|
+
#endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
|
|
547
|
+
|
|
548
|
+
#if SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_LATIN1
|
|
549
|
+
simdutf_warn_unused size_t implementation::convert_utf16le_to_latin1(
|
|
550
|
+
const char16_t *buf, size_t len, char *latin1_output) const noexcept {
|
|
551
|
+
std::pair<const char16_t *, char *> ret =
|
|
552
|
+
arm_convert_utf16_to_latin1<endianness::LITTLE>(buf, len, latin1_output);
|
|
553
|
+
if (ret.first == nullptr) {
|
|
554
|
+
return 0;
|
|
555
|
+
}
|
|
556
|
+
size_t saved_bytes = ret.second - latin1_output;
|
|
557
|
+
|
|
558
|
+
if (ret.first != buf + len) {
|
|
559
|
+
const size_t scalar_saved_bytes =
|
|
560
|
+
scalar::utf16_to_latin1::convert<endianness::LITTLE>(
|
|
561
|
+
ret.first, len - (ret.first - buf), ret.second);
|
|
562
|
+
if (scalar_saved_bytes == 0) {
|
|
563
|
+
return 0;
|
|
564
|
+
}
|
|
565
|
+
saved_bytes += scalar_saved_bytes;
|
|
566
|
+
}
|
|
567
|
+
return saved_bytes;
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
simdutf_warn_unused size_t implementation::convert_utf16be_to_latin1(
|
|
571
|
+
const char16_t *buf, size_t len, char *latin1_output) const noexcept {
|
|
572
|
+
std::pair<const char16_t *, char *> ret =
|
|
573
|
+
arm_convert_utf16_to_latin1<endianness::BIG>(buf, len, latin1_output);
|
|
574
|
+
if (ret.first == nullptr) {
|
|
575
|
+
return 0;
|
|
576
|
+
}
|
|
577
|
+
size_t saved_bytes = ret.second - latin1_output;
|
|
578
|
+
|
|
579
|
+
if (ret.first != buf + len) {
|
|
580
|
+
const size_t scalar_saved_bytes =
|
|
581
|
+
scalar::utf16_to_latin1::convert<endianness::BIG>(
|
|
582
|
+
ret.first, len - (ret.first - buf), ret.second);
|
|
583
|
+
if (scalar_saved_bytes == 0) {
|
|
584
|
+
return 0;
|
|
585
|
+
}
|
|
586
|
+
saved_bytes += scalar_saved_bytes;
|
|
587
|
+
}
|
|
588
|
+
return saved_bytes;
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
simdutf_warn_unused result
|
|
592
|
+
implementation::convert_utf16le_to_latin1_with_errors(
|
|
593
|
+
const char16_t *buf, size_t len, char *latin1_output) const noexcept {
|
|
594
|
+
std::pair<result, char *> ret =
|
|
595
|
+
arm_convert_utf16_to_latin1_with_errors<endianness::LITTLE>(
|
|
596
|
+
buf, len, latin1_output);
|
|
597
|
+
if (ret.first.error) {
|
|
598
|
+
return ret.first;
|
|
599
|
+
} // Can return directly since scalar fallback already found correct
|
|
600
|
+
// ret.first.count
|
|
601
|
+
if (ret.first.count != len) { // All good so far, but not finished
|
|
602
|
+
result scalar_res =
|
|
603
|
+
scalar::utf16_to_latin1::convert_with_errors<endianness::LITTLE>(
|
|
604
|
+
buf + ret.first.count, len - ret.first.count, ret.second);
|
|
605
|
+
if (scalar_res.error) {
|
|
606
|
+
scalar_res.count += ret.first.count;
|
|
607
|
+
return scalar_res;
|
|
608
|
+
} else {
|
|
609
|
+
ret.second += scalar_res.count;
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
ret.first.count =
|
|
613
|
+
ret.second -
|
|
614
|
+
latin1_output; // Set count to the number of 8-bit code units written
|
|
615
|
+
return ret.first;
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
simdutf_warn_unused result
|
|
619
|
+
implementation::convert_utf16be_to_latin1_with_errors(
|
|
620
|
+
const char16_t *buf, size_t len, char *latin1_output) const noexcept {
|
|
621
|
+
std::pair<result, char *> ret =
|
|
622
|
+
arm_convert_utf16_to_latin1_with_errors<endianness::BIG>(buf, len,
|
|
623
|
+
latin1_output);
|
|
624
|
+
if (ret.first.error) {
|
|
625
|
+
return ret.first;
|
|
626
|
+
} // Can return directly since scalar fallback already found correct
|
|
627
|
+
// ret.first.count
|
|
628
|
+
if (ret.first.count != len) { // All good so far, but not finished
|
|
629
|
+
result scalar_res =
|
|
630
|
+
scalar::utf16_to_latin1::convert_with_errors<endianness::BIG>(
|
|
631
|
+
buf + ret.first.count, len - ret.first.count, ret.second);
|
|
632
|
+
if (scalar_res.error) {
|
|
633
|
+
scalar_res.count += ret.first.count;
|
|
634
|
+
return scalar_res;
|
|
635
|
+
} else {
|
|
636
|
+
ret.second += scalar_res.count;
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
ret.first.count =
|
|
640
|
+
ret.second -
|
|
641
|
+
latin1_output; // Set count to the number of 8-bit code units written
|
|
642
|
+
return ret.first;
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_latin1(
|
|
646
|
+
const char16_t *buf, size_t len, char *latin1_output) const noexcept {
|
|
647
|
+
// optimization opportunity: implement a custom function.
|
|
648
|
+
return convert_utf16be_to_latin1(buf, len, latin1_output);
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_latin1(
|
|
652
|
+
const char16_t *buf, size_t len, char *latin1_output) const noexcept {
|
|
653
|
+
// optimization opportunity: implement a custom function.
|
|
654
|
+
return convert_utf16le_to_latin1(buf, len, latin1_output);
|
|
655
|
+
}
|
|
656
|
+
#endif // SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_LATIN1
|
|
657
|
+
|
|
658
|
+
#if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
|
|
659
|
+
simdutf_warn_unused size_t implementation::convert_utf16le_to_utf8(
|
|
660
|
+
const char16_t *buf, size_t len, char *utf8_output) const noexcept {
|
|
661
|
+
std::pair<const char16_t *, char *> ret =
|
|
662
|
+
arm_convert_utf16_to_utf8<endianness::LITTLE>(buf, len, utf8_output);
|
|
663
|
+
if (ret.first == nullptr) {
|
|
664
|
+
return 0;
|
|
665
|
+
}
|
|
666
|
+
size_t saved_bytes = ret.second - utf8_output;
|
|
667
|
+
if (ret.first != buf + len) {
|
|
668
|
+
const size_t scalar_saved_bytes =
|
|
669
|
+
scalar::utf16_to_utf8::convert<endianness::LITTLE>(
|
|
670
|
+
ret.first, len - (ret.first - buf), ret.second);
|
|
671
|
+
if (scalar_saved_bytes == 0) {
|
|
672
|
+
return 0;
|
|
673
|
+
}
|
|
674
|
+
saved_bytes += scalar_saved_bytes;
|
|
675
|
+
}
|
|
676
|
+
return saved_bytes;
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
simdutf_warn_unused size_t implementation::convert_utf16be_to_utf8(
|
|
680
|
+
const char16_t *buf, size_t len, char *utf8_output) const noexcept {
|
|
681
|
+
std::pair<const char16_t *, char *> ret =
|
|
682
|
+
arm_convert_utf16_to_utf8<endianness::BIG>(buf, len, utf8_output);
|
|
683
|
+
if (ret.first == nullptr) {
|
|
684
|
+
return 0;
|
|
685
|
+
}
|
|
686
|
+
size_t saved_bytes = ret.second - utf8_output;
|
|
687
|
+
if (ret.first != buf + len) {
|
|
688
|
+
const size_t scalar_saved_bytes =
|
|
689
|
+
scalar::utf16_to_utf8::convert<endianness::BIG>(
|
|
690
|
+
ret.first, len - (ret.first - buf), ret.second);
|
|
691
|
+
if (scalar_saved_bytes == 0) {
|
|
692
|
+
return 0;
|
|
693
|
+
}
|
|
694
|
+
saved_bytes += scalar_saved_bytes;
|
|
695
|
+
}
|
|
696
|
+
return saved_bytes;
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
simdutf_warn_unused result implementation::convert_utf16le_to_utf8_with_errors(
|
|
700
|
+
const char16_t *buf, size_t len, char *utf8_output) const noexcept {
|
|
701
|
+
// ret.first.count is always the position in the buffer, not the number of
|
|
702
|
+
// code units written even if finished
|
|
703
|
+
std::pair<result, char *> ret =
|
|
704
|
+
arm_convert_utf16_to_utf8_with_errors<endianness::LITTLE>(buf, len,
|
|
705
|
+
utf8_output);
|
|
706
|
+
if (ret.first.error) {
|
|
707
|
+
return ret.first;
|
|
708
|
+
} // Can return directly since scalar fallback already found correct
|
|
709
|
+
// ret.first.count
|
|
710
|
+
if (ret.first.count != len) { // All good so far, but not finished
|
|
711
|
+
result scalar_res =
|
|
712
|
+
scalar::utf16_to_utf8::convert_with_errors<endianness::LITTLE>(
|
|
713
|
+
buf + ret.first.count, len - ret.first.count, ret.second);
|
|
714
|
+
if (scalar_res.error) {
|
|
715
|
+
scalar_res.count += ret.first.count;
|
|
716
|
+
return scalar_res;
|
|
717
|
+
} else {
|
|
718
|
+
ret.second += scalar_res.count;
|
|
719
|
+
}
|
|
720
|
+
}
|
|
721
|
+
ret.first.count =
|
|
722
|
+
ret.second -
|
|
723
|
+
utf8_output; // Set count to the number of 8-bit code units written
|
|
724
|
+
return ret.first;
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
simdutf_warn_unused result implementation::convert_utf16be_to_utf8_with_errors(
|
|
728
|
+
const char16_t *buf, size_t len, char *utf8_output) const noexcept {
|
|
729
|
+
// ret.first.count is always the position in the buffer, not the number of
|
|
730
|
+
// code units written even if finished
|
|
731
|
+
std::pair<result, char *> ret =
|
|
732
|
+
arm_convert_utf16_to_utf8_with_errors<endianness::BIG>(buf, len,
|
|
733
|
+
utf8_output);
|
|
734
|
+
if (ret.first.error) {
|
|
735
|
+
return ret.first;
|
|
736
|
+
} // Can return directly since scalar fallback already found correct
|
|
737
|
+
// ret.first.count
|
|
738
|
+
if (ret.first.count != len) { // All good so far, but not finished
|
|
739
|
+
result scalar_res =
|
|
740
|
+
scalar::utf16_to_utf8::convert_with_errors<endianness::BIG>(
|
|
741
|
+
buf + ret.first.count, len - ret.first.count, ret.second);
|
|
742
|
+
if (scalar_res.error) {
|
|
743
|
+
scalar_res.count += ret.first.count;
|
|
744
|
+
return scalar_res;
|
|
745
|
+
} else {
|
|
746
|
+
ret.second += scalar_res.count;
|
|
747
|
+
}
|
|
748
|
+
}
|
|
749
|
+
ret.first.count =
|
|
750
|
+
ret.second -
|
|
751
|
+
utf8_output; // Set count to the number of 8-bit code units written
|
|
752
|
+
return ret.first;
|
|
753
|
+
}
|
|
754
|
+
|
|
755
|
+
simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_utf8(
|
|
756
|
+
const char16_t *buf, size_t len, char *utf8_output) const noexcept {
|
|
757
|
+
return convert_utf16le_to_utf8(buf, len, utf8_output);
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_utf8(
|
|
761
|
+
const char16_t *buf, size_t len, char *utf8_output) const noexcept {
|
|
762
|
+
return convert_utf16be_to_utf8(buf, len, utf8_output);
|
|
763
|
+
}
|
|
764
|
+
#endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
|
|
765
|
+
|
|
766
|
+
#if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
|
|
767
|
+
simdutf_warn_unused size_t implementation::convert_utf32_to_utf8(
|
|
768
|
+
const char32_t *buf, size_t len, char *utf8_output) const noexcept {
|
|
769
|
+
if (simdutf_unlikely(len == 0)) {
|
|
770
|
+
return 0;
|
|
771
|
+
}
|
|
772
|
+
std::pair<const char32_t *, char *> ret =
|
|
773
|
+
arm_convert_utf32_to_utf8(buf, len, utf8_output);
|
|
774
|
+
if (ret.first == nullptr) {
|
|
775
|
+
return 0;
|
|
776
|
+
}
|
|
777
|
+
size_t saved_bytes = ret.second - utf8_output;
|
|
778
|
+
if (ret.first != buf + len) {
|
|
779
|
+
const size_t scalar_saved_bytes = scalar::utf32_to_utf8::convert(
|
|
780
|
+
ret.first, len - (ret.first - buf), ret.second);
|
|
781
|
+
if (scalar_saved_bytes == 0) {
|
|
782
|
+
return 0;
|
|
783
|
+
}
|
|
784
|
+
saved_bytes += scalar_saved_bytes;
|
|
785
|
+
}
|
|
786
|
+
return saved_bytes;
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
simdutf_warn_unused result implementation::convert_utf32_to_utf8_with_errors(
|
|
790
|
+
const char32_t *buf, size_t len, char *utf8_output) const noexcept {
|
|
791
|
+
if (simdutf_unlikely(len == 0)) {
|
|
792
|
+
return result(error_code::SUCCESS, 0);
|
|
793
|
+
}
|
|
794
|
+
// ret.first.count is always the position in the buffer, not the number of
|
|
795
|
+
// code units written even if finished
|
|
796
|
+
std::pair<result, char *> ret =
|
|
797
|
+
arm_convert_utf32_to_utf8_with_errors(buf, len, utf8_output);
|
|
798
|
+
if (ret.first.count != len) {
|
|
799
|
+
result scalar_res = scalar::utf32_to_utf8::convert_with_errors(
|
|
800
|
+
buf + ret.first.count, len - ret.first.count, ret.second);
|
|
801
|
+
if (scalar_res.error) {
|
|
802
|
+
scalar_res.count += ret.first.count;
|
|
803
|
+
return scalar_res;
|
|
804
|
+
} else {
|
|
805
|
+
ret.second += scalar_res.count;
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
ret.first.count =
|
|
809
|
+
ret.second -
|
|
810
|
+
utf8_output; // Set count to the number of 8-bit code units written
|
|
811
|
+
return ret.first;
|
|
812
|
+
}
|
|
813
|
+
#endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
|
|
814
|
+
|
|
815
|
+
#if SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_UTF32
|
|
816
|
+
simdutf_warn_unused size_t implementation::convert_utf16le_to_utf32(
|
|
817
|
+
const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept {
|
|
818
|
+
std::pair<const char16_t *, char32_t *> ret =
|
|
819
|
+
arm_convert_utf16_to_utf32<endianness::LITTLE>(buf, len, utf32_output);
|
|
820
|
+
if (ret.first == nullptr) {
|
|
821
|
+
return 0;
|
|
822
|
+
}
|
|
823
|
+
size_t saved_bytes = ret.second - utf32_output;
|
|
824
|
+
if (ret.first != buf + len) {
|
|
825
|
+
const size_t scalar_saved_bytes =
|
|
826
|
+
scalar::utf16_to_utf32::convert<endianness::LITTLE>(
|
|
827
|
+
ret.first, len - (ret.first - buf), ret.second);
|
|
828
|
+
if (scalar_saved_bytes == 0) {
|
|
829
|
+
return 0;
|
|
830
|
+
}
|
|
831
|
+
saved_bytes += scalar_saved_bytes;
|
|
832
|
+
}
|
|
833
|
+
return saved_bytes;
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
simdutf_warn_unused size_t implementation::convert_utf16be_to_utf32(
|
|
837
|
+
const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept {
|
|
838
|
+
std::pair<const char16_t *, char32_t *> ret =
|
|
839
|
+
arm_convert_utf16_to_utf32<endianness::BIG>(buf, len, utf32_output);
|
|
840
|
+
if (ret.first == nullptr) {
|
|
841
|
+
return 0;
|
|
842
|
+
}
|
|
843
|
+
size_t saved_bytes = ret.second - utf32_output;
|
|
844
|
+
if (ret.first != buf + len) {
|
|
845
|
+
const size_t scalar_saved_bytes =
|
|
846
|
+
scalar::utf16_to_utf32::convert<endianness::BIG>(
|
|
847
|
+
ret.first, len - (ret.first - buf), ret.second);
|
|
848
|
+
if (scalar_saved_bytes == 0) {
|
|
849
|
+
return 0;
|
|
850
|
+
}
|
|
851
|
+
saved_bytes += scalar_saved_bytes;
|
|
852
|
+
}
|
|
853
|
+
return saved_bytes;
|
|
854
|
+
}
|
|
855
|
+
|
|
856
|
+
simdutf_warn_unused result implementation::convert_utf16le_to_utf32_with_errors(
|
|
857
|
+
const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept {
|
|
858
|
+
// ret.first.count is always the position in the buffer, not the number of
|
|
859
|
+
// code units written even if finished
|
|
860
|
+
std::pair<result, char32_t *> ret =
|
|
861
|
+
arm_convert_utf16_to_utf32_with_errors<endianness::LITTLE>(buf, len,
|
|
862
|
+
utf32_output);
|
|
863
|
+
if (ret.first.error) {
|
|
864
|
+
return ret.first;
|
|
865
|
+
} // Can return directly since scalar fallback already found correct
|
|
866
|
+
// ret.first.count
|
|
867
|
+
if (ret.first.count != len) { // All good so far, but not finished
|
|
868
|
+
result scalar_res =
|
|
869
|
+
scalar::utf16_to_utf32::convert_with_errors<endianness::LITTLE>(
|
|
870
|
+
buf + ret.first.count, len - ret.first.count, ret.second);
|
|
871
|
+
if (scalar_res.error) {
|
|
872
|
+
scalar_res.count += ret.first.count;
|
|
873
|
+
return scalar_res;
|
|
874
|
+
} else {
|
|
875
|
+
ret.second += scalar_res.count;
|
|
876
|
+
}
|
|
877
|
+
}
|
|
878
|
+
ret.first.count =
|
|
879
|
+
ret.second -
|
|
880
|
+
utf32_output; // Set count to the number of 8-bit code units written
|
|
881
|
+
return ret.first;
|
|
882
|
+
}
|
|
883
|
+
|
|
884
|
+
simdutf_warn_unused result implementation::convert_utf16be_to_utf32_with_errors(
|
|
885
|
+
const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept {
|
|
886
|
+
// ret.first.count is always the position in the buffer, not the number of
|
|
887
|
+
// code units written even if finished
|
|
888
|
+
std::pair<result, char32_t *> ret =
|
|
889
|
+
arm_convert_utf16_to_utf32_with_errors<endianness::BIG>(buf, len,
|
|
890
|
+
utf32_output);
|
|
891
|
+
if (ret.first.error) {
|
|
892
|
+
return ret.first;
|
|
893
|
+
} // Can return directly since scalar fallback already found correct
|
|
894
|
+
// ret.first.count
|
|
895
|
+
if (ret.first.count != len) { // All good so far, but not finished
|
|
896
|
+
result scalar_res =
|
|
897
|
+
scalar::utf16_to_utf32::convert_with_errors<endianness::BIG>(
|
|
898
|
+
buf + ret.first.count, len - ret.first.count, ret.second);
|
|
899
|
+
if (scalar_res.error) {
|
|
900
|
+
scalar_res.count += ret.first.count;
|
|
901
|
+
return scalar_res;
|
|
902
|
+
} else {
|
|
903
|
+
ret.second += scalar_res.count;
|
|
904
|
+
}
|
|
905
|
+
}
|
|
906
|
+
ret.first.count =
|
|
907
|
+
ret.second -
|
|
908
|
+
utf32_output; // Set count to the number of 8-bit code units written
|
|
909
|
+
return ret.first;
|
|
910
|
+
}
|
|
911
|
+
#endif // SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_UTF32
|
|
912
|
+
|
|
913
|
+
#if SIMDUTF_FEATURE_UTF32 && SIMDUTF_FEATURE_LATIN1
|
|
914
|
+
simdutf_warn_unused size_t implementation::convert_utf32_to_latin1(
|
|
915
|
+
const char32_t *buf, size_t len, char *latin1_output) const noexcept {
|
|
916
|
+
std::pair<const char32_t *, char *> ret =
|
|
917
|
+
arm_convert_utf32_to_latin1(buf, len, latin1_output);
|
|
918
|
+
if (ret.first == nullptr) {
|
|
919
|
+
return 0;
|
|
920
|
+
}
|
|
921
|
+
size_t saved_bytes = ret.second - latin1_output;
|
|
922
|
+
|
|
923
|
+
if (ret.first != buf + len) {
|
|
924
|
+
const size_t scalar_saved_bytes = scalar::utf32_to_latin1::convert(
|
|
925
|
+
ret.first, len - (ret.first - buf), ret.second);
|
|
926
|
+
if (scalar_saved_bytes == 0) {
|
|
927
|
+
return 0;
|
|
928
|
+
}
|
|
929
|
+
saved_bytes += scalar_saved_bytes;
|
|
930
|
+
}
|
|
931
|
+
return saved_bytes;
|
|
932
|
+
}
|
|
933
|
+
|
|
934
|
+
simdutf_warn_unused result implementation::convert_utf32_to_latin1_with_errors(
|
|
935
|
+
const char32_t *buf, size_t len, char *latin1_output) const noexcept {
|
|
936
|
+
std::pair<result, char *> ret =
|
|
937
|
+
arm_convert_utf32_to_latin1_with_errors(buf, len, latin1_output);
|
|
938
|
+
if (ret.first.error) {
|
|
939
|
+
return ret.first;
|
|
940
|
+
} // Can return directly since scalar fallback already found correct
|
|
941
|
+
// ret.first.count
|
|
942
|
+
if (ret.first.count != len) { // All good so far, but not finished
|
|
943
|
+
result scalar_res = scalar::utf32_to_latin1::convert_with_errors(
|
|
944
|
+
buf + ret.first.count, len - ret.first.count, ret.second);
|
|
945
|
+
if (scalar_res.error) {
|
|
946
|
+
scalar_res.count += ret.first.count;
|
|
947
|
+
return scalar_res;
|
|
948
|
+
} else {
|
|
949
|
+
ret.second += scalar_res.count;
|
|
950
|
+
}
|
|
951
|
+
}
|
|
952
|
+
ret.first.count =
|
|
953
|
+
ret.second -
|
|
954
|
+
latin1_output; // Set count to the number of 8-bit code units written
|
|
955
|
+
return ret.first;
|
|
956
|
+
}
|
|
957
|
+
|
|
958
|
+
simdutf_warn_unused size_t implementation::convert_valid_utf32_to_latin1(
|
|
959
|
+
const char32_t *buf, size_t len, char *latin1_output) const noexcept {
|
|
960
|
+
std::pair<const char32_t *, char *> ret =
|
|
961
|
+
arm_convert_utf32_to_latin1(buf, len, latin1_output);
|
|
962
|
+
if (ret.first == nullptr) {
|
|
963
|
+
return 0;
|
|
964
|
+
}
|
|
965
|
+
size_t saved_bytes = ret.second - latin1_output;
|
|
966
|
+
|
|
967
|
+
if (ret.first != buf + len) {
|
|
968
|
+
const size_t scalar_saved_bytes = scalar::utf32_to_latin1::convert_valid(
|
|
969
|
+
ret.first, len - (ret.first - buf), ret.second);
|
|
970
|
+
saved_bytes += scalar_saved_bytes;
|
|
971
|
+
}
|
|
972
|
+
return saved_bytes;
|
|
973
|
+
}
|
|
974
|
+
#endif // SIMDUTF_FEATURE_UTF32 && SIMDUTF_FEATURE_LATIN1
|
|
975
|
+
|
|
976
|
+
#if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
|
|
977
|
+
simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf8(
|
|
978
|
+
const char32_t *buf, size_t len, char *utf8_output) const noexcept {
|
|
979
|
+
// optimization opportunity: implement a custom function.
|
|
980
|
+
return convert_utf32_to_utf8(buf, len, utf8_output);
|
|
981
|
+
}
|
|
982
|
+
#endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
|
|
983
|
+
|
|
984
|
+
#if SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_UTF32
|
|
985
|
+
simdutf_warn_unused size_t implementation::convert_utf32_to_utf16le(
|
|
986
|
+
const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept {
|
|
987
|
+
std::pair<const char32_t *, char16_t *> ret =
|
|
988
|
+
arm_convert_utf32_to_utf16<endianness::LITTLE>(buf, len, utf16_output);
|
|
989
|
+
if (ret.first == nullptr) {
|
|
990
|
+
return 0;
|
|
991
|
+
}
|
|
992
|
+
size_t saved_bytes = ret.second - utf16_output;
|
|
993
|
+
if (ret.first != buf + len) {
|
|
994
|
+
const size_t scalar_saved_bytes =
|
|
995
|
+
scalar::utf32_to_utf16::convert<endianness::LITTLE>(
|
|
996
|
+
ret.first, len - (ret.first - buf), ret.second);
|
|
997
|
+
if (scalar_saved_bytes == 0) {
|
|
998
|
+
return 0;
|
|
999
|
+
}
|
|
1000
|
+
saved_bytes += scalar_saved_bytes;
|
|
1001
|
+
}
|
|
1002
|
+
return saved_bytes;
|
|
1003
|
+
}
|
|
1004
|
+
|
|
1005
|
+
simdutf_warn_unused size_t implementation::convert_utf32_to_utf16be(
|
|
1006
|
+
const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept {
|
|
1007
|
+
std::pair<const char32_t *, char16_t *> ret =
|
|
1008
|
+
arm_convert_utf32_to_utf16<endianness::BIG>(buf, len, utf16_output);
|
|
1009
|
+
if (ret.first == nullptr) {
|
|
1010
|
+
return 0;
|
|
1011
|
+
}
|
|
1012
|
+
size_t saved_bytes = ret.second - utf16_output;
|
|
1013
|
+
if (ret.first != buf + len) {
|
|
1014
|
+
const size_t scalar_saved_bytes =
|
|
1015
|
+
scalar::utf32_to_utf16::convert<endianness::BIG>(
|
|
1016
|
+
ret.first, len - (ret.first - buf), ret.second);
|
|
1017
|
+
if (scalar_saved_bytes == 0) {
|
|
1018
|
+
return 0;
|
|
1019
|
+
}
|
|
1020
|
+
saved_bytes += scalar_saved_bytes;
|
|
1021
|
+
}
|
|
1022
|
+
return saved_bytes;
|
|
1023
|
+
}
|
|
1024
|
+
|
|
1025
|
+
simdutf_warn_unused result implementation::convert_utf32_to_utf16le_with_errors(
|
|
1026
|
+
const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept {
|
|
1027
|
+
// ret.first.count is always the position in the buffer, not the number of
|
|
1028
|
+
// code units written even if finished
|
|
1029
|
+
std::pair<result, char16_t *> ret =
|
|
1030
|
+
arm_convert_utf32_to_utf16_with_errors<endianness::LITTLE>(buf, len,
|
|
1031
|
+
utf16_output);
|
|
1032
|
+
if (ret.first.count != len) {
|
|
1033
|
+
result scalar_res =
|
|
1034
|
+
scalar::utf32_to_utf16::convert_with_errors<endianness::LITTLE>(
|
|
1035
|
+
buf + ret.first.count, len - ret.first.count, ret.second);
|
|
1036
|
+
if (scalar_res.error) {
|
|
1037
|
+
scalar_res.count += ret.first.count;
|
|
1038
|
+
return scalar_res;
|
|
1039
|
+
} else {
|
|
1040
|
+
ret.second += scalar_res.count;
|
|
1041
|
+
}
|
|
1042
|
+
}
|
|
1043
|
+
ret.first.count =
|
|
1044
|
+
ret.second -
|
|
1045
|
+
utf16_output; // Set count to the number of 8-bit code units written
|
|
1046
|
+
return ret.first;
|
|
1047
|
+
}
|
|
1048
|
+
|
|
1049
|
+
simdutf_warn_unused result implementation::convert_utf32_to_utf16be_with_errors(
|
|
1050
|
+
const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept {
|
|
1051
|
+
// ret.first.count is always the position in the buffer, not the number of
|
|
1052
|
+
// code units written even if finished
|
|
1053
|
+
std::pair<result, char16_t *> ret =
|
|
1054
|
+
arm_convert_utf32_to_utf16_with_errors<endianness::BIG>(buf, len,
|
|
1055
|
+
utf16_output);
|
|
1056
|
+
if (ret.first.count != len) {
|
|
1057
|
+
result scalar_res =
|
|
1058
|
+
scalar::utf32_to_utf16::convert_with_errors<endianness::BIG>(
|
|
1059
|
+
buf + ret.first.count, len - ret.first.count, ret.second);
|
|
1060
|
+
if (scalar_res.error) {
|
|
1061
|
+
scalar_res.count += ret.first.count;
|
|
1062
|
+
return scalar_res;
|
|
1063
|
+
} else {
|
|
1064
|
+
ret.second += scalar_res.count;
|
|
1065
|
+
}
|
|
1066
|
+
}
|
|
1067
|
+
ret.first.count =
|
|
1068
|
+
ret.second -
|
|
1069
|
+
utf16_output; // Set count to the number of 8-bit code units written
|
|
1070
|
+
return ret.first;
|
|
1071
|
+
}
|
|
1072
|
+
|
|
1073
|
+
simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf16le(
|
|
1074
|
+
const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept {
|
|
1075
|
+
return convert_utf32_to_utf16le(buf, len, utf16_output);
|
|
1076
|
+
}
|
|
1077
|
+
|
|
1078
|
+
simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf16be(
|
|
1079
|
+
const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept {
|
|
1080
|
+
return convert_utf32_to_utf16be(buf, len, utf16_output);
|
|
1081
|
+
}
|
|
1082
|
+
|
|
1083
|
+
simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_utf32(
|
|
1084
|
+
const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept {
|
|
1085
|
+
return convert_utf16le_to_utf32(buf, len, utf32_output);
|
|
1086
|
+
}
|
|
1087
|
+
|
|
1088
|
+
simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_utf32(
|
|
1089
|
+
const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept {
|
|
1090
|
+
return convert_utf16be_to_utf32(buf, len, utf32_output);
|
|
1091
|
+
}
|
|
1092
|
+
#endif // SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_UTF32
|
|
1093
|
+
|
|
1094
|
+
#if SIMDUTF_FEATURE_UTF16
|
|
1095
|
+
void implementation::change_endianness_utf16(const char16_t *input,
|
|
1096
|
+
size_t length,
|
|
1097
|
+
char16_t *output) const noexcept {
|
|
1098
|
+
utf16::change_endianness_utf16(input, length, output);
|
|
1099
|
+
}
|
|
1100
|
+
|
|
1101
|
+
simdutf_warn_unused size_t implementation::count_utf16le(
|
|
1102
|
+
const char16_t *input, size_t length) const noexcept {
|
|
1103
|
+
return utf16::count_code_points<endianness::LITTLE>(input, length);
|
|
1104
|
+
}
|
|
1105
|
+
|
|
1106
|
+
simdutf_warn_unused size_t implementation::count_utf16be(
|
|
1107
|
+
const char16_t *input, size_t length) const noexcept {
|
|
1108
|
+
return utf16::count_code_points<endianness::BIG>(input, length);
|
|
1109
|
+
}
|
|
1110
|
+
#endif // SIMDUTF_FEATURE_UTF16
|
|
1111
|
+
|
|
1112
|
+
#if SIMDUTF_FEATURE_UTF8
|
|
1113
|
+
simdutf_warn_unused size_t
|
|
1114
|
+
implementation::count_utf8(const char *input, size_t length) const noexcept {
|
|
1115
|
+
return utf8::count_code_points(input, length);
|
|
1116
|
+
}
|
|
1117
|
+
#endif // SIMDUTF_FEATURE_UTF8
|
|
1118
|
+
|
|
1119
|
+
#if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_LATIN1
|
|
1120
|
+
simdutf_warn_unused size_t implementation::latin1_length_from_utf8(
|
|
1121
|
+
const char *buf, size_t len) const noexcept {
|
|
1122
|
+
return count_utf8(buf, len);
|
|
1123
|
+
}
|
|
1124
|
+
#endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_LATIN1
|
|
1125
|
+
|
|
1126
|
+
#if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_LATIN1
|
|
1127
|
+
simdutf_warn_unused size_t implementation::utf8_length_from_latin1(
|
|
1128
|
+
const char *input, size_t length) const noexcept {
|
|
1129
|
+
// See
|
|
1130
|
+
// https://lemire.me/blog/2023/05/15/computing-the-utf-8-size-of-a-latin-1-string-quickly-arm-neon-edition/
|
|
1131
|
+
// credit to Pete Cawley
|
|
1132
|
+
const uint8_t *data = reinterpret_cast<const uint8_t *>(input);
|
|
1133
|
+
uint64_t result = 0;
|
|
1134
|
+
const int lanes = sizeof(uint8x16_t);
|
|
1135
|
+
uint8_t rem = length % lanes;
|
|
1136
|
+
const uint8_t *simd_end = data + (length / lanes) * lanes;
|
|
1137
|
+
const uint8x16_t threshold = vdupq_n_u8(0x80);
|
|
1138
|
+
for (; data < simd_end; data += lanes) {
|
|
1139
|
+
// load 16 bytes
|
|
1140
|
+
uint8x16_t input_vec = vld1q_u8(data);
|
|
1141
|
+
// compare to threshold (0x80)
|
|
1142
|
+
uint8x16_t withhighbit = vcgeq_u8(input_vec, threshold);
|
|
1143
|
+
// vertical addition
|
|
1144
|
+
result -= vaddvq_s8(vreinterpretq_s8_u8(withhighbit));
|
|
1145
|
+
}
|
|
1146
|
+
return result + (length / lanes) * lanes +
|
|
1147
|
+
scalar::latin1::utf8_length_from_latin1((const char *)simd_end, rem);
|
|
1148
|
+
}
|
|
1149
|
+
#endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_LATIN1
|
|
1150
|
+
|
|
1151
|
+
#if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
|
|
1152
|
+
simdutf_warn_unused size_t implementation::utf8_length_from_utf16le(
|
|
1153
|
+
const char16_t *input, size_t length) const noexcept {
|
|
1154
|
+
return arm64_utf8_length_from_utf16_bytemask<endianness::LITTLE>(input,
|
|
1155
|
+
length);
|
|
1156
|
+
}
|
|
1157
|
+
|
|
1158
|
+
simdutf_warn_unused size_t implementation::utf8_length_from_utf16be(
|
|
1159
|
+
const char16_t *input, size_t length) const noexcept {
|
|
1160
|
+
return arm64_utf8_length_from_utf16_bytemask<endianness::BIG>(input, length);
|
|
1161
|
+
}
|
|
1162
|
+
#endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
|
|
1163
|
+
|
|
1164
|
+
#if SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_UTF32
|
|
1165
|
+
simdutf_warn_unused size_t implementation::utf32_length_from_utf16le(
|
|
1166
|
+
const char16_t *input, size_t length) const noexcept {
|
|
1167
|
+
return utf16::utf32_length_from_utf16<endianness::LITTLE>(input, length);
|
|
1168
|
+
}
|
|
1169
|
+
|
|
1170
|
+
simdutf_warn_unused size_t implementation::utf32_length_from_utf16be(
|
|
1171
|
+
const char16_t *input, size_t length) const noexcept {
|
|
1172
|
+
return utf16::utf32_length_from_utf16<endianness::BIG>(input, length);
|
|
1173
|
+
}
|
|
1174
|
+
#endif // SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_UTF32
|
|
1175
|
+
|
|
1176
|
+
#if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
|
|
1177
|
+
simdutf_warn_unused size_t implementation::utf16_length_from_utf8(
|
|
1178
|
+
const char *input, size_t length) const noexcept {
|
|
1179
|
+
return utf8::utf16_length_from_utf8(input, length);
|
|
1180
|
+
}
|
|
1181
|
+
simdutf_warn_unused result
|
|
1182
|
+
implementation::utf8_length_from_utf16le_with_replacement(
|
|
1183
|
+
const char16_t *input, size_t length) const noexcept {
|
|
1184
|
+
return arm64_utf8_length_from_utf16_with_replacement<endianness::LITTLE>(
|
|
1185
|
+
input, length);
|
|
1186
|
+
}
|
|
1187
|
+
|
|
1188
|
+
simdutf_warn_unused result
|
|
1189
|
+
implementation::utf8_length_from_utf16be_with_replacement(
|
|
1190
|
+
const char16_t *input, size_t length) const noexcept {
|
|
1191
|
+
return arm64_utf8_length_from_utf16_with_replacement<endianness::BIG>(input,
|
|
1192
|
+
length);
|
|
1193
|
+
}
|
|
1194
|
+
|
|
1195
|
+
simdutf_warn_unused size_t
|
|
1196
|
+
implementation::convert_utf16le_to_utf8_with_replacement(
|
|
1197
|
+
const char16_t *input, size_t length, char *utf8_buffer) const noexcept {
|
|
1198
|
+
return scalar::utf16_to_utf8::convert_with_replacement<endianness::LITTLE>(
|
|
1199
|
+
input, length, utf8_buffer);
|
|
1200
|
+
}
|
|
1201
|
+
|
|
1202
|
+
simdutf_warn_unused size_t
|
|
1203
|
+
implementation::convert_utf16be_to_utf8_with_replacement(
|
|
1204
|
+
const char16_t *input, size_t length, char *utf8_buffer) const noexcept {
|
|
1205
|
+
return scalar::utf16_to_utf8::convert_with_replacement<endianness::BIG>(
|
|
1206
|
+
input, length, utf8_buffer);
|
|
1207
|
+
}
|
|
1208
|
+
|
|
1209
|
+
#endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
|
|
1210
|
+
|
|
1211
|
+
#if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
|
|
1212
|
+
simdutf_warn_unused size_t implementation::utf8_length_from_utf32(
|
|
1213
|
+
const char32_t *input, size_t length) const noexcept {
|
|
1214
|
+
const uint32x4_t v_7f = vmovq_n_u32((uint32_t)0x7f);
|
|
1215
|
+
const uint32x4_t v_7ff = vmovq_n_u32((uint32_t)0x7ff);
|
|
1216
|
+
const uint32x4_t v_ffff = vmovq_n_u32((uint32_t)0xffff);
|
|
1217
|
+
const uint32x4_t v_1 = vmovq_n_u32((uint32_t)0x1);
|
|
1218
|
+
size_t pos = 0;
|
|
1219
|
+
size_t count = 0;
|
|
1220
|
+
for (; pos + 4 <= length; pos += 4) {
|
|
1221
|
+
uint32x4_t in = vld1q_u32(reinterpret_cast<const uint32_t *>(input + pos));
|
|
1222
|
+
const uint32x4_t ascii_bytes_bytemask = vcleq_u32(in, v_7f);
|
|
1223
|
+
const uint32x4_t one_two_bytes_bytemask = vcleq_u32(in, v_7ff);
|
|
1224
|
+
const uint32x4_t two_bytes_bytemask =
|
|
1225
|
+
veorq_u32(one_two_bytes_bytemask, ascii_bytes_bytemask);
|
|
1226
|
+
const uint32x4_t three_bytes_bytemask =
|
|
1227
|
+
veorq_u32(vcleq_u32(in, v_ffff), one_two_bytes_bytemask);
|
|
1228
|
+
|
|
1229
|
+
const uint16x8_t reduced_ascii_bytes_bytemask =
|
|
1230
|
+
vreinterpretq_u16_u32(vandq_u32(ascii_bytes_bytemask, v_1));
|
|
1231
|
+
const uint16x8_t reduced_two_bytes_bytemask =
|
|
1232
|
+
vreinterpretq_u16_u32(vandq_u32(two_bytes_bytemask, v_1));
|
|
1233
|
+
const uint16x8_t reduced_three_bytes_bytemask =
|
|
1234
|
+
vreinterpretq_u16_u32(vandq_u32(three_bytes_bytemask, v_1));
|
|
1235
|
+
|
|
1236
|
+
const uint16x8_t compressed_bytemask0 =
|
|
1237
|
+
vpaddq_u16(reduced_ascii_bytes_bytemask, reduced_two_bytes_bytemask);
|
|
1238
|
+
const uint16x8_t compressed_bytemask1 =
|
|
1239
|
+
vpaddq_u16(reduced_three_bytes_bytemask, reduced_three_bytes_bytemask);
|
|
1240
|
+
|
|
1241
|
+
size_t ascii_count = count_ones(
|
|
1242
|
+
vgetq_lane_u64(vreinterpretq_u64_u16(compressed_bytemask0), 0));
|
|
1243
|
+
size_t two_bytes_count = count_ones(
|
|
1244
|
+
vgetq_lane_u64(vreinterpretq_u64_u16(compressed_bytemask0), 1));
|
|
1245
|
+
size_t three_bytes_count = count_ones(
|
|
1246
|
+
vgetq_lane_u64(vreinterpretq_u64_u16(compressed_bytemask1), 0));
|
|
1247
|
+
|
|
1248
|
+
count += 16 - 3 * ascii_count - 2 * two_bytes_count - three_bytes_count;
|
|
1249
|
+
}
|
|
1250
|
+
return count +
|
|
1251
|
+
scalar::utf32::utf8_length_from_utf32(input + pos, length - pos);
|
|
1252
|
+
}
|
|
1253
|
+
#endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
|
|
1254
|
+
|
|
1255
|
+
#if SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_UTF32
|
|
1256
|
+
simdutf_warn_unused size_t implementation::utf16_length_from_utf32(
|
|
1257
|
+
const char32_t *input, size_t length) const noexcept {
|
|
1258
|
+
const uint32x4_t v_ffff = vmovq_n_u32((uint32_t)0xffff);
|
|
1259
|
+
const uint32x4_t v_1 = vmovq_n_u32((uint32_t)0x1);
|
|
1260
|
+
size_t pos = 0;
|
|
1261
|
+
size_t count = 0;
|
|
1262
|
+
for (; pos + 4 <= length; pos += 4) {
|
|
1263
|
+
uint32x4_t in = vld1q_u32(reinterpret_cast<const uint32_t *>(input + pos));
|
|
1264
|
+
const uint32x4_t surrogate_bytemask = vcgtq_u32(in, v_ffff);
|
|
1265
|
+
const uint16x8_t reduced_bytemask =
|
|
1266
|
+
vreinterpretq_u16_u32(vandq_u32(surrogate_bytemask, v_1));
|
|
1267
|
+
const uint16x8_t compressed_bytemask =
|
|
1268
|
+
vpaddq_u16(reduced_bytemask, reduced_bytemask);
|
|
1269
|
+
size_t surrogate_count = count_ones(
|
|
1270
|
+
vgetq_lane_u64(vreinterpretq_u64_u16(compressed_bytemask), 0));
|
|
1271
|
+
count += 4 + surrogate_count;
|
|
1272
|
+
}
|
|
1273
|
+
return count +
|
|
1274
|
+
scalar::utf32::utf16_length_from_utf32(input + pos, length - pos);
|
|
1275
|
+
}
|
|
1276
|
+
#endif // SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_UTF32
|
|
1277
|
+
|
|
1278
|
+
#if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
|
|
1279
|
+
simdutf_warn_unused size_t implementation::utf32_length_from_utf8(
|
|
1280
|
+
const char *input, size_t length) const noexcept {
|
|
1281
|
+
return utf8::count_code_points(input, length);
|
|
1282
|
+
}
|
|
1283
|
+
#endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
|
|
1284
|
+
|
|
1285
|
+
#if SIMDUTF_FEATURE_BASE64
|
|
1286
|
+
simdutf_warn_unused result implementation::base64_to_binary(
|
|
1287
|
+
const char *input, size_t length, char *output, base64_options options,
|
|
1288
|
+
last_chunk_handling_options last_chunk_options) const noexcept {
|
|
1289
|
+
if (options & base64_default_or_url) {
|
|
1290
|
+
if (options == base64_options::base64_default_or_url_accept_garbage) {
|
|
1291
|
+
return compress_decode_base64<false, true, true>(
|
|
1292
|
+
output, input, length, options, last_chunk_options);
|
|
1293
|
+
} else {
|
|
1294
|
+
return compress_decode_base64<false, false, true>(
|
|
1295
|
+
output, input, length, options, last_chunk_options);
|
|
1296
|
+
}
|
|
1297
|
+
} else if (options & base64_url) {
|
|
1298
|
+
if (options == base64_options::base64_url_accept_garbage) {
|
|
1299
|
+
return compress_decode_base64<true, true, false>(
|
|
1300
|
+
output, input, length, options, last_chunk_options);
|
|
1301
|
+
} else {
|
|
1302
|
+
return compress_decode_base64<true, false, false>(
|
|
1303
|
+
output, input, length, options, last_chunk_options);
|
|
1304
|
+
}
|
|
1305
|
+
} else {
|
|
1306
|
+
if (options == base64_options::base64_default_accept_garbage) {
|
|
1307
|
+
return compress_decode_base64<false, true, false>(
|
|
1308
|
+
output, input, length, options, last_chunk_options);
|
|
1309
|
+
} else {
|
|
1310
|
+
return compress_decode_base64<false, false, false>(
|
|
1311
|
+
output, input, length, options, last_chunk_options);
|
|
1312
|
+
}
|
|
1313
|
+
}
|
|
1314
|
+
}
|
|
1315
|
+
|
|
1316
|
+
simdutf_warn_unused full_result implementation::base64_to_binary_details(
|
|
1317
|
+
const char *input, size_t length, char *output, base64_options options,
|
|
1318
|
+
last_chunk_handling_options last_chunk_options) const noexcept {
|
|
1319
|
+
if (options & base64_default_or_url) {
|
|
1320
|
+
if (options == base64_options::base64_default_or_url_accept_garbage) {
|
|
1321
|
+
return compress_decode_base64<false, true, true>(
|
|
1322
|
+
output, input, length, options, last_chunk_options);
|
|
1323
|
+
} else {
|
|
1324
|
+
return compress_decode_base64<false, false, true>(
|
|
1325
|
+
output, input, length, options, last_chunk_options);
|
|
1326
|
+
}
|
|
1327
|
+
} else if (options & base64_url) {
|
|
1328
|
+
if (options == base64_options::base64_url_accept_garbage) {
|
|
1329
|
+
return compress_decode_base64<true, true, false>(
|
|
1330
|
+
output, input, length, options, last_chunk_options);
|
|
1331
|
+
} else {
|
|
1332
|
+
return compress_decode_base64<true, false, false>(
|
|
1333
|
+
output, input, length, options, last_chunk_options);
|
|
1334
|
+
}
|
|
1335
|
+
} else {
|
|
1336
|
+
if (options == base64_options::base64_default_accept_garbage) {
|
|
1337
|
+
return compress_decode_base64<false, true, false>(
|
|
1338
|
+
output, input, length, options, last_chunk_options);
|
|
1339
|
+
} else {
|
|
1340
|
+
return compress_decode_base64<false, false, false>(
|
|
1341
|
+
output, input, length, options, last_chunk_options);
|
|
1342
|
+
}
|
|
1343
|
+
}
|
|
1344
|
+
}
|
|
1345
|
+
|
|
1346
|
+
simdutf_warn_unused result implementation::base64_to_binary(
|
|
1347
|
+
const char16_t *input, size_t length, char *output, base64_options options,
|
|
1348
|
+
last_chunk_handling_options last_chunk_options) const noexcept {
|
|
1349
|
+
if (options & base64_default_or_url) {
|
|
1350
|
+
if (options == base64_options::base64_default_or_url_accept_garbage) {
|
|
1351
|
+
return compress_decode_base64<false, true, true>(
|
|
1352
|
+
output, input, length, options, last_chunk_options);
|
|
1353
|
+
} else {
|
|
1354
|
+
return compress_decode_base64<false, false, true>(
|
|
1355
|
+
output, input, length, options, last_chunk_options);
|
|
1356
|
+
}
|
|
1357
|
+
} else if (options & base64_url) {
|
|
1358
|
+
if (options == base64_options::base64_url_accept_garbage) {
|
|
1359
|
+
return compress_decode_base64<true, true, false>(
|
|
1360
|
+
output, input, length, options, last_chunk_options);
|
|
1361
|
+
} else {
|
|
1362
|
+
return compress_decode_base64<true, false, false>(
|
|
1363
|
+
output, input, length, options, last_chunk_options);
|
|
1364
|
+
}
|
|
1365
|
+
} else {
|
|
1366
|
+
if (options == base64_options::base64_default_accept_garbage) {
|
|
1367
|
+
return compress_decode_base64<false, true, false>(
|
|
1368
|
+
output, input, length, options, last_chunk_options);
|
|
1369
|
+
} else {
|
|
1370
|
+
return compress_decode_base64<false, false, false>(
|
|
1371
|
+
output, input, length, options, last_chunk_options);
|
|
1372
|
+
}
|
|
1373
|
+
}
|
|
1374
|
+
}
|
|
1375
|
+
|
|
1376
|
+
simdutf_warn_unused full_result implementation::base64_to_binary_details(
|
|
1377
|
+
const char16_t *input, size_t length, char *output, base64_options options,
|
|
1378
|
+
last_chunk_handling_options last_chunk_options) const noexcept {
|
|
1379
|
+
if (options & base64_default_or_url) {
|
|
1380
|
+
if (options == base64_options::base64_default_or_url_accept_garbage) {
|
|
1381
|
+
return compress_decode_base64<false, true, true>(
|
|
1382
|
+
output, input, length, options, last_chunk_options);
|
|
1383
|
+
} else {
|
|
1384
|
+
return compress_decode_base64<false, false, true>(
|
|
1385
|
+
output, input, length, options, last_chunk_options);
|
|
1386
|
+
}
|
|
1387
|
+
} else if (options & base64_url) {
|
|
1388
|
+
if (options == base64_options::base64_url_accept_garbage) {
|
|
1389
|
+
return compress_decode_base64<true, true, false>(
|
|
1390
|
+
output, input, length, options, last_chunk_options);
|
|
1391
|
+
} else {
|
|
1392
|
+
return compress_decode_base64<true, false, false>(
|
|
1393
|
+
output, input, length, options, last_chunk_options);
|
|
1394
|
+
}
|
|
1395
|
+
} else {
|
|
1396
|
+
if (options == base64_options::base64_default_accept_garbage) {
|
|
1397
|
+
return compress_decode_base64<false, true, false>(
|
|
1398
|
+
output, input, length, options, last_chunk_options);
|
|
1399
|
+
} else {
|
|
1400
|
+
return compress_decode_base64<false, false, false>(
|
|
1401
|
+
output, input, length, options, last_chunk_options);
|
|
1402
|
+
}
|
|
1403
|
+
}
|
|
1404
|
+
}
|
|
1405
|
+
|
|
1406
|
+
size_t implementation::binary_to_base64(const char *input, size_t length,
|
|
1407
|
+
char *output,
|
|
1408
|
+
base64_options options) const noexcept {
|
|
1409
|
+
return encode_base64(output, input, length, options);
|
|
1410
|
+
}
|
|
1411
|
+
|
|
1412
|
+
size_t implementation::binary_to_base64_with_lines(
|
|
1413
|
+
const char *input, size_t length, char *output, size_t line_length,
|
|
1414
|
+
base64_options options) const noexcept {
|
|
1415
|
+
return encode_base64_impl<true>(output, input, length, options, line_length);
|
|
1416
|
+
}
|
|
1417
|
+
|
|
1418
|
+
const char *implementation::find(const char *start, const char *end,
|
|
1419
|
+
char character) const noexcept {
|
|
1420
|
+
return util_find(start, end, character);
|
|
1421
|
+
}
|
|
1422
|
+
|
|
1423
|
+
const char16_t *implementation::find(const char16_t *start, const char16_t *end,
|
|
1424
|
+
char16_t character) const noexcept {
|
|
1425
|
+
return util_find(start, end, character);
|
|
1426
|
+
}
|
|
1427
|
+
|
|
1428
|
+
simdutf_warn_unused size_t implementation::binary_length_from_base64(
|
|
1429
|
+
const char *input, size_t length) const noexcept {
|
|
1430
|
+
return base64_lengths::binary_length_from_base64(input, length);
|
|
1431
|
+
}
|
|
1432
|
+
|
|
1433
|
+
simdutf_warn_unused size_t implementation::binary_length_from_base64(
|
|
1434
|
+
const char16_t *input, size_t length) const noexcept {
|
|
1435
|
+
return base64_lengths::binary_length_from_base64(input, length);
|
|
1436
|
+
}
|
|
1437
|
+
#endif // SIMDUTF_FEATURE_BASE64
|
|
1438
|
+
|
|
1439
|
+
} // namespace SIMDUTF_IMPLEMENTATION
|
|
1440
|
+
} // namespace simdutf
|
|
1441
|
+
|
|
1442
|
+
#include "simdutf/arm64/end.h"
|