react-native-quick-crypto 1.0.19 → 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.
Files changed (732) hide show
  1. package/QuickCrypto.podspec +12 -38
  2. package/README.md +2 -0
  3. package/android/CMakeLists.txt +3 -0
  4. package/cpp/utils/HybridUtils.cpp +39 -77
  5. package/deps/simdutf/.clang-format +4 -0
  6. package/deps/simdutf/.github/ISSUE_TEMPLATE/bug_report.md +62 -0
  7. package/deps/simdutf/.github/ISSUE_TEMPLATE/config.yml +1 -0
  8. package/deps/simdutf/.github/ISSUE_TEMPLATE/feature_request.md +35 -0
  9. package/deps/simdutf/.github/ISSUE_TEMPLATE/standard-issue-template.md +29 -0
  10. package/deps/simdutf/.github/pull_request_template.md +51 -0
  11. package/deps/simdutf/.github/workflows/aarch64.yml +39 -0
  12. package/deps/simdutf/.github/workflows/alpine.yml +27 -0
  13. package/deps/simdutf/.github/workflows/amalgamation_demos.yml +34 -0
  14. package/deps/simdutf/.github/workflows/armv7.yml +32 -0
  15. package/deps/simdutf/.github/workflows/atomic_fuzz.yml +25 -0
  16. package/deps/simdutf/.github/workflows/cifuzz.yml +37 -0
  17. package/deps/simdutf/.github/workflows/clangformat.yml +36 -0
  18. package/deps/simdutf/.github/workflows/debian-latestcxxstandards.yml +40 -0
  19. package/deps/simdutf/.github/workflows/debian.yml +33 -0
  20. package/deps/simdutf/.github/workflows/documentation.yml +36 -0
  21. package/deps/simdutf/.github/workflows/emscripten.yml +19 -0
  22. package/deps/simdutf/.github/workflows/loongarch64-gcc-14.2.yml +39 -0
  23. package/deps/simdutf/.github/workflows/macos-latest.yml +29 -0
  24. package/deps/simdutf/.github/workflows/msys2-clang.yml +48 -0
  25. package/deps/simdutf/.github/workflows/msys2.yml +50 -0
  26. package/deps/simdutf/.github/workflows/ppc64le.yml +29 -0
  27. package/deps/simdutf/.github/workflows/rvv-1024-clang-18.yml +35 -0
  28. package/deps/simdutf/.github/workflows/rvv-128-clang-17.yml +35 -0
  29. package/deps/simdutf/.github/workflows/rvv-256-gcc-14.yml +31 -0
  30. package/deps/simdutf/.github/workflows/s390x.yml +29 -0
  31. package/deps/simdutf/.github/workflows/selective-amalgamation.yml +29 -0
  32. package/deps/simdutf/.github/workflows/typos.yml +19 -0
  33. package/deps/simdutf/.github/workflows/ubuntu22-cxx20.yml +30 -0
  34. package/deps/simdutf/.github/workflows/ubuntu22.yml +32 -0
  35. package/deps/simdutf/.github/workflows/ubuntu22_gcc12.yml +27 -0
  36. package/deps/simdutf/.github/workflows/ubuntu22sani.yml +29 -0
  37. package/deps/simdutf/.github/workflows/ubuntu24-cxxstandards.yml +34 -0
  38. package/deps/simdutf/.github/workflows/ubuntu24-unsignedchar.yml +34 -0
  39. package/deps/simdutf/.github/workflows/ubuntu24.yml +32 -0
  40. package/deps/simdutf/.github/workflows/ubuntu24sani.yml +36 -0
  41. package/deps/simdutf/.github/workflows/ubuntu24sani_clang.yml +29 -0
  42. package/deps/simdutf/.github/workflows/vs17-arm-ci.yml +21 -0
  43. package/deps/simdutf/.github/workflows/vs17-ci-cxx20.yml +41 -0
  44. package/deps/simdutf/.github/workflows/vs17-ci.yml +41 -0
  45. package/deps/simdutf/.github/workflows/vs17-clang-ci.yml +41 -0
  46. package/deps/simdutf/.github/workflows/vs17-cxxstandards.yml +36 -0
  47. package/deps/simdutf/AI_USAGE_POLICY.md +56 -0
  48. package/deps/simdutf/AUTHORS +6 -0
  49. package/deps/simdutf/CMakeLists.txt +231 -0
  50. package/deps/simdutf/CONTRIBUTING.md +214 -0
  51. package/deps/simdutf/CONTRIBUTORS +1 -0
  52. package/deps/simdutf/Doxyfile +2584 -0
  53. package/deps/simdutf/LICENSE-APACHE +201 -0
  54. package/deps/simdutf/LICENSE-MIT +18 -0
  55. package/deps/simdutf/Makefile.crosscompile +54 -0
  56. package/deps/simdutf/README-RVV.md +16 -0
  57. package/deps/simdutf/README.md +2782 -0
  58. package/deps/simdutf/SECURITY.md +8 -0
  59. package/deps/simdutf/benchmarks/CMakeLists.txt +101 -0
  60. package/deps/simdutf/benchmarks/alignment.cpp +150 -0
  61. package/deps/simdutf/benchmarks/base64/CMakeLists.txt +30 -0
  62. package/deps/simdutf/benchmarks/base64/benchmark_base64.cpp +875 -0
  63. package/deps/simdutf/benchmarks/base64/libbase64_spaces.h +49 -0
  64. package/deps/simdutf/benchmarks/base64/node_base64.h +227 -0
  65. package/deps/simdutf/benchmarks/base64/openssl3_base64.h +334 -0
  66. package/deps/simdutf/benchmarks/benchmark.cpp +65 -0
  67. package/deps/simdutf/benchmarks/benchmark_to_well_formed_utf16.cpp +347 -0
  68. package/deps/simdutf/benchmarks/competition/.clang-format-ignore +5 -0
  69. package/deps/simdutf/benchmarks/competition/CppCon2018/utf_utils.cpp +1276 -0
  70. package/deps/simdutf/benchmarks/competition/CppCon2018/utf_utils.h +595 -0
  71. package/deps/simdutf/benchmarks/competition/README.md +7 -0
  72. package/deps/simdutf/benchmarks/competition/hoehrmann/hoehrmann.h +91 -0
  73. package/deps/simdutf/benchmarks/competition/inoue2008/inoue_utf8_to_utf16.h +444 -0
  74. package/deps/simdutf/benchmarks/competition/inoue2008/inoue_utf8_to_utf16_tables.h +13183 -0
  75. package/deps/simdutf/benchmarks/competition/inoue2008/script.py +73 -0
  76. package/deps/simdutf/benchmarks/competition/llvm/ConvertUTF.cpp +738 -0
  77. package/deps/simdutf/benchmarks/competition/llvm/ConvertUTF.h +293 -0
  78. package/deps/simdutf/benchmarks/competition/u8u16/COPYRIGHT +8 -0
  79. package/deps/simdutf/benchmarks/competition/u8u16/Makefile +44 -0
  80. package/deps/simdutf/benchmarks/competition/u8u16/OSL3.0.txt +169 -0
  81. package/deps/simdutf/benchmarks/competition/u8u16/Profiling/BOM_Profiler.h +148 -0
  82. package/deps/simdutf/benchmarks/competition/u8u16/Profiling/i386_timer.h +45 -0
  83. package/deps/simdutf/benchmarks/competition/u8u16/Profiling/ppc_timer.c +34 -0
  84. package/deps/simdutf/benchmarks/competition/u8u16/README +56 -0
  85. package/deps/simdutf/benchmarks/competition/u8u16/config/config_defs.h +43 -0
  86. package/deps/simdutf/benchmarks/competition/u8u16/config/g4_config.h +27 -0
  87. package/deps/simdutf/benchmarks/competition/u8u16/config/mmx_config.h +16 -0
  88. package/deps/simdutf/benchmarks/competition/u8u16/config/p4_config.h +18 -0
  89. package/deps/simdutf/benchmarks/competition/u8u16/config/p4_ideal_config.h +16 -0
  90. package/deps/simdutf/benchmarks/competition/u8u16/config/spu_config.h +28 -0
  91. package/deps/simdutf/benchmarks/competition/u8u16/config/ssse3_config.h +20 -0
  92. package/deps/simdutf/benchmarks/competition/u8u16/iconv_u8u16.c +2 -0
  93. package/deps/simdutf/benchmarks/competition/u8u16/lib/altivec_simd.h +440 -0
  94. package/deps/simdutf/benchmarks/competition/u8u16/lib/libgen/make_basic_ops.py +121 -0
  95. package/deps/simdutf/benchmarks/competition/u8u16/lib/libgen/make_half_operand_versions.py +158 -0
  96. package/deps/simdutf/benchmarks/competition/u8u16/lib/libgen/make_test.py +270 -0
  97. package/deps/simdutf/benchmarks/competition/u8u16/lib/mmx_simd.h +141 -0
  98. package/deps/simdutf/benchmarks/competition/u8u16/lib/mmx_simd_basic.h +216 -0
  99. package/deps/simdutf/benchmarks/competition/u8u16/lib/mmx_simd_built_in.h +119 -0
  100. package/deps/simdutf/benchmarks/competition/u8u16/lib/mmx_simd_modified.h +2430 -0
  101. package/deps/simdutf/benchmarks/competition/u8u16/lib/outline.txt +39 -0
  102. package/deps/simdutf/benchmarks/competition/u8u16/lib/spu_simd.h +421 -0
  103. package/deps/simdutf/benchmarks/competition/u8u16/lib/sse_simd.h +836 -0
  104. package/deps/simdutf/benchmarks/competition/u8u16/lib/stdint.h +222 -0
  105. package/deps/simdutf/benchmarks/competition/u8u16/libu8u16_BE.c +4 -0
  106. package/deps/simdutf/benchmarks/competition/u8u16/libu8u16_LE.c +5 -0
  107. package/deps/simdutf/benchmarks/competition/u8u16/proto/u8u16.py +390 -0
  108. package/deps/simdutf/benchmarks/competition/u8u16/src/Makefile +18 -0
  109. package/deps/simdutf/benchmarks/competition/u8u16/src/bytelex.h +448 -0
  110. package/deps/simdutf/benchmarks/competition/u8u16/src/charsets/ASCII_EBCDIC.h +284 -0
  111. package/deps/simdutf/benchmarks/competition/u8u16/src/libu8u16.c +1975 -0
  112. package/deps/simdutf/benchmarks/competition/u8u16/src/libu8u16.pdf +0 -0
  113. package/deps/simdutf/benchmarks/competition/u8u16/src/libu8u16.w +2263 -0
  114. package/deps/simdutf/benchmarks/competition/u8u16/src/multiliteral.h +239 -0
  115. package/deps/simdutf/benchmarks/competition/u8u16/src/u8u16.c +232 -0
  116. package/deps/simdutf/benchmarks/competition/u8u16/src/x8x16.c +194 -0
  117. package/deps/simdutf/benchmarks/competition/u8u16/src/xml_error.c +193 -0
  118. package/deps/simdutf/benchmarks/competition/u8u16/src/xml_error.h +167 -0
  119. package/deps/simdutf/benchmarks/competition/u8u16/src/xmldecl.c +288 -0
  120. package/deps/simdutf/benchmarks/competition/u8u16/src/xmldecl.h +117 -0
  121. package/deps/simdutf/benchmarks/competition/u8u16/u8u16_g4.c +2 -0
  122. package/deps/simdutf/benchmarks/competition/u8u16/u8u16_mmx.c +2 -0
  123. package/deps/simdutf/benchmarks/competition/u8u16/u8u16_p4.c +3 -0
  124. package/deps/simdutf/benchmarks/competition/u8u16/u8u16_p4_ideal.c +2 -0
  125. package/deps/simdutf/benchmarks/competition/u8u16/u8u16_spu.c +2 -0
  126. package/deps/simdutf/benchmarks/competition/u8u16/u8u16_ssse3.c +3 -0
  127. package/deps/simdutf/benchmarks/competition/u8u16/x8x16_p4.c +2 -0
  128. package/deps/simdutf/benchmarks/competition/utf8lut/LICENSE +23 -0
  129. package/deps/simdutf/benchmarks/competition/utf8lut/data/test_minimal.txt +44 -0
  130. package/deps/simdutf/benchmarks/competition/utf8lut/readme.md +106 -0
  131. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_clang_corr_tests.cmd +11 -0
  132. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_clang_corr_tests.sh +13 -0
  133. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_corr_tests.sh +13 -0
  134. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_example.sh +13 -0
  135. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_file_conv.sh +14 -0
  136. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_iconv_lib.sh +11 -0
  137. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_iconv_sample.sh +8 -0
  138. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_corr_tests.cmd +12 -0
  139. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_example.cmd +13 -0
  140. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_file_conv.cmd +14 -0
  141. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_iconv_lib.cmd +11 -0
  142. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_iconv_sample.cmd +8 -0
  143. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_corr_tests.cmd +11 -0
  144. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_example.cmd +12 -0
  145. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_file_conv.cmd +13 -0
  146. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_iconv_lib.cmd +10 -0
  147. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_iconv_sample.cmd +9 -0
  148. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/html_table.py +25 -0
  149. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/measure.py +94 -0
  150. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/resize.py +20 -0
  151. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/wipe_all.cmd +2 -0
  152. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/wipe_interm.cmd +1 -0
  153. package/deps/simdutf/benchmarks/competition/utf8lut/src/base/CustomMemcpy.h +75 -0
  154. package/deps/simdutf/benchmarks/competition/utf8lut/src/base/PerfDefs.h +47 -0
  155. package/deps/simdutf/benchmarks/competition/utf8lut/src/base/Timing.cpp +17 -0
  156. package/deps/simdutf/benchmarks/competition/utf8lut/src/base/Timing.h +76 -0
  157. package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/AllProcessors.cpp +35 -0
  158. package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/BaseBufferProcessor.cpp +117 -0
  159. package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/BaseBufferProcessor.h +210 -0
  160. package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/BufferDecoder.h +158 -0
  161. package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/BufferEncoder.h +104 -0
  162. package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/ProcessorPlugins.h +334 -0
  163. package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/ProcessorSelector.h +186 -0
  164. package/deps/simdutf/benchmarks/competition/utf8lut/src/core/DecoderLut.cpp +140 -0
  165. package/deps/simdutf/benchmarks/competition/utf8lut/src/core/DecoderLut.h +42 -0
  166. package/deps/simdutf/benchmarks/competition/utf8lut/src/core/DecoderProcess.h +100 -0
  167. package/deps/simdutf/benchmarks/competition/utf8lut/src/core/Dfa.h +57 -0
  168. package/deps/simdutf/benchmarks/competition/utf8lut/src/core/EncoderLut.cpp +85 -0
  169. package/deps/simdutf/benchmarks/competition/utf8lut/src/core/EncoderLut.h +27 -0
  170. package/deps/simdutf/benchmarks/competition/utf8lut/src/core/EncoderProcess.h +126 -0
  171. package/deps/simdutf/benchmarks/competition/utf8lut/src/core/ProcessTrivial.h +108 -0
  172. package/deps/simdutf/benchmarks/competition/utf8lut/src/iconv/iconv.cpp +139 -0
  173. package/deps/simdutf/benchmarks/competition/utf8lut/src/iconv/iconv.h +74 -0
  174. package/deps/simdutf/benchmarks/competition/utf8lut/src/message/MessageConverter.cpp +65 -0
  175. package/deps/simdutf/benchmarks/competition/utf8lut/src/message/MessageConverter.h +91 -0
  176. package/deps/simdutf/benchmarks/competition/utf8lut/src/tests/CorrectnessTests.cpp +772 -0
  177. package/deps/simdutf/benchmarks/competition/utf8lut/src/tests/Example.cpp +12 -0
  178. package/deps/simdutf/benchmarks/competition/utf8lut/src/tests/FileConverter.cpp +486 -0
  179. package/deps/simdutf/benchmarks/competition/utf8lut/src/tests/iconv_sample.c +162 -0
  180. package/deps/simdutf/benchmarks/competition/utf8lut/src/utf8lut.h +15 -0
  181. package/deps/simdutf/benchmarks/competition/utf8sse4/fromutf8-sse.cpp +292 -0
  182. package/deps/simdutf/benchmarks/competition/utfcpp/LICENSE +23 -0
  183. package/deps/simdutf/benchmarks/competition/utfcpp/README.md +1503 -0
  184. package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/checked.h +335 -0
  185. package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/core.h +338 -0
  186. package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/cpp11.h +103 -0
  187. package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/cpp17.h +103 -0
  188. package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/unchecked.h +274 -0
  189. package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8.h +34 -0
  190. package/deps/simdutf/benchmarks/dataset/README.md +155 -0
  191. package/deps/simdutf/benchmarks/dataset/emoji.txt +204 -0
  192. package/deps/simdutf/benchmarks/dataset/scripts/utf8type.py +40 -0
  193. package/deps/simdutf/benchmarks/dataset/wikipedia_mars/Makefile +80 -0
  194. package/deps/simdutf/benchmarks/dataset/wikipedia_mars/convert_to_utf6.py +20 -0
  195. package/deps/simdutf/benchmarks/find/CMakeLists.txt +6 -0
  196. package/deps/simdutf/benchmarks/find/findbenchmark.cpp +63 -0
  197. package/deps/simdutf/benchmarks/find/findbenchmarker.h +46 -0
  198. package/deps/simdutf/benchmarks/shortbench.cpp +555 -0
  199. package/deps/simdutf/benchmarks/src/CMakeLists.txt +52 -0
  200. package/deps/simdutf/benchmarks/src/apple_arm_events.h +1104 -0
  201. package/deps/simdutf/benchmarks/src/benchmark.cpp +3899 -0
  202. package/deps/simdutf/benchmarks/src/benchmark.h +317 -0
  203. package/deps/simdutf/benchmarks/src/benchmark_base.cpp +144 -0
  204. package/deps/simdutf/benchmarks/src/benchmark_base.h +98 -0
  205. package/deps/simdutf/benchmarks/src/cmdline.cpp +176 -0
  206. package/deps/simdutf/benchmarks/src/cmdline.h +35 -0
  207. package/deps/simdutf/benchmarks/src/event_counter.h +162 -0
  208. package/deps/simdutf/benchmarks/src/linux-perf-events.h +104 -0
  209. package/deps/simdutf/benchmarks/stream.cpp +209 -0
  210. package/deps/simdutf/benchmarks/threaded.cpp +123 -0
  211. package/deps/simdutf/cmake/CPM.cmake +1363 -0
  212. package/deps/simdutf/cmake/JoinPaths.cmake +23 -0
  213. package/deps/simdutf/cmake/add_cpp_test.cmake +68 -0
  214. package/deps/simdutf/cmake/simdutf-config.cmake.in +2 -0
  215. package/deps/simdutf/cmake/simdutf-flags.cmake +26 -0
  216. package/deps/simdutf/cmake/toolchains-ci/riscv64-linux-gnu.cmake +4 -0
  217. package/deps/simdutf/cmake/toolchains-dev/README.md +32 -0
  218. package/deps/simdutf/cmake/toolchains-dev/aarch64.cmake +14 -0
  219. package/deps/simdutf/cmake/toolchains-dev/loongarch64.cmake +22 -0
  220. package/deps/simdutf/cmake/toolchains-dev/powerpc64.cmake +16 -0
  221. package/deps/simdutf/cmake/toolchains-dev/powerpc64le.cmake +16 -0
  222. package/deps/simdutf/cmake/toolchains-dev/riscv64.cmake +16 -0
  223. package/deps/simdutf/cmake/toolchains-dev/rvv-spike.cmake +38 -0
  224. package/deps/simdutf/doc/avx512.png +0 -0
  225. package/deps/simdutf/doc/logo.png +0 -0
  226. package/deps/simdutf/doc/logo.svg +165 -0
  227. package/deps/simdutf/doc/node2023.png +0 -0
  228. package/deps/simdutf/doc/shortinput.md +78 -0
  229. package/deps/simdutf/doc/utf16utf8.png +0 -0
  230. package/deps/simdutf/doc/utf8utf16.png +0 -0
  231. package/deps/simdutf/doc/widelogo.png +0 -0
  232. package/deps/simdutf/doxygen.py +50 -0
  233. package/deps/simdutf/fuzz/.clang-format +9 -0
  234. package/deps/simdutf/fuzz/CMakeLists.txt +45 -0
  235. package/deps/simdutf/fuzz/README.md +168 -0
  236. package/deps/simdutf/fuzz/atomic_base64.cpp +448 -0
  237. package/deps/simdutf/fuzz/base64.cpp +278 -0
  238. package/deps/simdutf/fuzz/build.sh +83 -0
  239. package/deps/simdutf/fuzz/conversion.cpp +669 -0
  240. package/deps/simdutf/fuzz/helpers/.clang-format-ignore +1 -0
  241. package/deps/simdutf/fuzz/helpers/common.h +135 -0
  242. package/deps/simdutf/fuzz/helpers/nameof.hpp +1258 -0
  243. package/deps/simdutf/fuzz/main.cpp +72 -0
  244. package/deps/simdutf/fuzz/minimize_and_cleanse.sh +87 -0
  245. package/deps/simdutf/fuzz/misc.cpp +216 -0
  246. package/deps/simdutf/fuzz/random_fuzz.sh +154 -0
  247. package/deps/simdutf/fuzz/roundtrip.cpp +588 -0
  248. package/deps/simdutf/fuzz/safe_conversion.cpp +104 -0
  249. package/deps/simdutf/include/simdutf/avx512.h +79 -0
  250. package/deps/simdutf/include/simdutf/base64_implementation.h +158 -0
  251. package/deps/simdutf/include/simdutf/base64_tables.h +887 -0
  252. package/deps/simdutf/include/simdutf/common_defs.h +186 -0
  253. package/deps/simdutf/include/simdutf/compiler_check.h +50 -0
  254. package/deps/simdutf/include/simdutf/constexpr_ptr.h +138 -0
  255. package/deps/simdutf/include/simdutf/encoding_types.h +189 -0
  256. package/deps/simdutf/include/simdutf/error.h +126 -0
  257. package/deps/simdutf/include/simdutf/implementation.h +7081 -0
  258. package/deps/simdutf/include/simdutf/internal/isadetection.h +325 -0
  259. package/deps/simdutf/include/simdutf/portability.h +285 -0
  260. package/deps/simdutf/include/simdutf/scalar/ascii.h +86 -0
  261. package/deps/simdutf/include/simdutf/scalar/atomic_util.h +105 -0
  262. package/deps/simdutf/include/simdutf/scalar/base64.h +911 -0
  263. package/deps/simdutf/include/simdutf/scalar/latin1.h +26 -0
  264. package/deps/simdutf/include/simdutf/scalar/latin1_to_utf16/latin1_to_utf16.h +52 -0
  265. package/deps/simdutf/include/simdutf/scalar/latin1_to_utf32/latin1_to_utf32.h +27 -0
  266. package/deps/simdutf/include/simdutf/scalar/latin1_to_utf8/latin1_to_utf8.h +191 -0
  267. package/deps/simdutf/include/simdutf/scalar/swap_bytes.h +35 -0
  268. package/deps/simdutf/include/simdutf/scalar/utf16.h +226 -0
  269. package/deps/simdutf/include/simdutf/scalar/utf16_to_latin1/utf16_to_latin1.h +108 -0
  270. package/deps/simdutf/include/simdutf/scalar/utf16_to_latin1/valid_utf16_to_latin1.h +40 -0
  271. package/deps/simdutf/include/simdutf/scalar/utf16_to_utf32/utf16_to_utf32.h +86 -0
  272. package/deps/simdutf/include/simdutf/scalar/utf16_to_utf32/valid_utf16_to_utf32.h +44 -0
  273. package/deps/simdutf/include/simdutf/scalar/utf16_to_utf8/utf16_to_utf8.h +295 -0
  274. package/deps/simdutf/include/simdutf/scalar/utf16_to_utf8/valid_utf16_to_utf8.h +91 -0
  275. package/deps/simdutf/include/simdutf/scalar/utf32.h +82 -0
  276. package/deps/simdutf/include/simdutf/scalar/utf32_to_latin1/utf32_to_latin1.h +68 -0
  277. package/deps/simdutf/include/simdutf/scalar/utf32_to_latin1/valid_utf32_to_latin1.h +67 -0
  278. package/deps/simdutf/include/simdutf/scalar/utf32_to_utf16/utf32_to_utf16.h +84 -0
  279. package/deps/simdutf/include/simdutf/scalar/utf32_to_utf16/valid_utf32_to_utf16.h +44 -0
  280. package/deps/simdutf/include/simdutf/scalar/utf32_to_utf8/utf32_to_utf8.h +142 -0
  281. package/deps/simdutf/include/simdutf/scalar/utf32_to_utf8/valid_utf32_to_utf8.h +72 -0
  282. package/deps/simdutf/include/simdutf/scalar/utf8.h +326 -0
  283. package/deps/simdutf/include/simdutf/scalar/utf8_to_latin1/utf8_to_latin1.h +225 -0
  284. package/deps/simdutf/include/simdutf/scalar/utf8_to_latin1/valid_utf8_to_latin1.h +87 -0
  285. package/deps/simdutf/include/simdutf/scalar/utf8_to_utf16/utf8_to_utf16.h +342 -0
  286. package/deps/simdutf/include/simdutf/scalar/utf8_to_utf16/valid_utf8_to_utf16.h +106 -0
  287. package/deps/simdutf/include/simdutf/scalar/utf8_to_utf32/utf8_to_utf32.h +299 -0
  288. package/deps/simdutf/include/simdutf/scalar/utf8_to_utf32/valid_utf8_to_utf32.h +83 -0
  289. package/deps/simdutf/include/simdutf/simdutf_version.h +26 -0
  290. package/deps/simdutf/include/simdutf.h +26 -0
  291. package/deps/simdutf/include/simdutf_c.h +342 -0
  292. package/deps/simdutf/riscv/Dockerfile +16 -0
  293. package/deps/simdutf/riscv/README.md +24 -0
  294. package/deps/simdutf/riscv/remove-docker-station +8 -0
  295. package/deps/simdutf/riscv/run-docker-station +31 -0
  296. package/deps/simdutf/scripts/.flake8 +2 -0
  297. package/deps/simdutf/scripts/Makefile +2 -0
  298. package/deps/simdutf/scripts/README_ADD_FUNCTION.md +49 -0
  299. package/deps/simdutf/scripts/add_function.py +330 -0
  300. package/deps/simdutf/scripts/amalgamation_tests.py +156 -0
  301. package/deps/simdutf/scripts/base64/Makefile +2 -0
  302. package/deps/simdutf/scripts/base64/README.md +2 -0
  303. package/deps/simdutf/scripts/base64/avx512.py +76 -0
  304. package/deps/simdutf/scripts/base64/neon_decode.py +143 -0
  305. package/deps/simdutf/scripts/base64/neon_generate_lut.py +101 -0
  306. package/deps/simdutf/scripts/base64/sse.py +252 -0
  307. package/deps/simdutf/scripts/base64/sseregular.py +160 -0
  308. package/deps/simdutf/scripts/base64/sseurl.py +283 -0
  309. package/deps/simdutf/scripts/base64/table.py +59 -0
  310. package/deps/simdutf/scripts/base64bench_print.py +145 -0
  311. package/deps/simdutf/scripts/benchmark-all.py +119 -0
  312. package/deps/simdutf/scripts/benchmark_print.py +324 -0
  313. package/deps/simdutf/scripts/check_feature_macros.py +156 -0
  314. package/deps/simdutf/scripts/check_typos.sh +13 -0
  315. package/deps/simdutf/scripts/clang_format.sh +35 -0
  316. package/deps/simdutf/scripts/clang_format_docker.sh +38 -0
  317. package/deps/simdutf/scripts/common.py +24 -0
  318. package/deps/simdutf/scripts/compilation_benchmark.py +55 -0
  319. package/deps/simdutf/scripts/compile_many_variations.sh +64 -0
  320. package/deps/simdutf/scripts/create_latex_table.py +62 -0
  321. package/deps/simdutf/scripts/docker/Dockerfile +14 -0
  322. package/deps/simdutf/scripts/docker/Makefile +9 -0
  323. package/deps/simdutf/scripts/docker/README.md +30 -0
  324. package/deps/simdutf/scripts/docker/llvm.gpg +0 -0
  325. package/deps/simdutf/scripts/ppc64_convert_utf16_to_utf8.py +155 -0
  326. package/deps/simdutf/scripts/prepare_doxygen.sh +21 -0
  327. package/deps/simdutf/scripts/release.py +197 -0
  328. package/deps/simdutf/scripts/shortinputplots.py +97 -0
  329. package/deps/simdutf/scripts/sse_convert_utf16_to_utf8.py +422 -0
  330. package/deps/simdutf/scripts/sse_convert_utf32_to_utf16.py +105 -0
  331. package/deps/simdutf/scripts/sse_utf8_utf16_decode.py +186 -0
  332. package/deps/simdutf/scripts/sse_validate_utf16le_proof.py +137 -0
  333. package/deps/simdutf/scripts/sse_validate_utf16le_testcases.py +129 -0
  334. package/deps/simdutf/scripts/table.py +207 -0
  335. package/deps/simdutf/scripts/tests/new.txt +33 -0
  336. package/deps/simdutf/scripts/tests/old.txt +33 -0
  337. package/deps/simdutf/scripts/tests/results.txt +272 -0
  338. package/deps/simdutf/simdutf.pc.in +11 -0
  339. package/deps/simdutf/singleheader/.flake8 +2 -0
  340. package/deps/simdutf/singleheader/CMakeLists.txt +64 -0
  341. package/deps/simdutf/singleheader/README-dev.md +81 -0
  342. package/deps/simdutf/singleheader/README.md +19 -0
  343. package/deps/simdutf/singleheader/amalgamate.py +513 -0
  344. package/deps/simdutf/singleheader/amalgamation_demo.c +59 -0
  345. package/deps/simdutf/singleheader/amalgamation_demo.cpp +54 -0
  346. package/deps/simdutf/singleheader/test-features.py +262 -0
  347. package/deps/simdutf/src/CMakeLists.txt +78 -0
  348. package/deps/simdutf/src/arm64/arm_base64.cpp +791 -0
  349. package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf16.cpp +24 -0
  350. package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf32.cpp +24 -0
  351. package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf8.cpp +70 -0
  352. package/deps/simdutf/src/arm64/arm_convert_utf16_to_latin1.cpp +61 -0
  353. package/deps/simdutf/src/arm64/arm_convert_utf16_to_utf32.cpp +185 -0
  354. package/deps/simdutf/src/arm64/arm_convert_utf16_to_utf8.cpp +780 -0
  355. package/deps/simdutf/src/arm64/arm_convert_utf32_to_latin1.cpp +60 -0
  356. package/deps/simdutf/src/arm64/arm_convert_utf32_to_utf16.cpp +208 -0
  357. package/deps/simdutf/src/arm64/arm_convert_utf32_to_utf8.cpp +505 -0
  358. package/deps/simdutf/src/arm64/arm_convert_utf8_to_latin1.cpp +69 -0
  359. package/deps/simdutf/src/arm64/arm_convert_utf8_to_utf16.cpp +313 -0
  360. package/deps/simdutf/src/arm64/arm_convert_utf8_to_utf32.cpp +179 -0
  361. package/deps/simdutf/src/arm64/arm_find.cpp +199 -0
  362. package/deps/simdutf/src/arm64/arm_utf16fix.cpp +185 -0
  363. package/deps/simdutf/src/arm64/arm_validate_utf16.cpp +165 -0
  364. package/deps/simdutf/src/arm64/arm_validate_utf32le.cpp +65 -0
  365. package/deps/simdutf/src/arm64/implementation.cpp +1442 -0
  366. package/deps/simdutf/src/encoding_types.cpp +67 -0
  367. package/deps/simdutf/src/error.cpp +3 -0
  368. package/deps/simdutf/src/fallback/implementation.cpp +589 -0
  369. package/deps/simdutf/src/generic/ascii_validation.h +50 -0
  370. package/deps/simdutf/src/generic/base64.h +233 -0
  371. package/deps/simdutf/src/generic/base64lengths.h +63 -0
  372. package/deps/simdutf/src/generic/buf_block_reader.h +109 -0
  373. package/deps/simdutf/src/generic/find.h +75 -0
  374. package/deps/simdutf/src/generic/utf16/change_endianness.h +24 -0
  375. package/deps/simdutf/src/generic/utf16/count_code_points_bytemask.h +58 -0
  376. package/deps/simdutf/src/generic/utf16/to_well_formed.h +93 -0
  377. package/deps/simdutf/src/generic/utf16/utf32_length_from_utf16.h +15 -0
  378. package/deps/simdutf/src/generic/utf16/utf8_length_from_utf16.h +35 -0
  379. package/deps/simdutf/src/generic/utf16/utf8_length_from_utf16_bytemask.h +199 -0
  380. package/deps/simdutf/src/generic/utf16.h +73 -0
  381. package/deps/simdutf/src/generic/utf32.h +136 -0
  382. package/deps/simdutf/src/generic/utf8/utf16_length_from_utf8_bytemask.h +53 -0
  383. package/deps/simdutf/src/generic/utf8.h +92 -0
  384. package/deps/simdutf/src/generic/utf8_to_latin1/utf8_to_latin1.h +316 -0
  385. package/deps/simdutf/src/generic/utf8_to_latin1/valid_utf8_to_latin1.h +78 -0
  386. package/deps/simdutf/src/generic/utf8_to_utf16/utf8_to_utf16.h +332 -0
  387. package/deps/simdutf/src/generic/utf8_to_utf16/valid_utf8_to_utf16.h +74 -0
  388. package/deps/simdutf/src/generic/utf8_to_utf32/utf8_to_utf32.h +318 -0
  389. package/deps/simdutf/src/generic/utf8_to_utf32/valid_utf8_to_utf32.h +42 -0
  390. package/deps/simdutf/src/generic/utf8_validation/utf8_lookup4_algorithm.h +223 -0
  391. package/deps/simdutf/src/generic/utf8_validation/utf8_validator.h +84 -0
  392. package/deps/simdutf/src/generic/validate_utf16.h +164 -0
  393. package/deps/simdutf/src/generic/validate_utf32.h +99 -0
  394. package/deps/simdutf/src/haswell/avx2_base64.cpp +837 -0
  395. package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf16.cpp +28 -0
  396. package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf32.cpp +20 -0
  397. package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf8.cpp +83 -0
  398. package/deps/simdutf/src/haswell/avx2_convert_utf16_to_latin1.cpp +83 -0
  399. package/deps/simdutf/src/haswell/avx2_convert_utf16_to_utf32.cpp +210 -0
  400. package/deps/simdutf/src/haswell/avx2_convert_utf16_to_utf8.cpp +602 -0
  401. package/deps/simdutf/src/haswell/avx2_convert_utf32_to_latin1.cpp +116 -0
  402. package/deps/simdutf/src/haswell/avx2_convert_utf32_to_utf16.cpp +164 -0
  403. package/deps/simdutf/src/haswell/avx2_convert_utf32_to_utf8.cpp +569 -0
  404. package/deps/simdutf/src/haswell/avx2_convert_utf8_to_latin1.cpp +60 -0
  405. package/deps/simdutf/src/haswell/avx2_convert_utf8_to_utf16.cpp +195 -0
  406. package/deps/simdutf/src/haswell/avx2_convert_utf8_to_utf32.cpp +135 -0
  407. package/deps/simdutf/src/haswell/avx2_utf16fix.cpp +173 -0
  408. package/deps/simdutf/src/haswell/avx2_validate_utf16.cpp +17 -0
  409. package/deps/simdutf/src/haswell/implementation.cpp +1447 -0
  410. package/deps/simdutf/src/icelake/icelake_ascii_validation.inl.cpp +19 -0
  411. package/deps/simdutf/src/icelake/icelake_base64.inl.cpp +630 -0
  412. package/deps/simdutf/src/icelake/icelake_common.inl.cpp +37 -0
  413. package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf16.inl.cpp +36 -0
  414. package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf32.inl.cpp +23 -0
  415. package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf8.inl.cpp +107 -0
  416. package/deps/simdutf/src/icelake/icelake_convert_utf16_to_latin1.inl.cpp +103 -0
  417. package/deps/simdutf/src/icelake/icelake_convert_utf16_to_utf32.inl.cpp +136 -0
  418. package/deps/simdutf/src/icelake/icelake_convert_utf16_to_utf8.inl.cpp +206 -0
  419. package/deps/simdutf/src/icelake/icelake_convert_utf32_to_latin1.inl.cpp +74 -0
  420. package/deps/simdutf/src/icelake/icelake_convert_utf32_to_utf16.inl.cpp +338 -0
  421. package/deps/simdutf/src/icelake/icelake_convert_utf32_to_utf8.inl.cpp +574 -0
  422. package/deps/simdutf/src/icelake/icelake_convert_utf8_to_latin1.inl.cpp +104 -0
  423. package/deps/simdutf/src/icelake/icelake_convert_utf8_to_utf16.inl.cpp +75 -0
  424. package/deps/simdutf/src/icelake/icelake_convert_valid_utf8_to_latin1.inl.cpp +69 -0
  425. package/deps/simdutf/src/icelake/icelake_find.inl.cpp +146 -0
  426. package/deps/simdutf/src/icelake/icelake_from_utf8.inl.cpp +266 -0
  427. package/deps/simdutf/src/icelake/icelake_from_valid_utf8.inl.cpp +136 -0
  428. package/deps/simdutf/src/icelake/icelake_macros.inl.cpp +143 -0
  429. package/deps/simdutf/src/icelake/icelake_utf16fix.cpp +138 -0
  430. package/deps/simdutf/src/icelake/icelake_utf32_validation.inl.cpp +63 -0
  431. package/deps/simdutf/src/icelake/icelake_utf8_common.inl.cpp +753 -0
  432. package/deps/simdutf/src/icelake/icelake_utf8_length_from_utf16.inl.cpp +269 -0
  433. package/deps/simdutf/src/icelake/icelake_utf8_validation.inl.cpp +116 -0
  434. package/deps/simdutf/src/icelake/implementation.cpp +1903 -0
  435. package/deps/simdutf/src/implementation.cpp +2526 -0
  436. package/deps/simdutf/src/lasx/implementation.cpp +1531 -0
  437. package/deps/simdutf/src/lasx/lasx_base64.cpp +695 -0
  438. package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf16.cpp +76 -0
  439. package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf32.cpp +55 -0
  440. package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf8.cpp +65 -0
  441. package/deps/simdutf/src/lasx/lasx_convert_utf16_to_latin1.cpp +64 -0
  442. package/deps/simdutf/src/lasx/lasx_convert_utf16_to_utf32.cpp +183 -0
  443. package/deps/simdutf/src/lasx/lasx_convert_utf16_to_utf8.cpp +550 -0
  444. package/deps/simdutf/src/lasx/lasx_convert_utf32_to_latin1.cpp +73 -0
  445. package/deps/simdutf/src/lasx/lasx_convert_utf32_to_utf16.cpp +218 -0
  446. package/deps/simdutf/src/lasx/lasx_convert_utf32_to_utf8.cpp +589 -0
  447. package/deps/simdutf/src/lasx/lasx_convert_utf8_to_latin1.cpp +72 -0
  448. package/deps/simdutf/src/lasx/lasx_convert_utf8_to_utf16.cpp +296 -0
  449. package/deps/simdutf/src/lasx/lasx_convert_utf8_to_utf32.cpp +190 -0
  450. package/deps/simdutf/src/lasx/lasx_find.cpp +64 -0
  451. package/deps/simdutf/src/lasx/lasx_validate_utf16.cpp +13 -0
  452. package/deps/simdutf/src/lasx/lasx_validate_utf32le.cpp +84 -0
  453. package/deps/simdutf/src/lsx/implementation.cpp +1417 -0
  454. package/deps/simdutf/src/lsx/lsx_base64.cpp +675 -0
  455. package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf16.cpp +39 -0
  456. package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf32.cpp +27 -0
  457. package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf8.cpp +56 -0
  458. package/deps/simdutf/src/lsx/lsx_convert_utf16_to_latin1.cpp +64 -0
  459. package/deps/simdutf/src/lsx/lsx_convert_utf16_to_utf32.cpp +133 -0
  460. package/deps/simdutf/src/lsx/lsx_convert_utf16_to_utf8.cpp +518 -0
  461. package/deps/simdutf/src/lsx/lsx_convert_utf32_to_latin1.cpp +66 -0
  462. package/deps/simdutf/src/lsx/lsx_convert_utf32_to_utf16.cpp +155 -0
  463. package/deps/simdutf/src/lsx/lsx_convert_utf32_to_utf8.cpp +459 -0
  464. package/deps/simdutf/src/lsx/lsx_convert_utf8_to_latin1.cpp +75 -0
  465. package/deps/simdutf/src/lsx/lsx_convert_utf8_to_utf16.cpp +291 -0
  466. package/deps/simdutf/src/lsx/lsx_convert_utf8_to_utf32.cpp +179 -0
  467. package/deps/simdutf/src/lsx/lsx_find.cpp +60 -0
  468. package/deps/simdutf/src/lsx/lsx_validate_utf16.cpp +13 -0
  469. package/deps/simdutf/src/lsx/lsx_validate_utf32le.cpp +68 -0
  470. package/deps/simdutf/src/ppc64/implementation.cpp +992 -0
  471. package/deps/simdutf/src/ppc64/ppc64_base64.cpp +480 -0
  472. package/deps/simdutf/src/ppc64/ppc64_base64_internal_tests.cpp +401 -0
  473. package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf16.cpp +12 -0
  474. package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf32.cpp +12 -0
  475. package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf8.cpp +149 -0
  476. package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_latin1.cpp +67 -0
  477. package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_utf32.cpp +87 -0
  478. package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_utf8.cpp +296 -0
  479. package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_latin1.cpp +57 -0
  480. package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_utf16.cpp +117 -0
  481. package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_utf8.cpp +166 -0
  482. package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_latin1.cpp +69 -0
  483. package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_utf16.cpp +211 -0
  484. package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_utf32.cpp +153 -0
  485. package/deps/simdutf/src/ppc64/ppc64_utf16_to_utf8_tables.h +1011 -0
  486. package/deps/simdutf/src/ppc64/ppc64_utf8_length_from_latin1.cpp +37 -0
  487. package/deps/simdutf/src/ppc64/ppc64_validate_utf16.cpp +19 -0
  488. package/deps/simdutf/src/ppc64/templates.cpp +91 -0
  489. package/deps/simdutf/src/rvv/implementation.cpp +138 -0
  490. package/deps/simdutf/src/rvv/rvv_find.cpp +27 -0
  491. package/deps/simdutf/src/rvv/rvv_helpers.inl.cpp +23 -0
  492. package/deps/simdutf/src/rvv/rvv_latin1_to.inl.cpp +71 -0
  493. package/deps/simdutf/src/rvv/rvv_length_from.inl.cpp +164 -0
  494. package/deps/simdutf/src/rvv/rvv_utf16_to.inl.cpp +399 -0
  495. package/deps/simdutf/src/rvv/rvv_utf16fix.cpp +110 -0
  496. package/deps/simdutf/src/rvv/rvv_utf32_to.inl.cpp +307 -0
  497. package/deps/simdutf/src/rvv/rvv_utf8_to.inl.cpp +435 -0
  498. package/deps/simdutf/src/rvv/rvv_validate.inl.cpp +275 -0
  499. package/deps/simdutf/src/simdutf/arm64/begin.h +2 -0
  500. package/deps/simdutf/src/simdutf/arm64/bitmanipulation.h +34 -0
  501. package/deps/simdutf/src/simdutf/arm64/end.h +2 -0
  502. package/deps/simdutf/src/simdutf/arm64/implementation.h +307 -0
  503. package/deps/simdutf/src/simdutf/arm64/intrinsics.h +10 -0
  504. package/deps/simdutf/src/simdutf/arm64/simd.h +547 -0
  505. package/deps/simdutf/src/simdutf/arm64/simd16-inl.h +403 -0
  506. package/deps/simdutf/src/simdutf/arm64/simd32-inl.h +129 -0
  507. package/deps/simdutf/src/simdutf/arm64/simd64-inl.h +28 -0
  508. package/deps/simdutf/src/simdutf/arm64.h +43 -0
  509. package/deps/simdutf/src/simdutf/fallback/begin.h +1 -0
  510. package/deps/simdutf/src/simdutf/fallback/bitmanipulation.h +13 -0
  511. package/deps/simdutf/src/simdutf/fallback/end.h +1 -0
  512. package/deps/simdutf/src/simdutf/fallback/implementation.h +331 -0
  513. package/deps/simdutf/src/simdutf/fallback.h +42 -0
  514. package/deps/simdutf/src/simdutf/haswell/begin.h +15 -0
  515. package/deps/simdutf/src/simdutf/haswell/bitmanipulation.h +35 -0
  516. package/deps/simdutf/src/simdutf/haswell/end.h +13 -0
  517. package/deps/simdutf/src/simdutf/haswell/implementation.h +338 -0
  518. package/deps/simdutf/src/simdutf/haswell/intrinsics.h +67 -0
  519. package/deps/simdutf/src/simdutf/haswell/simd.h +363 -0
  520. package/deps/simdutf/src/simdutf/haswell/simd16-inl.h +261 -0
  521. package/deps/simdutf/src/simdutf/haswell/simd32-inl.h +111 -0
  522. package/deps/simdutf/src/simdutf/haswell/simd64-inl.h +34 -0
  523. package/deps/simdutf/src/simdutf/haswell.h +63 -0
  524. package/deps/simdutf/src/simdutf/icelake/begin.h +14 -0
  525. package/deps/simdutf/src/simdutf/icelake/bitmanipulation.h +44 -0
  526. package/deps/simdutf/src/simdutf/icelake/end.h +12 -0
  527. package/deps/simdutf/src/simdutf/icelake/implementation.h +346 -0
  528. package/deps/simdutf/src/simdutf/icelake/intrinsics.h +138 -0
  529. package/deps/simdutf/src/simdutf/icelake/simd.h +17 -0
  530. package/deps/simdutf/src/simdutf/icelake/simd16-inl.h +90 -0
  531. package/deps/simdutf/src/simdutf/icelake/simd32-inl.h +47 -0
  532. package/deps/simdutf/src/simdutf/icelake.h +81 -0
  533. package/deps/simdutf/src/simdutf/lasx/begin.h +8 -0
  534. package/deps/simdutf/src/simdutf/lasx/bitmanipulation.h +25 -0
  535. package/deps/simdutf/src/simdutf/lasx/end.h +8 -0
  536. package/deps/simdutf/src/simdutf/lasx/implementation.h +310 -0
  537. package/deps/simdutf/src/simdutf/lasx/intrinsics.h +319 -0
  538. package/deps/simdutf/src/simdutf/lasx/simd.h +551 -0
  539. package/deps/simdutf/src/simdutf/lasx/simd16-inl.h +234 -0
  540. package/deps/simdutf/src/simdutf/lasx/simd32-inl.h +74 -0
  541. package/deps/simdutf/src/simdutf/lasx/simd64-inl.h +52 -0
  542. package/deps/simdutf/src/simdutf/lasx.h +49 -0
  543. package/deps/simdutf/src/simdutf/lsx/begin.h +2 -0
  544. package/deps/simdutf/src/simdutf/lsx/bitmanipulation.h +25 -0
  545. package/deps/simdutf/src/simdutf/lsx/end.h +2 -0
  546. package/deps/simdutf/src/simdutf/lsx/implementation.h +309 -0
  547. package/deps/simdutf/src/simdutf/lsx/intrinsics.h +196 -0
  548. package/deps/simdutf/src/simdutf/lsx/simd.h +421 -0
  549. package/deps/simdutf/src/simdutf/lsx/simd16-inl.h +242 -0
  550. package/deps/simdutf/src/simdutf/lsx/simd32-inl.h +69 -0
  551. package/deps/simdutf/src/simdutf/lsx/simd64-inl.h +50 -0
  552. package/deps/simdutf/src/simdutf/lsx.h +52 -0
  553. package/deps/simdutf/src/simdutf/ppc64/begin.h +1 -0
  554. package/deps/simdutf/src/simdutf/ppc64/bitmanipulation.h +29 -0
  555. package/deps/simdutf/src/simdutf/ppc64/end.h +1 -0
  556. package/deps/simdutf/src/simdutf/ppc64/implementation.h +348 -0
  557. package/deps/simdutf/src/simdutf/ppc64/intrinsics.h +19 -0
  558. package/deps/simdutf/src/simdutf/ppc64/simd.h +177 -0
  559. package/deps/simdutf/src/simdutf/ppc64/simd16-inl.h +327 -0
  560. package/deps/simdutf/src/simdutf/ppc64/simd32-inl.h +247 -0
  561. package/deps/simdutf/src/simdutf/ppc64/simd8-inl.h +618 -0
  562. package/deps/simdutf/src/simdutf/ppc64.h +40 -0
  563. package/deps/simdutf/src/simdutf/rvv/begin.h +7 -0
  564. package/deps/simdutf/src/simdutf/rvv/end.h +7 -0
  565. package/deps/simdutf/src/simdutf/rvv/implementation.h +321 -0
  566. package/deps/simdutf/src/simdutf/rvv/intrinsics.h +131 -0
  567. package/deps/simdutf/src/simdutf/rvv.h +41 -0
  568. package/deps/simdutf/src/simdutf/westmere/begin.h +8 -0
  569. package/deps/simdutf/src/simdutf/westmere/bitmanipulation.h +37 -0
  570. package/deps/simdutf/src/simdutf/westmere/end.h +8 -0
  571. package/deps/simdutf/src/simdutf/westmere/implementation.h +338 -0
  572. package/deps/simdutf/src/simdutf/westmere/intrinsics.h +38 -0
  573. package/deps/simdutf/src/simdutf/westmere/simd.h +379 -0
  574. package/deps/simdutf/src/simdutf/westmere/simd16-inl.h +242 -0
  575. package/deps/simdutf/src/simdutf/westmere/simd32-inl.h +151 -0
  576. package/deps/simdutf/src/simdutf/westmere/simd64-inl.h +33 -0
  577. package/deps/simdutf/src/simdutf/westmere.h +59 -0
  578. package/deps/simdutf/src/simdutf.cpp +152 -0
  579. package/deps/simdutf/src/simdutf_c.cpp +525 -0
  580. package/deps/simdutf/src/tables/utf16_to_utf8_tables.h +768 -0
  581. package/deps/simdutf/src/tables/utf32_to_utf16_tables.h +53 -0
  582. package/deps/simdutf/src/tables/utf8_to_utf16_tables.h +826 -0
  583. package/deps/simdutf/src/westmere/implementation.cpp +1479 -0
  584. package/deps/simdutf/src/westmere/internal/loader.cpp +7 -0
  585. package/deps/simdutf/src/westmere/internal/write_v_u16_11bits_to_utf8.cpp +66 -0
  586. package/deps/simdutf/src/westmere/sse_base64.cpp +672 -0
  587. package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf16.cpp +21 -0
  588. package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf32.cpp +31 -0
  589. package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf8.cpp +71 -0
  590. package/deps/simdutf/src/westmere/sse_convert_utf16_to_latin1.cpp +70 -0
  591. package/deps/simdutf/src/westmere/sse_convert_utf16_to_utf32.cpp +206 -0
  592. package/deps/simdutf/src/westmere/sse_convert_utf16_to_utf8.cpp +504 -0
  593. package/deps/simdutf/src/westmere/sse_convert_utf32_to_latin1.cpp +82 -0
  594. package/deps/simdutf/src/westmere/sse_convert_utf32_to_utf16.cpp +209 -0
  595. package/deps/simdutf/src/westmere/sse_convert_utf32_to_utf8.cpp +589 -0
  596. package/deps/simdutf/src/westmere/sse_convert_utf8_to_latin1.cpp +58 -0
  597. package/deps/simdutf/src/westmere/sse_convert_utf8_to_utf16.cpp +197 -0
  598. package/deps/simdutf/src/westmere/sse_convert_utf8_to_utf32.cpp +141 -0
  599. package/deps/simdutf/src/westmere/sse_utf16fix.cpp +82 -0
  600. package/deps/simdutf/src/westmere/sse_validate_utf16.cpp +17 -0
  601. package/deps/simdutf/tests/CMakeLists.txt +483 -0
  602. package/deps/simdutf/tests/atomic_base64_tests.cpp +2845 -0
  603. package/deps/simdutf/tests/base64_tests.cpp +3617 -0
  604. package/deps/simdutf/tests/basic_fuzzer.cpp +805 -0
  605. package/deps/simdutf/tests/bele_tests.cpp +182 -0
  606. package/deps/simdutf/tests/constexpr_base64_tests.cpp +387 -0
  607. package/deps/simdutf/tests/convert_latin1_to_utf16be_tests.cpp +52 -0
  608. package/deps/simdutf/tests/convert_latin1_to_utf16le_tests.cpp +80 -0
  609. package/deps/simdutf/tests/convert_latin1_to_utf32_tests.cpp +66 -0
  610. package/deps/simdutf/tests/convert_latin1_to_utf8_tests.cpp +120 -0
  611. package/deps/simdutf/tests/convert_utf16_to_utf8_safe_tests.cpp +203 -0
  612. package/deps/simdutf/tests/convert_utf16_to_utf8_with_replacement_tests.cpp +276 -0
  613. package/deps/simdutf/tests/convert_utf16be_to_latin1_tests.cpp +109 -0
  614. package/deps/simdutf/tests/convert_utf16be_to_latin1_tests_with_errors.cpp +136 -0
  615. package/deps/simdutf/tests/convert_utf16be_to_utf32_tests.cpp +193 -0
  616. package/deps/simdutf/tests/convert_utf16be_to_utf32_with_errors_tests.cpp +381 -0
  617. package/deps/simdutf/tests/convert_utf16be_to_utf8_tests.cpp +259 -0
  618. package/deps/simdutf/tests/convert_utf16be_to_utf8_with_errors_tests.cpp +266 -0
  619. package/deps/simdutf/tests/convert_utf16le_to_latin1_tests.cpp +148 -0
  620. package/deps/simdutf/tests/convert_utf16le_to_latin1_tests_with_errors.cpp +176 -0
  621. package/deps/simdutf/tests/convert_utf16le_to_utf32_tests.cpp +213 -0
  622. package/deps/simdutf/tests/convert_utf16le_to_utf32_with_errors_tests.cpp +318 -0
  623. package/deps/simdutf/tests/convert_utf16le_to_utf8_tests.cpp +343 -0
  624. package/deps/simdutf/tests/convert_utf16le_to_utf8_with_errors_tests.cpp +271 -0
  625. package/deps/simdutf/tests/convert_utf32_to_latin1_tests.cpp +111 -0
  626. package/deps/simdutf/tests/convert_utf32_to_latin1_with_errors_tests.cpp +96 -0
  627. package/deps/simdutf/tests/convert_utf32_to_utf16be_tests.cpp +148 -0
  628. package/deps/simdutf/tests/convert_utf32_to_utf16be_with_errors_tests.cpp +192 -0
  629. package/deps/simdutf/tests/convert_utf32_to_utf16le_tests.cpp +166 -0
  630. package/deps/simdutf/tests/convert_utf32_to_utf16le_with_errors_tests.cpp +215 -0
  631. package/deps/simdutf/tests/convert_utf32_to_utf8_tests.cpp +181 -0
  632. package/deps/simdutf/tests/convert_utf32_to_utf8_with_errors_tests.cpp +261 -0
  633. package/deps/simdutf/tests/convert_utf8_to_latin1_tests.cpp +516 -0
  634. package/deps/simdutf/tests/convert_utf8_to_latin1_with_errors_tests.cpp +579 -0
  635. package/deps/simdutf/tests/convert_utf8_to_utf16be_tests.cpp +412 -0
  636. package/deps/simdutf/tests/convert_utf8_to_utf16be_with_errors_tests.cpp +480 -0
  637. package/deps/simdutf/tests/convert_utf8_to_utf16le_tests.cpp +671 -0
  638. package/deps/simdutf/tests/convert_utf8_to_utf16le_with_errors_tests.cpp +455 -0
  639. package/deps/simdutf/tests/convert_utf8_to_utf32_tests.cpp +1204 -0
  640. package/deps/simdutf/tests/convert_utf8_to_utf32_with_errors_tests.cpp +337 -0
  641. package/deps/simdutf/tests/convert_valid_utf16be_to_latin1_tests.cpp +37 -0
  642. package/deps/simdutf/tests/convert_valid_utf16be_to_utf32_tests.cpp +97 -0
  643. package/deps/simdutf/tests/convert_valid_utf16be_to_utf8_tests.cpp +126 -0
  644. package/deps/simdutf/tests/convert_valid_utf16le_to_latin1_tests.cpp +71 -0
  645. package/deps/simdutf/tests/convert_valid_utf16le_to_utf32_tests.cpp +122 -0
  646. package/deps/simdutf/tests/convert_valid_utf16le_to_utf8_tests.cpp +244 -0
  647. package/deps/simdutf/tests/convert_valid_utf32_to_latin1_tests.cpp +49 -0
  648. package/deps/simdutf/tests/convert_valid_utf32_to_utf16be_tests.cpp +92 -0
  649. package/deps/simdutf/tests/convert_valid_utf32_to_utf16le_tests.cpp +114 -0
  650. package/deps/simdutf/tests/convert_valid_utf32_to_utf8_tests.cpp +109 -0
  651. package/deps/simdutf/tests/convert_valid_utf8_to_latin1_tests.cpp +84 -0
  652. package/deps/simdutf/tests/convert_valid_utf8_to_utf16be_tests.cpp +124 -0
  653. package/deps/simdutf/tests/convert_valid_utf8_to_utf16le_tests.cpp +221 -0
  654. package/deps/simdutf/tests/convert_valid_utf8_to_utf32_tests.cpp +155 -0
  655. package/deps/simdutf/tests/count_utf16be.cpp +64 -0
  656. package/deps/simdutf/tests/count_utf16le.cpp +61 -0
  657. package/deps/simdutf/tests/count_utf8.cpp +87 -0
  658. package/deps/simdutf/tests/detect_encodings_tests.cpp +312 -0
  659. package/deps/simdutf/tests/embed/valid_utf8.txt +1 -0
  660. package/deps/simdutf/tests/embed_tests.cpp +22 -0
  661. package/deps/simdutf/tests/find_tests.cpp +77 -0
  662. package/deps/simdutf/tests/fixed_string_tests.cpp +153 -0
  663. package/deps/simdutf/tests/helpers/CMakeLists.txt +25 -0
  664. package/deps/simdutf/tests/helpers/compiletime_conversions.h +222 -0
  665. package/deps/simdutf/tests/helpers/fixed_string.h +267 -0
  666. package/deps/simdutf/tests/helpers/random_int.cpp +30 -0
  667. package/deps/simdutf/tests/helpers/random_int.h +39 -0
  668. package/deps/simdutf/tests/helpers/random_utf16.cpp +123 -0
  669. package/deps/simdutf/tests/helpers/random_utf16.h +52 -0
  670. package/deps/simdutf/tests/helpers/random_utf32.cpp +41 -0
  671. package/deps/simdutf/tests/helpers/random_utf32.h +40 -0
  672. package/deps/simdutf/tests/helpers/random_utf8.cpp +93 -0
  673. package/deps/simdutf/tests/helpers/random_utf8.h +36 -0
  674. package/deps/simdutf/tests/helpers/test.cpp +231 -0
  675. package/deps/simdutf/tests/helpers/test.h +193 -0
  676. package/deps/simdutf/tests/helpers/transcode_test_base.cpp +1257 -0
  677. package/deps/simdutf/tests/helpers/transcode_test_base.h +683 -0
  678. package/deps/simdutf/tests/helpers/utf16.h +27 -0
  679. package/deps/simdutf/tests/installation_tests/find/CMakeLists.txt +43 -0
  680. package/deps/simdutf/tests/installation_tests/from_fetch/CMakeLists.txt +47 -0
  681. package/deps/simdutf/tests/internal_tests.cpp +27 -0
  682. package/deps/simdutf/tests/null_safety_tests.cpp +94 -0
  683. package/deps/simdutf/tests/random_fuzzer.cpp +779 -0
  684. package/deps/simdutf/tests/readme_tests.cpp +274 -0
  685. package/deps/simdutf/tests/reference/CMakeLists.txt +23 -0
  686. package/deps/simdutf/tests/reference/decode_utf16.h +81 -0
  687. package/deps/simdutf/tests/reference/decode_utf32.h +47 -0
  688. package/deps/simdutf/tests/reference/encode_latin1.cpp +1 -0
  689. package/deps/simdutf/tests/reference/encode_latin1.h +32 -0
  690. package/deps/simdutf/tests/reference/encode_utf16.cpp +49 -0
  691. package/deps/simdutf/tests/reference/encode_utf16.h +20 -0
  692. package/deps/simdutf/tests/reference/encode_utf32.cpp +1 -0
  693. package/deps/simdutf/tests/reference/encode_utf32.h +36 -0
  694. package/deps/simdutf/tests/reference/encode_utf8.cpp +1 -0
  695. package/deps/simdutf/tests/reference/encode_utf8.h +40 -0
  696. package/deps/simdutf/tests/reference/validate_utf16.cpp +60 -0
  697. package/deps/simdutf/tests/reference/validate_utf16.h +14 -0
  698. package/deps/simdutf/tests/reference/validate_utf16_to_latin1.cpp +35 -0
  699. package/deps/simdutf/tests/reference/validate_utf16_to_latin1.h +13 -0
  700. package/deps/simdutf/tests/reference/validate_utf32.cpp +27 -0
  701. package/deps/simdutf/tests/reference/validate_utf32.h +12 -0
  702. package/deps/simdutf/tests/reference/validate_utf32_to_latin1.cpp +27 -0
  703. package/deps/simdutf/tests/reference/validate_utf32_to_latin1.h +12 -0
  704. package/deps/simdutf/tests/reference/validate_utf8.cpp +82 -0
  705. package/deps/simdutf/tests/reference/validate_utf8.h +11 -0
  706. package/deps/simdutf/tests/reference/validate_utf8_to_latin1.cpp +43 -0
  707. package/deps/simdutf/tests/reference/validate_utf8_to_latin1.h +12 -0
  708. package/deps/simdutf/tests/select_implementation.cpp +43 -0
  709. package/deps/simdutf/tests/simdutf_c_tests.cpp +244 -0
  710. package/deps/simdutf/tests/span_tests.cpp +401 -0
  711. package/deps/simdutf/tests/special_tests.cpp +559 -0
  712. package/deps/simdutf/tests/straight_c_test.c +187 -0
  713. package/deps/simdutf/tests/text_encoding_tests.cpp +77 -0
  714. package/deps/simdutf/tests/to_well_formed_utf16_tests.cpp +377 -0
  715. package/deps/simdutf/tests/utf8_length_from_utf16_tests.cpp +202 -0
  716. package/deps/simdutf/tests/validate_ascii_basic_tests.cpp +165 -0
  717. package/deps/simdutf/tests/validate_ascii_with_errors_tests.cpp +77 -0
  718. package/deps/simdutf/tests/validate_utf16be_basic_tests.cpp +175 -0
  719. package/deps/simdutf/tests/validate_utf16be_with_errors_tests.cpp +188 -0
  720. package/deps/simdutf/tests/validate_utf16le_basic_tests.cpp +268 -0
  721. package/deps/simdutf/tests/validate_utf16le_with_errors_tests.cpp +274 -0
  722. package/deps/simdutf/tests/validate_utf32_basic_tests.cpp +92 -0
  723. package/deps/simdutf/tests/validate_utf32_with_errors_tests.cpp +114 -0
  724. package/deps/simdutf/tests/validate_utf8_basic_tests.cpp +178 -0
  725. package/deps/simdutf/tests/validate_utf8_brute_force_tests.cpp +88 -0
  726. package/deps/simdutf/tests/validate_utf8_puzzler_tests.cpp +33 -0
  727. package/deps/simdutf/tests/validate_utf8_with_errors_tests.cpp +228 -0
  728. package/deps/simdutf/tools/CMakeLists.txt +85 -0
  729. package/deps/simdutf/tools/fastbase64.cpp +250 -0
  730. package/deps/simdutf/tools/sutf.cpp +556 -0
  731. package/deps/simdutf/tools/sutf.h +40 -0
  732. package/package.json +2 -2
