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