@@ -0,0 +1,1531 @@
1
+ #include "simdutf/lasx/begin.h"
2
+ namespace simdutf {
3
+ namespace SIMDUTF_IMPLEMENTATION {
4
+ namespace {
5
+ #ifndef SIMDUTF_LASX_H
6
+ #error "lasx.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 lasx_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
+ simdutf_really_inline __m256i lasx_swap_bytes(__m256i vec) {
39
+ return __lasx_xvshuf4i_b(vec, 0b10110001);
40
+ }
41
+ #endif // SIMDUTF_FEATURE_UTF16 || SIMDUTF_FEATURE_UTF32
42
+
43
+ #if SIMDUTF_FEATURE_ASCII || SIMDUTF_FEATURE_DETECT_ENCODING || \
44
+ SIMDUTF_FEATURE_UTF8
45
+ simdutf_really_inline bool is_ascii(const simd8x64<uint8_t> &input) {
46
+ return input.is_ascii();
47
+ }
48
+ #endif // SIMDUTF_FEATURE_ASCII || SIMDUTF_FEATURE_DETECT_ENCODING ||
49
+ // SIMDUTF_FEATURE_UTF8
50
+
51
+ #if SIMDUTF_FEATURE_UTF8 || SIMDUTF_FEATURE_DETECT_ENCODING
52
+ simdutf_really_inline simd8<bool>
53
+ must_be_2_3_continuation(const simd8<uint8_t> prev2,
54
+ const simd8<uint8_t> prev3) {
55
+ simd8<bool> is_third_byte = prev2 >= uint8_t(0b11100000u);
56
+ simd8<bool> is_fourth_byte = prev3 >= uint8_t(0b11110000u);
57
+ return is_third_byte ^ is_fourth_byte;
58
+ }
59
+ #endif // SIMDUTF_FEATURE_UTF8 || SIMDUTF_FEATURE_DETECT_ENCODING
60
+
61
+ #if SIMDUTF_FEATURE_UTF8 && (SIMDUTF_FEATURE_UTF16 || SIMDUTF_FEATURE_UTF32)
62
+ // common functions for utf8 conversions
63
+ simdutf_really_inline __m128i convert_utf8_3_byte_to_utf16(__m128i in) {
64
+ // Low half contains 10bbbbbb|10cccccc
65
+ // High half contains 1110aaaa|1110aaaa
66
+ const v16u8 sh = {2, 1, 5, 4, 8, 7, 11, 10, 0, 0, 3, 3, 6, 6, 9, 9};
67
+ const v8u16 v0fff = {0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff};
68
+
69
+ __m128i perm = __lsx_vshuf_b(__lsx_vldi(0), in, (__m128i)sh);
70
+ // 1110aaaa => aaaa0000
71
+ __m128i perm_high = __lsx_vslli_b(__lsx_vbsrl_v(perm, 8), 4);
72
+ // 10bbbbbb 10cccccc => 0010bbbb bbcccccc
73
+ __m128i composed = __lsx_vbitsel_v(__lsx_vsrli_h(perm, 2), /* perm >> 2*/
74
+ perm, __lsx_vrepli_h(0x3f) /* 0x003f */);
75
+ // 0010bbbb bbcccccc => aaaabbbb bbcccccc
76
+ composed = __lsx_vbitsel_v(perm_high, composed, (__m128i)v0fff);
77
+
78
+ return composed;
79
+ }
80
+
81
+ simdutf_really_inline __m128i convert_utf8_2_byte_to_utf16(__m128i in) {
82
+ // 10bbbbb 110aaaaa => 00bbbbb 000aaaaa
83
+ __m128i composed = __lsx_vand_v(in, __lsx_vldi(0x3f));
84
+ // 00bbbbbb 000aaaaa => 00000aaa aabbbbbb
85
+ composed = __lsx_vbitsel_v(
86
+ __lsx_vsrli_h(__lsx_vslli_h(composed, 8), 2), /* (aaaaa << 8) >> 2 */
87
+ __lsx_vsrli_h(composed, 8), /* bbbbbb >> 8 */
88
+ __lsx_vrepli_h(0x3f)); /* 0x003f */
89
+ return composed;
90
+ }
91
+
92
+ simdutf_really_inline __m128i
93
+ convert_utf8_1_to_2_byte_to_utf16(__m128i in, size_t shufutf8_idx) {
94
+ // Converts 6 1-2 byte UTF-8 characters to 6 UTF-16 characters.
95
+ // This is a relatively easy scenario
96
+ // we process SIX (6) input code-code units. The max length in bytes of six
97
+ // code code units spanning between 1 and 2 bytes each is 12 bytes.
98
+ __m128i sh =
99
+ __lsx_vld(reinterpret_cast<const uint8_t *>(
100
+ simdutf::tables::utf8_to_utf16::shufutf8[shufutf8_idx]),
101
+ 0);
102
+ // Shuffle
103
+ // 1 byte: 00000000 0bbbbbbb
104
+ // 2 byte: 110aaaaa 10bbbbbb
105
+ __m128i perm = __lsx_vshuf_b(__lsx_vldi(0), in, sh);
106
+ // 1 byte: 00000000 0bbbbbbb
107
+ // 2 byte: 00000000 00bbbbbb
108
+ __m128i ascii = __lsx_vand_v(perm, __lsx_vrepli_h(0x7f)); // 6 or 7 bits
109
+ // 1 byte: 00000000 00000000
110
+ // 2 byte: 00000aaa aa000000
111
+ __m128i v1f00 = lsx_splat_u16(0x1f00);
112
+ __m128i composed = __lsx_vsrli_h(__lsx_vand_v(perm, v1f00), 2); // 5 bits
113
+ // Combine with a shift right accumulate
114
+ // 1 byte: 00000000 0bbbbbbb
115
+ // 2 byte: 00000aaa aabbbbbb
116
+ composed = __lsx_vadd_h(ascii, composed);
117
+ return composed;
118
+ }
119
+ #endif // SIMDUTF_FEATURE_UTF8 && (SIMDUTF_FEATURE_UTF16 ||
120
+ // SIMDUTF_FEATURE_UTF32)
121
+
122
+ #if SIMDUTF_FEATURE_UTF16 || SIMDUTF_FEATURE_DETECT_ENCODING
123
+ #include "lasx/lasx_validate_utf16.cpp"
124
+ #endif // SIMDUTF_FEATURE_UTF16 || SIMDUTF_FEATURE_DETECT_ENCODING
125
+ #if SIMDUTF_FEATURE_UTF32 || SIMDUTF_FEATURE_DETECT_ENCODING
126
+ #include "lasx/lasx_validate_utf32le.cpp"
127
+ #endif // SIMDUTF_FEATURE_UTF32 || SIMDUTF_FEATURE_DETECT_ENCODING
128
+
129
+ #if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_LATIN1
130
+ #include "lasx/lasx_convert_latin1_to_utf8.cpp"
131
+ #endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_LATIN1
132
+ #if SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_LATIN1
133
+ #include "lasx/lasx_convert_latin1_to_utf16.cpp"
134
+ #endif // SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_LATIN1
135
+ #if SIMDUTF_FEATURE_UTF32 && SIMDUTF_FEATURE_LATIN1
136
+ #include "lasx/lasx_convert_latin1_to_utf32.cpp"
137
+ #endif // SIMDUTF_FEATURE_UTF32 && SIMDUTF_FEATURE_LATIN1
138
+
139
+ #if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
140
+ #include "lasx/lasx_convert_utf8_to_utf16.cpp"
141
+ #endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
142
+ #if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
143
+ #include "lasx/lasx_convert_utf8_to_utf32.cpp"
144
+ #endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
145
+ #if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_LATIN1
146
+ #include "lasx/lasx_convert_utf8_to_latin1.cpp"
147
+ #endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_LATIN1
148
+
149
+ #if SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_LATIN1
150
+ #include "lasx/lasx_convert_utf16_to_latin1.cpp"
151
+ #endif // SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_LATIN1
152
+ #if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
153
+ #include "lasx/lasx_convert_utf16_to_utf8.cpp"
154
+ #endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
155
+ #if SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_UTF32
156
+ #include "lasx/lasx_convert_utf16_to_utf32.cpp"
157
+ #endif // SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_UTF32
158
+
159
+ #if SIMDUTF_FEATURE_UTF32 && SIMDUTF_FEATURE_LATIN1
160
+ #include "lasx/lasx_convert_utf32_to_latin1.cpp"
161
+ #endif // SIMDUTF_FEATURE_UTF32 && SIMDUTF_FEATURE_LATIN1
162
+ #if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
163
+ #include "lasx/lasx_convert_utf32_to_utf8.cpp"
164
+ #endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
165
+ #if SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_UTF32
166
+ #include "lasx/lasx_convert_utf32_to_utf16.cpp"
167
+ #endif // SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_UTF32
168
+ #if SIMDUTF_FEATURE_BASE64
169
+ #include "lasx/lasx_base64.cpp"
170
+ #include "lasx/lasx_find.cpp"
171
+ #endif // SIMDUTF_FEATURE_BASE64
172
+
173
+ } // namespace
174
+ } // namespace SIMDUTF_IMPLEMENTATION
175
+ } // namespace simdutf
176
+
177
+ #include "generic/buf_block_reader.h"
178
+ #if SIMDUTF_FEATURE_UTF8 || SIMDUTF_FEATURE_DETECT_ENCODING
179
+ #include "generic/utf8_validation/utf8_lookup4_algorithm.h"
180
+ #include "generic/utf8_validation/utf8_validator.h"
181
+ #endif // SIMDUTF_FEATURE_UTF8 || SIMDUTF_FEATURE_DETECT_ENCODING
182
+ #if SIMDUTF_FEATURE_ASCII
183
+ #include "generic/ascii_validation.h"
184
+ #endif // SIMDUTF_FEATURE_ASCII
185
+
186
+ #if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_LATIN1
187
+ // transcoding from UTF-8 to Latin 1
188
+ #include "generic/utf8_to_latin1/utf8_to_latin1.h"
189
+ #include "generic/utf8_to_latin1/valid_utf8_to_latin1.h"
190
+ #endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_LATIN1
191
+ #if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
192
+ // transcoding from UTF-8 to UTF-16
193
+ #include "generic/utf8_to_utf16/valid_utf8_to_utf16.h"
194
+ #include "generic/utf8_to_utf16/utf8_to_utf16.h"
195
+ #include "generic/utf8/utf16_length_from_utf8_bytemask.h"
196
+ #endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
197
+ #if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
198
+ // transcoding from UTF-8 to UTF-32
199
+ #include "generic/utf8_to_utf32/valid_utf8_to_utf32.h"
200
+ #include "generic/utf8_to_utf32/utf8_to_utf32.h"
201
+ #endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
202
+
203
+ #if SIMDUTF_FEATURE_UTF8
204
+ #include "generic/utf8.h"
205
+ #endif // SIMDUTF_FEATURE_UTF8
206
+
207
+ #if SIMDUTF_FEATURE_UTF16
208
+ #include "generic/utf16/count_code_points_bytemask.h"
209
+ #include "generic/utf16/change_endianness.h"
210
+ #include "generic/utf16/utf8_length_from_utf16_bytemask.h"
211
+ #include "generic/utf16/utf32_length_from_utf16.h"
212
+ #include "generic/utf16/to_well_formed.h"
213
+ #endif // SIMDUTF_FEATURE_UTF16
214
+
215
+ #if SIMDUTF_FEATURE_UTF16 || SIMDUTF_FEATURE_DETECT_ENCODING
216
+ #include "generic/validate_utf16.h"
217
+ #endif // SIMDUTF_FEATURE_UTF16 || SIMDUTF_FEATURE_DETECT_ENCODING
218
+
219
+ #if SIMDUTF_FEATURE_UTF32
220
+ #include "generic/utf32.h"
221
+ #endif // SIMDUTF_FEATURE_UTF32
222
+ #if SIMDUTF_FEATURE_BASE64
223
+ #include "generic/base64lengths.h"
224
+ #endif // SIMDUTF_FEATURE_BASE64
225
+
226
+ //
227
+ // Implementation-specific overrides
228
+ //
229
+ namespace simdutf {
230
+ namespace SIMDUTF_IMPLEMENTATION {
231
+
232
+ #if SIMDUTF_FEATURE_DETECT_ENCODING
233
+ simdutf_warn_unused int
234
+ implementation::detect_encodings(const char *input,
235
+ size_t length) const noexcept {
236
+ // If there is a BOM, then we trust it.
237
+ auto bom_encoding = simdutf::BOM::check_bom(input, length);
238
+ // todo: reimplement as a one-pass algorithm.
239
+ if (bom_encoding != encoding_type::unspecified) {
240
+ return bom_encoding;
241
+ }
242
+ int out = 0;
243
+ if (validate_utf8(input, length)) {
244
+ out |= encoding_type::UTF8;
245
+ }
246
+ if ((length % 2) == 0) {
247
+ if (validate_utf16le(reinterpret_cast<const char16_t *>(input),
248
+ length / 2)) {
249
+ out |= encoding_type::UTF16_LE;
250
+ }
251
+ }
252
+ if ((length % 4) == 0) {
253
+ if (validate_utf32(reinterpret_cast<const char32_t *>(input), length / 4)) {
254
+ out |= encoding_type::UTF32_LE;
255
+ }
256
+ }
257
+ return out;
258
+ }
259
+ #endif // SIMDUTF_FEATURE_DETECT_ENCODING
260
+
261
+ #if SIMDUTF_FEATURE_UTF8 || SIMDUTF_FEATURE_DETECT_ENCODING
262
+ simdutf_warn_unused bool
263
+ implementation::validate_utf8(const char *buf, size_t len) const noexcept {
264
+ return lasx::utf8_validation::generic_validate_utf8(buf, len);
265
+ }
266
+ #endif // SIMDUTF_FEATURE_UTF8 || SIMDUTF_FEATURE_DETECT_ENCODING
267
+
268
+ #if SIMDUTF_FEATURE_UTF8
269
+ simdutf_warn_unused result implementation::validate_utf8_with_errors(
270
+ const char *buf, size_t len) const noexcept {
271
+ return lasx::utf8_validation::generic_validate_utf8_with_errors(buf, len);
272
+ }
273
+ #endif // SIMDUTF_FEATURE_UTF8
274
+
275
+ #if SIMDUTF_FEATURE_ASCII
276
+ simdutf_warn_unused bool
277
+ implementation::validate_ascii(const char *buf, size_t len) const noexcept {
278
+ return lasx::ascii_validation::generic_validate_ascii(buf, len);
279
+ }
280
+
281
+ simdutf_warn_unused result implementation::validate_ascii_with_errors(
282
+ const char *buf, size_t len) const noexcept {
283
+ return lasx::ascii_validation::generic_validate_ascii_with_errors(buf, len);
284
+ }
285
+ #endif // SIMDUTF_FEATURE_ASCII
286
+ #if SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_ASCII
287
+ simdutf_warn_unused bool
288
+ implementation::validate_utf16le_as_ascii(const char16_t *buf,
289
+ size_t len) const noexcept {
290
+ return lasx::utf16::validate_utf16_as_ascii_with_errors<endianness::LITTLE>(
291
+ buf, len)
292
+ .error == SUCCESS;
293
+ }
294
+
295
+ simdutf_warn_unused bool
296
+ implementation::validate_utf16be_as_ascii(const char16_t *buf,
297
+ size_t len) const noexcept {
298
+ return lasx::utf16::validate_utf16_as_ascii_with_errors<endianness::BIG>(buf,
299
+ len)
300
+ .error == SUCCESS;
301
+ }
302
+ #endif // SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_ASCII
303
+ #if SIMDUTF_FEATURE_UTF16 || SIMDUTF_FEATURE_DETECT_ENCODING
304
+ simdutf_warn_unused bool
305
+ implementation::validate_utf16le(const char16_t *buf,
306
+ size_t len) const noexcept {
307
+ if (simdutf_unlikely(len == 0)) {
308
+ // empty input is valid. protected the implementation from nullptr.
309
+ return true;
310
+ }
311
+ const auto res =
312
+ lasx::utf16::validate_utf16_with_errors<endianness::LITTLE>(buf, len);
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
+
335
+ const auto res =
336
+ lasx::utf16::validate_utf16_with_errors<endianness::BIG>(buf, len);
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
+ lasx::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
+ lasx::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
+ return 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
+ return 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 = lasx_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 = lasx_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
+ lasx_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
+ lasx_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
+ lasx_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
+ lasx_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
+ size_t pos = 0;
492
+ char *output_start{latin1_output};
493
+ // Performance degradation when memory address is not 32-byte aligned
494
+ while (((uint64_t)latin1_output & 0x1F) && pos < len) {
495
+ if (buf[pos] & 0x80) {
496
+ if (pos + 1 >= len)
497
+ return 0;
498
+ if ((buf[pos] & 0b11100000) == 0b11000000) {
499
+ if ((buf[pos + 1] & 0b11000000) != 0b10000000)
500
+ return 0;
501
+ uint32_t code_point =
502
+ (buf[pos] & 0b00011111) << 6 | (buf[pos + 1] & 0b00111111);
503
+ if (code_point < 0x80 || 0xFF < code_point) {
504
+ return 0;
505
+ }
506
+ *latin1_output++ = char(code_point);
507
+ pos += 2;
508
+ } else {
509
+ return 0;
510
+ }
511
+ } else {
512
+ *latin1_output++ = char(buf[pos]);
513
+ pos++;
514
+ }
515
+ }
516
+ size_t convert_size = latin1_output - output_start;
517
+ if (pos == len)
518
+ return convert_size;
519
+ utf8_to_latin1::validating_transcoder converter;
520
+ size_t convert_result =
521
+ converter.convert(buf + pos, len - pos, latin1_output);
522
+ return convert_result ? convert_size + convert_result : 0;
523
+ }
524
+
525
+ simdutf_warn_unused result implementation::convert_utf8_to_latin1_with_errors(
526
+ const char *buf, size_t len, char *latin1_output) const noexcept {
527
+ size_t pos = 0;
528
+ char *output_start{latin1_output};
529
+ // Performance degradation when memory address is not 32-byte aligned
530
+ while (((uint64_t)latin1_output & 0x1F) && pos < len) {
531
+ if (buf[pos] & 0x80) {
532
+ if ((buf[pos] & 0b11100000) == 0b11000000) {
533
+ if (pos + 1 >= len)
534
+ return result(error_code::TOO_SHORT, pos);
535
+ if ((buf[pos + 1] & 0b11000000) != 0b10000000)
536
+ return result(error_code::TOO_SHORT, pos);
537
+ uint32_t code_point =
538
+ (buf[pos] & 0b00011111) << 6 | (buf[pos + 1] & 0b00111111);
539
+ if (code_point < 0x80)
540
+ return result(error_code::OVERLONG, pos);
541
+ if (0xFF < code_point)
542
+ return result(error_code::TOO_LARGE, pos);
543
+ *latin1_output++ = char(code_point);
544
+ pos += 2;
545
+ } else if ((buf[pos] & 0b11110000) == 0b11100000) {
546
+ return result(error_code::TOO_LARGE, pos);
547
+ } else if ((buf[pos] & 0b11111000) == 0b11110000) {
548
+ return result(error_code::TOO_LARGE, pos);
549
+ } else {
550
+ if ((buf[pos] & 0b11000000) == 0b10000000) {
551
+ return result(error_code::TOO_LONG, pos);
552
+ }
553
+ return result(error_code::HEADER_BITS, pos);
554
+ }
555
+ } else {
556
+ *latin1_output++ = char(buf[pos]);
557
+ pos++;
558
+ }
559
+ }
560
+ size_t convert_size = latin1_output - output_start;
561
+ if (pos == len)
562
+ return result(error_code::SUCCESS, convert_size);
563
+
564
+ utf8_to_latin1::validating_transcoder converter;
565
+ result res =
566
+ converter.convert_with_errors(buf + pos, len - pos, latin1_output);
567
+ return res.error ? result(res.error, res.count + pos)
568
+ : result(res.error, res.count + convert_size);
569
+ }
570
+
571
+ simdutf_warn_unused size_t implementation::convert_valid_utf8_to_latin1(
572
+ const char *buf, size_t len, char *latin1_output) const noexcept {
573
+ size_t pos = 0;
574
+ char *output_start{latin1_output};
575
+ // Performance degradation when memory address is not 32-byte aligned
576
+ while (((uint64_t)latin1_output & 0x1F) && pos < len) {
577
+ if (buf[pos] & 0x80) {
578
+ if (pos + 1 >= len)
579
+ break;
580
+ if ((buf[pos] & 0b11100000) == 0b11000000) {
581
+ if ((buf[pos + 1] & 0b11000000) != 0b10000000)
582
+ return 0;
583
+ uint32_t code_point =
584
+ (buf[pos] & 0b00011111) << 6 | (buf[pos + 1] & 0b00111111);
585
+ *latin1_output++ = char(code_point);
586
+ pos += 2;
587
+ } else {
588
+ return 0;
589
+ }
590
+ } else {
591
+ *latin1_output++ = char(buf[pos]);
592
+ pos++;
593
+ }
594
+ }
595
+ size_t convert_size = latin1_output - output_start;
596
+ if (pos == len)
597
+ return convert_size;
598
+
599
+ size_t convert_result =
600
+ lasx::utf8_to_latin1::convert_valid(buf + pos, len - pos, latin1_output);
601
+ return convert_result ? convert_size + convert_result : 0;
602
+ }
603
+ #endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_LATIN1
604
+
605
+ #if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
606
+ simdutf_warn_unused size_t implementation::convert_utf8_to_utf16le(
607
+ const char *buf, size_t len, char16_t *utf16_output) const noexcept {
608
+ utf8_to_utf16::validating_transcoder converter;
609
+ return converter.convert<endianness::LITTLE>(buf, len, utf16_output);
610
+ }
611
+
612
+ simdutf_warn_unused size_t implementation::convert_utf8_to_utf16be(
613
+ const char *buf, size_t len, char16_t *utf16_output) const noexcept {
614
+ utf8_to_utf16::validating_transcoder converter;
615
+ return converter.convert<endianness::BIG>(buf, len, utf16_output);
616
+ }
617
+
618
+ simdutf_warn_unused result implementation::convert_utf8_to_utf16le_with_errors(
619
+ const char *buf, size_t len, char16_t *utf16_output) const noexcept {
620
+ utf8_to_utf16::validating_transcoder converter;
621
+ return converter.convert_with_errors<endianness::LITTLE>(buf, len,
622
+ utf16_output);
623
+ }
624
+
625
+ simdutf_warn_unused result implementation::convert_utf8_to_utf16be_with_errors(
626
+ const char *buf, size_t len, char16_t *utf16_output) const noexcept {
627
+ utf8_to_utf16::validating_transcoder converter;
628
+ return converter.convert_with_errors<endianness::BIG>(buf, len, utf16_output);
629
+ }
630
+
631
+ simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf16le(
632
+ const char *input, size_t size, char16_t *utf16_output) const noexcept {
633
+ return utf8_to_utf16::convert_valid<endianness::LITTLE>(input, size,
634
+ utf16_output);
635
+ }
636
+
637
+ simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf16be(
638
+ const char *input, size_t size, char16_t *utf16_output) const noexcept {
639
+ return utf8_to_utf16::convert_valid<endianness::BIG>(input, size,
640
+ utf16_output);
641
+ }
642
+ #endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
643
+
644
+ #if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
645
+ simdutf_warn_unused size_t implementation::convert_utf8_to_utf32(
646
+ const char *buf, size_t len, char32_t *utf32_output) const noexcept {
647
+ utf8_to_utf32::validating_transcoder converter;
648
+ return converter.convert(buf, len, utf32_output);
649
+ }
650
+
651
+ simdutf_warn_unused result implementation::convert_utf8_to_utf32_with_errors(
652
+ const char *buf, size_t len, char32_t *utf32_output) const noexcept {
653
+ utf8_to_utf32::validating_transcoder converter;
654
+ return converter.convert_with_errors(buf, len, utf32_output);
655
+ }
656
+
657
+ simdutf_warn_unused size_t implementation::convert_valid_utf8_to_utf32(
658
+ const char *input, size_t size, char32_t *utf32_output) const noexcept {
659
+ return utf8_to_utf32::convert_valid(input, size, utf32_output);
660
+ }
661
+ #endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
662
+
663
+ #if SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_LATIN1
664
+ simdutf_warn_unused size_t implementation::convert_utf16le_to_latin1(
665
+ const char16_t *buf, size_t len, char *latin1_output) const noexcept {
666
+ std::pair<const char16_t *, char *> ret =
667
+ lasx_convert_utf16_to_latin1<endianness::LITTLE>(buf, len, latin1_output);
668
+ if (ret.first == nullptr) {
669
+ return 0;
670
+ }
671
+ size_t saved_bytes = ret.second - latin1_output;
672
+
673
+ if (ret.first != buf + len) {
674
+ const size_t scalar_saved_bytes =
675
+ scalar::utf16_to_latin1::convert<endianness::LITTLE>(
676
+ ret.first, len - (ret.first - buf), ret.second);
677
+ if (scalar_saved_bytes == 0) {
678
+ return 0;
679
+ }
680
+ saved_bytes += scalar_saved_bytes;
681
+ }
682
+ return saved_bytes;
683
+ }
684
+
685
+ simdutf_warn_unused size_t implementation::convert_utf16be_to_latin1(
686
+ const char16_t *buf, size_t len, char *latin1_output) const noexcept {
687
+ std::pair<const char16_t *, char *> ret =
688
+ lasx_convert_utf16_to_latin1<endianness::BIG>(buf, len, latin1_output);
689
+ if (ret.first == nullptr) {
690
+ return 0;
691
+ }
692
+ size_t saved_bytes = ret.second - latin1_output;
693
+
694
+ if (ret.first != buf + len) {
695
+ const size_t scalar_saved_bytes =
696
+ scalar::utf16_to_latin1::convert<endianness::BIG>(
697
+ ret.first, len - (ret.first - buf), ret.second);
698
+ if (scalar_saved_bytes == 0) {
699
+ return 0;
700
+ }
701
+ saved_bytes += scalar_saved_bytes;
702
+ }
703
+ return saved_bytes;
704
+ }
705
+
706
+ simdutf_warn_unused result
707
+ implementation::convert_utf16le_to_latin1_with_errors(
708
+ const char16_t *buf, size_t len, char *latin1_output) const noexcept {
709
+ std::pair<result, char *> ret =
710
+ lasx_convert_utf16_to_latin1_with_errors<endianness::LITTLE>(
711
+ buf, len, latin1_output);
712
+ if (ret.first.error) {
713
+ return ret.first;
714
+ } // Can return directly since scalar fallback already found correct
715
+ // ret.first.count
716
+ if (ret.first.count != len) { // All good so far, but not finished
717
+ result scalar_res =
718
+ scalar::utf16_to_latin1::convert_with_errors<endianness::LITTLE>(
719
+ buf + ret.first.count, len - ret.first.count, ret.second);
720
+ if (scalar_res.error) {
721
+ scalar_res.count += ret.first.count;
722
+ return scalar_res;
723
+ } else {
724
+ ret.second += scalar_res.count;
725
+ }
726
+ }
727
+ ret.first.count =
728
+ ret.second -
729
+ latin1_output; // Set count to the number of 8-bit code units written
730
+ return ret.first;
731
+ }
732
+
733
+ simdutf_warn_unused result
734
+ implementation::convert_utf16be_to_latin1_with_errors(
735
+ const char16_t *buf, size_t len, char *latin1_output) const noexcept {
736
+ std::pair<result, char *> ret =
737
+ lasx_convert_utf16_to_latin1_with_errors<endianness::BIG>(buf, len,
738
+ latin1_output);
739
+ if (ret.first.error) {
740
+ return ret.first;
741
+ } // Can return directly since scalar fallback already found correct
742
+ // ret.first.count
743
+ if (ret.first.count != len) { // All good so far, but not finished
744
+ result scalar_res =
745
+ scalar::utf16_to_latin1::convert_with_errors<endianness::BIG>(
746
+ buf + ret.first.count, len - ret.first.count, ret.second);
747
+ if (scalar_res.error) {
748
+ scalar_res.count += ret.first.count;
749
+ return scalar_res;
750
+ } else {
751
+ ret.second += scalar_res.count;
752
+ }
753
+ }
754
+ ret.first.count =
755
+ ret.second -
756
+ latin1_output; // Set count to the number of 8-bit code units written
757
+ return ret.first;
758
+ }
759
+
760
+ simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_latin1(
761
+ const char16_t *buf, size_t len, char *latin1_output) const noexcept {
762
+ // optimization opportunity: implement a custom function.
763
+ return convert_utf16be_to_latin1(buf, len, latin1_output);
764
+ }
765
+
766
+ simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_latin1(
767
+ const char16_t *buf, size_t len, char *latin1_output) const noexcept {
768
+ // optimization opportunity: implement a custom function.
769
+ return convert_utf16le_to_latin1(buf, len, latin1_output);
770
+ }
771
+ #endif // SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_LATIN1
772
+
773
+ #if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
774
+ simdutf_warn_unused size_t implementation::convert_utf16le_to_utf8(
775
+ const char16_t *buf, size_t len, char *utf8_output) const noexcept {
776
+ std::pair<const char16_t *, char *> ret =
777
+ lasx_convert_utf16_to_utf8<endianness::LITTLE>(buf, len, utf8_output);
778
+ if (ret.first == nullptr) {
779
+ return 0;
780
+ }
781
+ size_t saved_bytes = ret.second - utf8_output;
782
+ if (ret.first != buf + len) {
783
+ const size_t scalar_saved_bytes =
784
+ scalar::utf16_to_utf8::convert<endianness::LITTLE>(
785
+ ret.first, len - (ret.first - buf), ret.second);
786
+ if (scalar_saved_bytes == 0) {
787
+ return 0;
788
+ }
789
+ saved_bytes += scalar_saved_bytes;
790
+ }
791
+ return saved_bytes;
792
+ }
793
+
794
+ simdutf_warn_unused size_t implementation::convert_utf16be_to_utf8(
795
+ const char16_t *buf, size_t len, char *utf8_output) const noexcept {
796
+ std::pair<const char16_t *, char *> ret =
797
+ lasx_convert_utf16_to_utf8<endianness::BIG>(buf, len, utf8_output);
798
+ if (ret.first == nullptr) {
799
+ return 0;
800
+ }
801
+ size_t saved_bytes = ret.second - utf8_output;
802
+ if (ret.first != buf + len) {
803
+ const size_t scalar_saved_bytes =
804
+ scalar::utf16_to_utf8::convert<endianness::BIG>(
805
+ ret.first, len - (ret.first - buf), ret.second);
806
+ if (scalar_saved_bytes == 0) {
807
+ return 0;
808
+ }
809
+ saved_bytes += scalar_saved_bytes;
810
+ }
811
+ return saved_bytes;
812
+ }
813
+
814
+ simdutf_warn_unused result implementation::convert_utf16le_to_utf8_with_errors(
815
+ const char16_t *buf, size_t len, char *utf8_output) const noexcept {
816
+ // ret.first.count is always the position in the buffer, not the number of
817
+ // code units written even if finished
818
+ std::pair<result, char *> ret =
819
+ lasx_convert_utf16_to_utf8_with_errors<endianness::LITTLE>(buf, len,
820
+ utf8_output);
821
+ if (ret.first.error) {
822
+ return ret.first;
823
+ } // Can return directly since scalar fallback already found correct
824
+ // ret.first.count
825
+ if (ret.first.count != len) { // All good so far, but not finished
826
+ result scalar_res =
827
+ scalar::utf16_to_utf8::convert_with_errors<endianness::LITTLE>(
828
+ buf + ret.first.count, len - ret.first.count, ret.second);
829
+ if (scalar_res.error) {
830
+ scalar_res.count += ret.first.count;
831
+ return scalar_res;
832
+ } else {
833
+ ret.second += scalar_res.count;
834
+ }
835
+ }
836
+ ret.first.count =
837
+ ret.second -
838
+ utf8_output; // Set count to the number of 8-bit code units written
839
+ return ret.first;
840
+ }
841
+
842
+ simdutf_warn_unused result implementation::convert_utf16be_to_utf8_with_errors(
843
+ const char16_t *buf, size_t len, char *utf8_output) const noexcept {
844
+ // ret.first.count is always the position in the buffer, not the number of
845
+ // code units written even if finished
846
+ std::pair<result, char *> ret =
847
+ lasx_convert_utf16_to_utf8_with_errors<endianness::BIG>(buf, len,
848
+ utf8_output);
849
+ if (ret.first.error) {
850
+ return ret.first;
851
+ } // Can return directly since scalar fallback already found correct
852
+ // ret.first.count
853
+ if (ret.first.count != len) { // All good so far, but not finished
854
+ result scalar_res =
855
+ scalar::utf16_to_utf8::convert_with_errors<endianness::BIG>(
856
+ buf + ret.first.count, len - ret.first.count, ret.second);
857
+ if (scalar_res.error) {
858
+ scalar_res.count += ret.first.count;
859
+ return scalar_res;
860
+ } else {
861
+ ret.second += scalar_res.count;
862
+ }
863
+ }
864
+ ret.first.count =
865
+ ret.second -
866
+ utf8_output; // Set count to the number of 8-bit code units written
867
+ return ret.first;
868
+ }
869
+
870
+ simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_utf8(
871
+ const char16_t *buf, size_t len, char *utf8_output) const noexcept {
872
+ return convert_utf16le_to_utf8(buf, len, utf8_output);
873
+ }
874
+
875
+ simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_utf8(
876
+ const char16_t *buf, size_t len, char *utf8_output) const noexcept {
877
+ return convert_utf16be_to_utf8(buf, len, utf8_output);
878
+ }
879
+ #endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
880
+
881
+ #if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
882
+ simdutf_warn_unused size_t implementation::convert_utf32_to_utf8(
883
+ const char32_t *buf, size_t len, char *utf8_output) const noexcept {
884
+ if (simdutf_unlikely(len == 0)) {
885
+ return 0;
886
+ }
887
+ std::pair<const char32_t *, char *> ret =
888
+ lasx_convert_utf32_to_utf8(buf, len, utf8_output);
889
+ if (ret.first == nullptr) {
890
+ return 0;
891
+ }
892
+ size_t saved_bytes = ret.second - utf8_output;
893
+ if (ret.first != buf + len) {
894
+ const size_t scalar_saved_bytes = scalar::utf32_to_utf8::convert(
895
+ ret.first, len - (ret.first - buf), ret.second);
896
+ if (scalar_saved_bytes == 0) {
897
+ return 0;
898
+ }
899
+ saved_bytes += scalar_saved_bytes;
900
+ }
901
+ return saved_bytes;
902
+ }
903
+
904
+ simdutf_warn_unused result implementation::convert_utf32_to_utf8_with_errors(
905
+ const char32_t *buf, size_t len, char *utf8_output) const noexcept {
906
+ if (simdutf_unlikely(len == 0)) {
907
+ return result(error_code::SUCCESS, 0);
908
+ }
909
+ // ret.first.count is always the position in the buffer, not the number of
910
+ // code units written even if finished
911
+ std::pair<result, char *> ret =
912
+ lasx_convert_utf32_to_utf8_with_errors(buf, len, utf8_output);
913
+ if (ret.first.count != len) {
914
+ result scalar_res = scalar::utf32_to_utf8::convert_with_errors(
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
+ utf8_output; // Set count to the number of 8-bit code units written
926
+ return ret.first;
927
+ }
928
+ #endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
929
+
930
+ #if SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_UTF32
931
+ simdutf_warn_unused size_t implementation::convert_utf16le_to_utf32(
932
+ const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept {
933
+ std::pair<const char16_t *, char32_t *> ret =
934
+ lasx_convert_utf16_to_utf32<endianness::LITTLE>(buf, len, utf32_output);
935
+ if (ret.first == nullptr) {
936
+ return 0;
937
+ }
938
+ size_t saved_bytes = ret.second - utf32_output;
939
+ if (ret.first != buf + len) {
940
+ const size_t scalar_saved_bytes =
941
+ scalar::utf16_to_utf32::convert<endianness::LITTLE>(
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 size_t implementation::convert_utf16be_to_utf32(
952
+ const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept {
953
+ std::pair<const char16_t *, char32_t *> ret =
954
+ lasx_convert_utf16_to_utf32<endianness::BIG>(buf, len, utf32_output);
955
+ if (ret.first == nullptr) {
956
+ return 0;
957
+ }
958
+ size_t saved_bytes = ret.second - utf32_output;
959
+ if (ret.first != buf + len) {
960
+ const size_t scalar_saved_bytes =
961
+ scalar::utf16_to_utf32::convert<endianness::BIG>(
962
+ ret.first, len - (ret.first - buf), ret.second);
963
+ if (scalar_saved_bytes == 0) {
964
+ return 0;
965
+ }
966
+ saved_bytes += scalar_saved_bytes;
967
+ }
968
+ return saved_bytes;
969
+ }
970
+
971
+ simdutf_warn_unused result implementation::convert_utf16le_to_utf32_with_errors(
972
+ const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept {
973
+ // ret.first.count is always the position in the buffer, not the number of
974
+ // code units written even if finished
975
+ std::pair<result, char32_t *> ret =
976
+ lasx_convert_utf16_to_utf32_with_errors<endianness::LITTLE>(buf, len,
977
+ utf32_output);
978
+ if (ret.first.error) {
979
+ return ret.first;
980
+ } // Can return directly since scalar fallback already found correct
981
+ // ret.first.count
982
+ if (ret.first.count != len) { // All good so far, but not finished
983
+ result scalar_res =
984
+ scalar::utf16_to_utf32::convert_with_errors<endianness::LITTLE>(
985
+ buf + ret.first.count, len - ret.first.count, ret.second);
986
+ if (scalar_res.error) {
987
+ scalar_res.count += ret.first.count;
988
+ return scalar_res;
989
+ } else {
990
+ ret.second += scalar_res.count;
991
+ }
992
+ }
993
+ ret.first.count =
994
+ ret.second -
995
+ utf32_output; // Set count to the number of 8-bit code units written
996
+ return ret.first;
997
+ }
998
+
999
+ simdutf_warn_unused result implementation::convert_utf16be_to_utf32_with_errors(
1000
+ const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept {
1001
+ // ret.first.count is always the position in the buffer, not the number of
1002
+ // code units written even if finished
1003
+ std::pair<result, char32_t *> ret =
1004
+ lasx_convert_utf16_to_utf32_with_errors<endianness::BIG>(buf, len,
1005
+ utf32_output);
1006
+ if (ret.first.error) {
1007
+ return ret.first;
1008
+ } // Can return directly since scalar fallback already found correct
1009
+ // ret.first.count
1010
+ if (ret.first.count != len) { // All good so far, but not finished
1011
+ result scalar_res =
1012
+ scalar::utf16_to_utf32::convert_with_errors<endianness::BIG>(
1013
+ buf + ret.first.count, len - ret.first.count, ret.second);
1014
+ if (scalar_res.error) {
1015
+ scalar_res.count += ret.first.count;
1016
+ return scalar_res;
1017
+ } else {
1018
+ ret.second += scalar_res.count;
1019
+ }
1020
+ }
1021
+ ret.first.count =
1022
+ ret.second -
1023
+ utf32_output; // Set count to the number of 8-bit code units written
1024
+ return ret.first;
1025
+ }
1026
+ #endif // SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_UTF32
1027
+
1028
+ #if SIMDUTF_FEATURE_UTF32 && SIMDUTF_FEATURE_LATIN1
1029
+ simdutf_warn_unused size_t implementation::convert_utf32_to_latin1(
1030
+ const char32_t *buf, size_t len, char *latin1_output) const noexcept {
1031
+ std::pair<const char32_t *, char *> ret =
1032
+ lasx_convert_utf32_to_latin1(buf, len, latin1_output);
1033
+ if (ret.first == nullptr) {
1034
+ return 0;
1035
+ }
1036
+ size_t saved_bytes = ret.second - latin1_output;
1037
+
1038
+ if (ret.first != buf + len) {
1039
+ const size_t scalar_saved_bytes = scalar::utf32_to_latin1::convert(
1040
+ ret.first, len - (ret.first - buf), ret.second);
1041
+ if (scalar_saved_bytes == 0) {
1042
+ return 0;
1043
+ }
1044
+ saved_bytes += scalar_saved_bytes;
1045
+ }
1046
+ return saved_bytes;
1047
+ }
1048
+
1049
+ simdutf_warn_unused result implementation::convert_utf32_to_latin1_with_errors(
1050
+ const char32_t *buf, size_t len, char *latin1_output) const noexcept {
1051
+ std::pair<result, char *> ret =
1052
+ lasx_convert_utf32_to_latin1_with_errors(buf, len, latin1_output);
1053
+ if (ret.first.error) {
1054
+ return ret.first;
1055
+ } // Can return directly since scalar fallback already found correct
1056
+ // ret.first.count
1057
+ if (ret.first.count != len) { // All good so far, but not finished
1058
+ result scalar_res = scalar::utf32_to_latin1::convert_with_errors(
1059
+ buf + ret.first.count, len - ret.first.count, ret.second);
1060
+ if (scalar_res.error) {
1061
+ scalar_res.count += ret.first.count;
1062
+ return scalar_res;
1063
+ } else {
1064
+ ret.second += scalar_res.count;
1065
+ }
1066
+ }
1067
+ ret.first.count =
1068
+ ret.second -
1069
+ latin1_output; // Set count to the number of 8-bit code units written
1070
+ return ret.first;
1071
+ }
1072
+
1073
+ simdutf_warn_unused size_t implementation::convert_valid_utf32_to_latin1(
1074
+ const char32_t *buf, size_t len, char *latin1_output) const noexcept {
1075
+ std::pair<const char32_t *, char *> ret =
1076
+ lasx_convert_utf32_to_latin1(buf, len, latin1_output);
1077
+ if (ret.first == nullptr) {
1078
+ return 0;
1079
+ }
1080
+ size_t saved_bytes = ret.second - latin1_output;
1081
+
1082
+ if (ret.first != buf + len) {
1083
+ const size_t scalar_saved_bytes = scalar::utf32_to_latin1::convert_valid(
1084
+ ret.first, len - (ret.first - buf), ret.second);
1085
+ saved_bytes += scalar_saved_bytes;
1086
+ }
1087
+ return saved_bytes;
1088
+ }
1089
+ #endif // SIMDUTF_FEATURE_UTF32 && SIMDUTF_FEATURE_LATIN1
1090
+
1091
+ #if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
1092
+ simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf8(
1093
+ const char32_t *buf, size_t len, char *utf8_output) const noexcept {
1094
+ // optimization opportunity: implement a custom function.
1095
+ return convert_utf32_to_utf8(buf, len, utf8_output);
1096
+ }
1097
+ #endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
1098
+
1099
+ #if SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_UTF32
1100
+ simdutf_warn_unused size_t implementation::convert_utf32_to_utf16le(
1101
+ const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept {
1102
+ std::pair<const char32_t *, char16_t *> ret =
1103
+ lasx_convert_utf32_to_utf16<endianness::LITTLE>(buf, len, utf16_output);
1104
+ if (ret.first == nullptr) {
1105
+ return 0;
1106
+ }
1107
+ size_t saved_bytes = ret.second - utf16_output;
1108
+ if (ret.first != buf + len) {
1109
+ const size_t scalar_saved_bytes =
1110
+ scalar::utf32_to_utf16::convert<endianness::LITTLE>(
1111
+ ret.first, len - (ret.first - buf), ret.second);
1112
+ if (scalar_saved_bytes == 0) {
1113
+ return 0;
1114
+ }
1115
+ saved_bytes += scalar_saved_bytes;
1116
+ }
1117
+
1118
+ return saved_bytes;
1119
+ }
1120
+
1121
+ simdutf_warn_unused size_t implementation::convert_utf32_to_utf16be(
1122
+ const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept {
1123
+ std::pair<const char32_t *, char16_t *> ret =
1124
+ lasx_convert_utf32_to_utf16<endianness::BIG>(buf, len, utf16_output);
1125
+ if (ret.first == nullptr) {
1126
+ return 0;
1127
+ }
1128
+ size_t saved_bytes = ret.second - utf16_output;
1129
+ if (ret.first != buf + len) {
1130
+ const size_t scalar_saved_bytes =
1131
+ scalar::utf32_to_utf16::convert<endianness::BIG>(
1132
+ ret.first, len - (ret.first - buf), ret.second);
1133
+ if (scalar_saved_bytes == 0) {
1134
+ return 0;
1135
+ }
1136
+ saved_bytes += scalar_saved_bytes;
1137
+ }
1138
+ return saved_bytes;
1139
+ }
1140
+
1141
+ simdutf_warn_unused result implementation::convert_utf32_to_utf16le_with_errors(
1142
+ const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept {
1143
+ // ret.first.count is always the position in the buffer, not the number of
1144
+ // code units written even if finished
1145
+ std::pair<result, char16_t *> ret =
1146
+ lasx_convert_utf32_to_utf16_with_errors<endianness::LITTLE>(buf, len,
1147
+ utf16_output);
1148
+ if (ret.first.count != len) {
1149
+ result scalar_res =
1150
+ scalar::utf32_to_utf16::convert_with_errors<endianness::LITTLE>(
1151
+ buf + ret.first.count, len - ret.first.count, ret.second);
1152
+ if (scalar_res.error) {
1153
+ scalar_res.count += ret.first.count;
1154
+ return scalar_res;
1155
+ } else {
1156
+ ret.second += scalar_res.count;
1157
+ }
1158
+ }
1159
+ ret.first.count =
1160
+ ret.second -
1161
+ utf16_output; // Set count to the number of 8-bit code units written
1162
+ return ret.first;
1163
+ }
1164
+
1165
+ simdutf_warn_unused result implementation::convert_utf32_to_utf16be_with_errors(
1166
+ const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept {
1167
+ // ret.first.count is always the position in the buffer, not the number of
1168
+ // code units written even if finished
1169
+ std::pair<result, char16_t *> ret =
1170
+ lasx_convert_utf32_to_utf16_with_errors<endianness::BIG>(buf, len,
1171
+ utf16_output);
1172
+ if (ret.first.count != len) {
1173
+ result scalar_res =
1174
+ scalar::utf32_to_utf16::convert_with_errors<endianness::BIG>(
1175
+ buf + ret.first.count, len - ret.first.count, ret.second);
1176
+ if (scalar_res.error) {
1177
+ scalar_res.count += ret.first.count;
1178
+ return scalar_res;
1179
+ } else {
1180
+ ret.second += scalar_res.count;
1181
+ }
1182
+ }
1183
+ ret.first.count =
1184
+ ret.second -
1185
+ utf16_output; // Set count to the number of 8-bit code units written
1186
+ return ret.first;
1187
+ }
1188
+
1189
+ simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf16le(
1190
+ const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept {
1191
+ return convert_utf32_to_utf16le(buf, len, utf16_output);
1192
+ }
1193
+
1194
+ simdutf_warn_unused size_t implementation::convert_valid_utf32_to_utf16be(
1195
+ const char32_t *buf, size_t len, char16_t *utf16_output) const noexcept {
1196
+ return convert_utf32_to_utf16be(buf, len, utf16_output);
1197
+ }
1198
+
1199
+ simdutf_warn_unused size_t implementation::convert_valid_utf16le_to_utf32(
1200
+ const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept {
1201
+ return convert_utf16le_to_utf32(buf, len, utf32_output);
1202
+ }
1203
+
1204
+ simdutf_warn_unused size_t implementation::convert_valid_utf16be_to_utf32(
1205
+ const char16_t *buf, size_t len, char32_t *utf32_output) const noexcept {
1206
+ return convert_utf16be_to_utf32(buf, len, utf32_output);
1207
+ }
1208
+ #endif // SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_UTF32
1209
+
1210
+ #if SIMDUTF_FEATURE_UTF16
1211
+ void implementation::change_endianness_utf16(const char16_t *input,
1212
+ size_t length,
1213
+ char16_t *output) const noexcept {
1214
+ utf16::change_endianness_utf16(input, length, output);
1215
+ }
1216
+
1217
+ simdutf_warn_unused size_t implementation::count_utf16le(
1218
+ const char16_t *input, size_t length) const noexcept {
1219
+ return utf16::count_code_points<endianness::LITTLE>(input, length);
1220
+ }
1221
+
1222
+ simdutf_warn_unused size_t implementation::count_utf16be(
1223
+ const char16_t *input, size_t length) const noexcept {
1224
+ return utf16::count_code_points<endianness::BIG>(input, length);
1225
+ }
1226
+ #endif // SIMDUTF_FEATURE_UTF16
1227
+
1228
+ #if SIMDUTF_FEATURE_UTF8
1229
+ simdutf_warn_unused size_t
1230
+ implementation::count_utf8(const char *input, size_t length) const noexcept {
1231
+ size_t pos = 0;
1232
+ size_t count = 0;
1233
+ // Performance degradation when memory address is not 32-byte aligned
1234
+ while ((((uint64_t)input + pos) & 0x1F && pos < length)) {
1235
+ if (input[pos++] > -65) {
1236
+ count++;
1237
+ }
1238
+ }
1239
+ __m256i v_bf = __lasx_xvldi(0xBF); // 0b10111111
1240
+ for (; pos + 32 <= length; pos += 32) {
1241
+ __m256i in = __lasx_xvld(reinterpret_cast<const int8_t *>(input + pos), 0);
1242
+ __m256i utf8_count =
1243
+ __lasx_xvpcnt_h(__lasx_xvmskltz_b(__lasx_xvslt_b(v_bf, in)));
1244
+ count = count + __lasx_xvpickve2gr_wu(utf8_count, 0) +
1245
+ __lasx_xvpickve2gr_wu(utf8_count, 4);
1246
+ }
1247
+ return count + scalar::utf8::count_code_points(input + pos, length - pos);
1248
+ }
1249
+ #endif // SIMDUTF_FEATURE_UTF8
1250
+
1251
+ #if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_LATIN1
1252
+ simdutf_warn_unused size_t implementation::latin1_length_from_utf8(
1253
+ const char *buf, size_t len) const noexcept {
1254
+ return count_utf8(buf, len);
1255
+ }
1256
+ #endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_LATIN1
1257
+
1258
+ #if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_LATIN1
1259
+ simdutf_warn_unused size_t implementation::utf8_length_from_latin1(
1260
+ const char *input, size_t length) const noexcept {
1261
+ const uint8_t *data = reinterpret_cast<const uint8_t *>(input);
1262
+ const uint8_t *data_end = data + length;
1263
+ uint64_t result = 0;
1264
+ while (data_end - data > 16) {
1265
+ uint64_t two_bytes = 0;
1266
+ __m128i input_vec = __lsx_vld(data, 0);
1267
+ two_bytes =
1268
+ __lsx_vpickve2gr_hu(__lsx_vpcnt_h(__lsx_vmskltz_b(input_vec)), 0);
1269
+ result += 16 + two_bytes;
1270
+ data += 16;
1271
+ }
1272
+ return result + scalar::latin1::utf8_length_from_latin1((const char *)data,
1273
+ data_end - data);
1274
+ }
1275
+ #endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_LATIN1
1276
+
1277
+ #if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
1278
+ simdutf_warn_unused size_t implementation::utf8_length_from_utf16le(
1279
+ const char16_t *input, size_t length) const noexcept {
1280
+ return utf16::utf8_length_from_utf16_bytemask<endianness::LITTLE>(input,
1281
+ length);
1282
+ }
1283
+
1284
+ simdutf_warn_unused size_t implementation::utf8_length_from_utf16be(
1285
+ const char16_t *input, size_t length) const noexcept {
1286
+ return utf16::utf8_length_from_utf16_bytemask<endianness::BIG>(input, length);
1287
+ }
1288
+ #endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
1289
+
1290
+ #if SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_UTF32
1291
+ simdutf_warn_unused size_t implementation::utf32_length_from_utf16le(
1292
+ const char16_t *input, size_t length) const noexcept {
1293
+ return utf16::utf32_length_from_utf16<endianness::LITTLE>(input, length);
1294
+ }
1295
+
1296
+ simdutf_warn_unused size_t implementation::utf32_length_from_utf16be(
1297
+ const char16_t *input, size_t length) const noexcept {
1298
+ return utf16::utf32_length_from_utf16<endianness::BIG>(input, length);
1299
+ }
1300
+ #endif // SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_UTF32
1301
+
1302
+ #if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
1303
+ simdutf_warn_unused size_t implementation::utf16_length_from_utf8(
1304
+ const char *input, size_t length) const noexcept {
1305
+ return utf8::utf16_length_from_utf8_bytemask(input, length);
1306
+ }
1307
+ simdutf_warn_unused result
1308
+ implementation::utf8_length_from_utf16le_with_replacement(
1309
+ const char16_t *input, size_t length) const noexcept {
1310
+ return scalar::utf16::utf8_length_from_utf16_with_replacement<
1311
+ endianness::LITTLE>(input, length);
1312
+ }
1313
+
1314
+ simdutf_warn_unused result
1315
+ implementation::utf8_length_from_utf16be_with_replacement(
1316
+ const char16_t *input, size_t length) const noexcept {
1317
+ return scalar::utf16::utf8_length_from_utf16_with_replacement<
1318
+ endianness::BIG>(input, length);
1319
+ }
1320
+
1321
+ simdutf_warn_unused size_t
1322
+ implementation::convert_utf16le_to_utf8_with_replacement(
1323
+ const char16_t *input, size_t length, char *utf8_buffer) const noexcept {
1324
+ return scalar::utf16_to_utf8::convert_with_replacement<endianness::LITTLE>(
1325
+ input, length, utf8_buffer);
1326
+ }
1327
+
1328
+ simdutf_warn_unused size_t
1329
+ implementation::convert_utf16be_to_utf8_with_replacement(
1330
+ const char16_t *input, size_t length, char *utf8_buffer) const noexcept {
1331
+ return scalar::utf16_to_utf8::convert_with_replacement<endianness::BIG>(
1332
+ input, length, utf8_buffer);
1333
+ }
1334
+
1335
+ #endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
1336
+
1337
+ #if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
1338
+ simdutf_warn_unused size_t implementation::utf8_length_from_utf32(
1339
+ const char32_t *input, size_t length) const noexcept {
1340
+ return utf32::utf8_length_from_utf32(input, length);
1341
+ }
1342
+ #endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
1343
+
1344
+ #if SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_UTF32
1345
+ simdutf_warn_unused size_t implementation::utf16_length_from_utf32(
1346
+ const char32_t *input, size_t length) const noexcept {
1347
+ __m128i v_ffff = lsx_splat_u32(0x0000ffff);
1348
+ size_t pos = 0;
1349
+ size_t count = 0;
1350
+ for (; pos + 4 <= length; pos += 4) {
1351
+ __m128i in = __lsx_vld(reinterpret_cast<const uint32_t *>(input + pos), 0);
1352
+ __m128i surrogate_bytemask = __lsx_vslt_wu(v_ffff, in);
1353
+ size_t surrogate_count = __lsx_vpickve2gr_bu(
1354
+ __lsx_vpcnt_b(__lsx_vmskltz_w(surrogate_bytemask)), 0);
1355
+ count += 4 + surrogate_count;
1356
+ }
1357
+ return count +
1358
+ scalar::utf32::utf16_length_from_utf32(input + pos, length - pos);
1359
+ }
1360
+ #endif // SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_UTF32
1361
+
1362
+ #if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
1363
+ simdutf_warn_unused size_t implementation::utf32_length_from_utf8(
1364
+ const char *input, size_t length) const noexcept {
1365
+ return utf8::count_code_points(input, length);
1366
+ }
1367
+ #endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
1368
+
1369
+ #if SIMDUTF_FEATURE_BASE64
1370
+ simdutf_warn_unused result implementation::base64_to_binary(
1371
+ const char *input, size_t length, char *output, base64_options options,
1372
+ last_chunk_handling_options last_chunk_options) const noexcept {
1373
+ if (options & base64_default_or_url) {
1374
+ if (options == base64_options::base64_default_or_url_accept_garbage) {
1375
+ return compress_decode_base64<false, true, true>(
1376
+ output, input, length, options, last_chunk_options);
1377
+ } else {
1378
+ return compress_decode_base64<false, false, true>(
1379
+ output, input, length, options, last_chunk_options);
1380
+ }
1381
+ } else if (options & base64_url) {
1382
+ if (options == base64_options::base64_url_accept_garbage) {
1383
+ return compress_decode_base64<true, true, false>(
1384
+ output, input, length, options, last_chunk_options);
1385
+ } else {
1386
+ return compress_decode_base64<true, false, false>(
1387
+ output, input, length, options, last_chunk_options);
1388
+ }
1389
+ } else {
1390
+ if (options == base64_options::base64_default_accept_garbage) {
1391
+ return compress_decode_base64<false, true, false>(
1392
+ output, input, length, options, last_chunk_options);
1393
+ } else {
1394
+ return compress_decode_base64<false, false, false>(
1395
+ output, input, length, options, last_chunk_options);
1396
+ }
1397
+ }
1398
+ }
1399
+
1400
+ simdutf_warn_unused full_result implementation::base64_to_binary_details(
1401
+ const char *input, size_t length, char *output, base64_options options,
1402
+ last_chunk_handling_options last_chunk_options) const noexcept {
1403
+ if (options & base64_default_or_url) {
1404
+ if (options == base64_options::base64_default_or_url_accept_garbage) {
1405
+ return compress_decode_base64<false, true, true>(
1406
+ output, input, length, options, last_chunk_options);
1407
+ } else {
1408
+ return compress_decode_base64<false, false, true>(
1409
+ output, input, length, options, last_chunk_options);
1410
+ }
1411
+ } else if (options & base64_url) {
1412
+ if (options == base64_options::base64_url_accept_garbage) {
1413
+ return compress_decode_base64<true, true, false>(
1414
+ output, input, length, options, last_chunk_options);
1415
+ } else {
1416
+ return compress_decode_base64<true, false, false>(
1417
+ output, input, length, options, last_chunk_options);
1418
+ }
1419
+ } else {
1420
+ if (options == base64_options::base64_default_accept_garbage) {
1421
+ return compress_decode_base64<false, true, false>(
1422
+ output, input, length, options, last_chunk_options);
1423
+ } else {
1424
+ return compress_decode_base64<false, false, false>(
1425
+ output, input, length, options, last_chunk_options);
1426
+ }
1427
+ }
1428
+ }
1429
+
1430
+ simdutf_warn_unused result implementation::base64_to_binary(
1431
+ const char16_t *input, size_t length, char *output, base64_options options,
1432
+ last_chunk_handling_options last_chunk_options) const noexcept {
1433
+ if (options & base64_default_or_url) {
1434
+ if (options == base64_options::base64_default_or_url_accept_garbage) {
1435
+ return compress_decode_base64<false, true, true>(
1436
+ output, input, length, options, last_chunk_options);
1437
+ } else {
1438
+ return compress_decode_base64<false, false, true>(
1439
+ output, input, length, options, last_chunk_options);
1440
+ }
1441
+ } else if (options & base64_url) {
1442
+ if (options == base64_options::base64_url_accept_garbage) {
1443
+ return compress_decode_base64<true, true, false>(
1444
+ output, input, length, options, last_chunk_options);
1445
+ } else {
1446
+ return compress_decode_base64<true, false, false>(
1447
+ output, input, length, options, last_chunk_options);
1448
+ }
1449
+ } else {
1450
+ if (options == base64_options::base64_default_accept_garbage) {
1451
+ return compress_decode_base64<false, true, false>(
1452
+ output, input, length, options, last_chunk_options);
1453
+ } else {
1454
+ return compress_decode_base64<false, false, false>(
1455
+ output, input, length, options, last_chunk_options);
1456
+ }
1457
+ }
1458
+ }
1459
+
1460
+ simdutf_warn_unused full_result implementation::base64_to_binary_details(
1461
+ const char16_t *input, size_t length, char *output, base64_options options,
1462
+ last_chunk_handling_options last_chunk_options) const noexcept {
1463
+ if (options & base64_default_or_url) {
1464
+ if (options == base64_options::base64_default_or_url_accept_garbage) {
1465
+ return compress_decode_base64<false, true, true>(
1466
+ output, input, length, options, last_chunk_options);
1467
+ } else {
1468
+ return compress_decode_base64<false, false, true>(
1469
+ output, input, length, options, last_chunk_options);
1470
+ }
1471
+ } else if (options & base64_url) {
1472
+ if (options == base64_options::base64_url_accept_garbage) {
1473
+ return compress_decode_base64<true, true, false>(
1474
+ output, input, length, options, last_chunk_options);
1475
+ } else {
1476
+ return compress_decode_base64<true, false, false>(
1477
+ output, input, length, options, last_chunk_options);
1478
+ }
1479
+ } else {
1480
+ if (options == base64_options::base64_default_accept_garbage) {
1481
+ return compress_decode_base64<false, true, false>(
1482
+ output, input, length, options, last_chunk_options);
1483
+ } else {
1484
+ return compress_decode_base64<false, false, false>(
1485
+ output, input, length, options, last_chunk_options);
1486
+ }
1487
+ }
1488
+ }
1489
+
1490
+ size_t implementation::binary_to_base64(const char *input, size_t length,
1491
+ char *output,
1492
+ base64_options options) const noexcept {
1493
+ if (options & base64_url) {
1494
+ return encode_base64<true>(output, input, length, options);
1495
+ } else {
1496
+ return encode_base64<false>(output, input, length, options);
1497
+ }
1498
+ }
1499
+
1500
+ size_t implementation::binary_to_base64_with_lines(
1501
+ const char *input, size_t length, char *output, size_t line_length,
1502
+ base64_options options) const noexcept {
1503
+ return scalar::base64::tail_encode_base64_impl<true>(output, input, length,
1504
+ options, line_length);
1505
+ }
1506
+
1507
+ const char *implementation::find(const char *start, const char *end,
1508
+ char character) const noexcept {
1509
+ return util_find(start, end, character);
1510
+ }
1511
+
1512
+ const char16_t *implementation::find(const char16_t *start, const char16_t *end,
1513
+ char16_t character) const noexcept {
1514
+ return util_find(start, end, character);
1515
+ }
1516
+
1517
+ simdutf_warn_unused size_t implementation::binary_length_from_base64(
1518
+ const char *input, size_t length) const noexcept {
1519
+ return base64_lengths::binary_length_from_base64(input, length);
1520
+ }
1521
+
1522
+ simdutf_warn_unused size_t implementation::binary_length_from_base64(
1523
+ const char16_t *input, size_t length) const noexcept {
1524
+ return base64_lengths::binary_length_from_base64(input, length);
1525
+ }
1526
+ #endif // SIMDUTF_FEATURE_BASE64
1527
+
1528
+ } // namespace SIMDUTF_IMPLEMENTATION
1529
+ } // namespace simdutf
1530
+
1531
+ #include "simdutf/lasx/end.h"