react-native-quick-crypto 1.0.19 → 1.1.1

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 (561) hide show
  1. package/QuickCrypto.podspec +12 -38
  2. package/README.md +2 -0
  3. package/android/CMakeLists.txt +3 -0
  4. package/android/build.gradle +5 -1
  5. package/cpp/argon2/HybridArgon2.cpp +10 -3
  6. package/cpp/blake3/HybridBlake3.cpp +5 -3
  7. package/cpp/cipher/CCMCipher.cpp +29 -16
  8. package/cpp/cipher/CCMCipher.hpp +2 -4
  9. package/cpp/cipher/ChaCha20Cipher.cpp +14 -18
  10. package/cpp/cipher/ChaCha20Cipher.hpp +2 -4
  11. package/cpp/cipher/ChaCha20Poly1305Cipher.cpp +34 -23
  12. package/cpp/cipher/ChaCha20Poly1305Cipher.hpp +2 -4
  13. package/cpp/cipher/GCMCipher.cpp +14 -15
  14. package/cpp/cipher/HybridCipher.cpp +39 -36
  15. package/cpp/cipher/HybridCipher.hpp +17 -1
  16. package/cpp/cipher/HybridRsaCipher.cpp +74 -29
  17. package/cpp/cipher/OCBCipher.cpp +4 -3
  18. package/cpp/cipher/XChaCha20Poly1305Cipher.cpp +14 -13
  19. package/cpp/cipher/XSalsa20Cipher.cpp +72 -6
  20. package/cpp/cipher/XSalsa20Cipher.hpp +25 -3
  21. package/cpp/cipher/XSalsa20Poly1305Cipher.cpp +21 -25
  22. package/cpp/dh/HybridDiffieHellman.cpp +29 -0
  23. package/cpp/ec/HybridEcKeyPair.cpp +35 -33
  24. package/cpp/ec/HybridEcKeyPair.hpp +3 -7
  25. package/cpp/ecdh/HybridECDH.cpp +23 -0
  26. package/cpp/ed25519/HybridEdKeyPair.cpp +73 -117
  27. package/cpp/ed25519/HybridEdKeyPair.hpp +5 -9
  28. package/cpp/hash/HybridHash.cpp +5 -7
  29. package/cpp/hkdf/HybridHkdf.cpp +6 -4
  30. package/cpp/hmac/HybridHmac.cpp +4 -6
  31. package/cpp/kmac/HybridKmac.cpp +4 -4
  32. package/cpp/mldsa/HybridMlDsaKeyPair.cpp +37 -49
  33. package/cpp/mlkem/HybridMlKemKeyPair.cpp +39 -43
  34. package/cpp/pbkdf2/HybridPbkdf2.cpp +7 -8
  35. package/cpp/rsa/HybridRsaKeyPair.cpp +5 -8
  36. package/cpp/rsa/HybridRsaKeyPair.hpp +4 -7
  37. package/cpp/scrypt/HybridScrypt.cpp +6 -4
  38. package/cpp/sign/HybridSignHandle.cpp +25 -68
  39. package/cpp/sign/HybridVerifyHandle.cpp +23 -60
  40. package/cpp/utils/HybridUtils.cpp +213 -111
  41. package/cpp/utils/HybridUtils.hpp +9 -2
  42. package/cpp/utils/QuickCryptoUtils.hpp +72 -0
  43. package/deps/simdutf/LICENSE-APACHE +201 -0
  44. package/deps/simdutf/LICENSE-MIT +18 -0
  45. package/deps/simdutf/README.md +2782 -0
  46. package/deps/simdutf/include/simdutf/avx512.h +79 -0
  47. package/deps/simdutf/include/simdutf/base64_implementation.h +158 -0
  48. package/deps/simdutf/include/simdutf/base64_tables.h +887 -0
  49. package/deps/simdutf/include/simdutf/common_defs.h +186 -0
  50. package/deps/simdutf/include/simdutf/compiler_check.h +50 -0
  51. package/deps/simdutf/include/simdutf/constexpr_ptr.h +138 -0
  52. package/deps/simdutf/include/simdutf/encoding_types.h +189 -0
  53. package/deps/simdutf/include/simdutf/error.h +126 -0
  54. package/deps/simdutf/include/simdutf/implementation.h +7081 -0
  55. package/deps/simdutf/include/simdutf/internal/isadetection.h +325 -0
  56. package/deps/simdutf/include/simdutf/portability.h +285 -0
  57. package/deps/simdutf/include/simdutf/scalar/ascii.h +86 -0
  58. package/deps/simdutf/include/simdutf/scalar/atomic_util.h +105 -0
  59. package/deps/simdutf/include/simdutf/scalar/base64.h +911 -0
  60. package/deps/simdutf/include/simdutf/scalar/latin1.h +26 -0
  61. package/deps/simdutf/include/simdutf/scalar/latin1_to_utf16/latin1_to_utf16.h +52 -0
  62. package/deps/simdutf/include/simdutf/scalar/latin1_to_utf32/latin1_to_utf32.h +27 -0
  63. package/deps/simdutf/include/simdutf/scalar/latin1_to_utf8/latin1_to_utf8.h +191 -0
  64. package/deps/simdutf/include/simdutf/scalar/swap_bytes.h +35 -0
  65. package/deps/simdutf/include/simdutf/scalar/utf16.h +226 -0
  66. package/deps/simdutf/include/simdutf/scalar/utf16_to_latin1/utf16_to_latin1.h +108 -0
  67. package/deps/simdutf/include/simdutf/scalar/utf16_to_latin1/valid_utf16_to_latin1.h +40 -0
  68. package/deps/simdutf/include/simdutf/scalar/utf16_to_utf32/utf16_to_utf32.h +86 -0
  69. package/deps/simdutf/include/simdutf/scalar/utf16_to_utf32/valid_utf16_to_utf32.h +44 -0
  70. package/deps/simdutf/include/simdutf/scalar/utf16_to_utf8/utf16_to_utf8.h +295 -0
  71. package/deps/simdutf/include/simdutf/scalar/utf16_to_utf8/valid_utf16_to_utf8.h +91 -0
  72. package/deps/simdutf/include/simdutf/scalar/utf32.h +82 -0
  73. package/deps/simdutf/include/simdutf/scalar/utf32_to_latin1/utf32_to_latin1.h +68 -0
  74. package/deps/simdutf/include/simdutf/scalar/utf32_to_latin1/valid_utf32_to_latin1.h +67 -0
  75. package/deps/simdutf/include/simdutf/scalar/utf32_to_utf16/utf32_to_utf16.h +84 -0
  76. package/deps/simdutf/include/simdutf/scalar/utf32_to_utf16/valid_utf32_to_utf16.h +44 -0
  77. package/deps/simdutf/include/simdutf/scalar/utf32_to_utf8/utf32_to_utf8.h +142 -0
  78. package/deps/simdutf/include/simdutf/scalar/utf32_to_utf8/valid_utf32_to_utf8.h +72 -0
  79. package/deps/simdutf/include/simdutf/scalar/utf8.h +326 -0
  80. package/deps/simdutf/include/simdutf/scalar/utf8_to_latin1/utf8_to_latin1.h +225 -0
  81. package/deps/simdutf/include/simdutf/scalar/utf8_to_latin1/valid_utf8_to_latin1.h +87 -0
  82. package/deps/simdutf/include/simdutf/scalar/utf8_to_utf16/utf8_to_utf16.h +342 -0
  83. package/deps/simdutf/include/simdutf/scalar/utf8_to_utf16/valid_utf8_to_utf16.h +106 -0
  84. package/deps/simdutf/include/simdutf/scalar/utf8_to_utf32/utf8_to_utf32.h +299 -0
  85. package/deps/simdutf/include/simdutf/scalar/utf8_to_utf32/valid_utf8_to_utf32.h +83 -0
  86. package/deps/simdutf/include/simdutf/simdutf_version.h +26 -0
  87. package/deps/simdutf/include/simdutf.h +26 -0
  88. package/deps/simdutf/include/simdutf_c.h +342 -0
  89. package/deps/simdutf/src/arm64/arm_base64.cpp +791 -0
  90. package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf16.cpp +24 -0
  91. package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf32.cpp +24 -0
  92. package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf8.cpp +70 -0
  93. package/deps/simdutf/src/arm64/arm_convert_utf16_to_latin1.cpp +61 -0
  94. package/deps/simdutf/src/arm64/arm_convert_utf16_to_utf32.cpp +185 -0
  95. package/deps/simdutf/src/arm64/arm_convert_utf16_to_utf8.cpp +780 -0
  96. package/deps/simdutf/src/arm64/arm_convert_utf32_to_latin1.cpp +60 -0
  97. package/deps/simdutf/src/arm64/arm_convert_utf32_to_utf16.cpp +208 -0
  98. package/deps/simdutf/src/arm64/arm_convert_utf32_to_utf8.cpp +505 -0
  99. package/deps/simdutf/src/arm64/arm_convert_utf8_to_latin1.cpp +69 -0
  100. package/deps/simdutf/src/arm64/arm_convert_utf8_to_utf16.cpp +313 -0
  101. package/deps/simdutf/src/arm64/arm_convert_utf8_to_utf32.cpp +179 -0
  102. package/deps/simdutf/src/arm64/arm_find.cpp +199 -0
  103. package/deps/simdutf/src/arm64/arm_utf16fix.cpp +185 -0
  104. package/deps/simdutf/src/arm64/arm_validate_utf16.cpp +165 -0
  105. package/deps/simdutf/src/arm64/arm_validate_utf32le.cpp +65 -0
  106. package/deps/simdutf/src/arm64/implementation.cpp +1442 -0
  107. package/deps/simdutf/src/encoding_types.cpp +67 -0
  108. package/deps/simdutf/src/error.cpp +3 -0
  109. package/deps/simdutf/src/fallback/implementation.cpp +589 -0
  110. package/deps/simdutf/src/generic/ascii_validation.h +50 -0
  111. package/deps/simdutf/src/generic/base64.h +233 -0
  112. package/deps/simdutf/src/generic/base64lengths.h +63 -0
  113. package/deps/simdutf/src/generic/buf_block_reader.h +109 -0
  114. package/deps/simdutf/src/generic/find.h +75 -0
  115. package/deps/simdutf/src/generic/utf16/change_endianness.h +24 -0
  116. package/deps/simdutf/src/generic/utf16/count_code_points_bytemask.h +58 -0
  117. package/deps/simdutf/src/generic/utf16/to_well_formed.h +93 -0
  118. package/deps/simdutf/src/generic/utf16/utf32_length_from_utf16.h +15 -0
  119. package/deps/simdutf/src/generic/utf16/utf8_length_from_utf16.h +35 -0
  120. package/deps/simdutf/src/generic/utf16/utf8_length_from_utf16_bytemask.h +199 -0
  121. package/deps/simdutf/src/generic/utf16.h +73 -0
  122. package/deps/simdutf/src/generic/utf32.h +136 -0
  123. package/deps/simdutf/src/generic/utf8/utf16_length_from_utf8_bytemask.h +53 -0
  124. package/deps/simdutf/src/generic/utf8.h +92 -0
  125. package/deps/simdutf/src/generic/utf8_to_latin1/utf8_to_latin1.h +316 -0
  126. package/deps/simdutf/src/generic/utf8_to_latin1/valid_utf8_to_latin1.h +78 -0
  127. package/deps/simdutf/src/generic/utf8_to_utf16/utf8_to_utf16.h +332 -0
  128. package/deps/simdutf/src/generic/utf8_to_utf16/valid_utf8_to_utf16.h +74 -0
  129. package/deps/simdutf/src/generic/utf8_to_utf32/utf8_to_utf32.h +318 -0
  130. package/deps/simdutf/src/generic/utf8_to_utf32/valid_utf8_to_utf32.h +42 -0
  131. package/deps/simdutf/src/generic/utf8_validation/utf8_lookup4_algorithm.h +223 -0
  132. package/deps/simdutf/src/generic/utf8_validation/utf8_validator.h +84 -0
  133. package/deps/simdutf/src/generic/validate_utf16.h +164 -0
  134. package/deps/simdutf/src/generic/validate_utf32.h +99 -0
  135. package/deps/simdutf/src/haswell/avx2_base64.cpp +837 -0
  136. package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf16.cpp +28 -0
  137. package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf32.cpp +20 -0
  138. package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf8.cpp +83 -0
  139. package/deps/simdutf/src/haswell/avx2_convert_utf16_to_latin1.cpp +83 -0
  140. package/deps/simdutf/src/haswell/avx2_convert_utf16_to_utf32.cpp +210 -0
  141. package/deps/simdutf/src/haswell/avx2_convert_utf16_to_utf8.cpp +602 -0
  142. package/deps/simdutf/src/haswell/avx2_convert_utf32_to_latin1.cpp +116 -0
  143. package/deps/simdutf/src/haswell/avx2_convert_utf32_to_utf16.cpp +164 -0
  144. package/deps/simdutf/src/haswell/avx2_convert_utf32_to_utf8.cpp +569 -0
  145. package/deps/simdutf/src/haswell/avx2_convert_utf8_to_latin1.cpp +60 -0
  146. package/deps/simdutf/src/haswell/avx2_convert_utf8_to_utf16.cpp +195 -0
  147. package/deps/simdutf/src/haswell/avx2_convert_utf8_to_utf32.cpp +135 -0
  148. package/deps/simdutf/src/haswell/avx2_utf16fix.cpp +173 -0
  149. package/deps/simdutf/src/haswell/avx2_validate_utf16.cpp +17 -0
  150. package/deps/simdutf/src/haswell/implementation.cpp +1447 -0
  151. package/deps/simdutf/src/icelake/icelake_ascii_validation.inl.cpp +19 -0
  152. package/deps/simdutf/src/icelake/icelake_base64.inl.cpp +630 -0
  153. package/deps/simdutf/src/icelake/icelake_common.inl.cpp +37 -0
  154. package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf16.inl.cpp +36 -0
  155. package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf32.inl.cpp +23 -0
  156. package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf8.inl.cpp +107 -0
  157. package/deps/simdutf/src/icelake/icelake_convert_utf16_to_latin1.inl.cpp +103 -0
  158. package/deps/simdutf/src/icelake/icelake_convert_utf16_to_utf32.inl.cpp +136 -0
  159. package/deps/simdutf/src/icelake/icelake_convert_utf16_to_utf8.inl.cpp +206 -0
  160. package/deps/simdutf/src/icelake/icelake_convert_utf32_to_latin1.inl.cpp +74 -0
  161. package/deps/simdutf/src/icelake/icelake_convert_utf32_to_utf16.inl.cpp +338 -0
  162. package/deps/simdutf/src/icelake/icelake_convert_utf32_to_utf8.inl.cpp +574 -0
  163. package/deps/simdutf/src/icelake/icelake_convert_utf8_to_latin1.inl.cpp +104 -0
  164. package/deps/simdutf/src/icelake/icelake_convert_utf8_to_utf16.inl.cpp +75 -0
  165. package/deps/simdutf/src/icelake/icelake_convert_valid_utf8_to_latin1.inl.cpp +69 -0
  166. package/deps/simdutf/src/icelake/icelake_find.inl.cpp +146 -0
  167. package/deps/simdutf/src/icelake/icelake_from_utf8.inl.cpp +266 -0
  168. package/deps/simdutf/src/icelake/icelake_from_valid_utf8.inl.cpp +136 -0
  169. package/deps/simdutf/src/icelake/icelake_macros.inl.cpp +143 -0
  170. package/deps/simdutf/src/icelake/icelake_utf16fix.cpp +138 -0
  171. package/deps/simdutf/src/icelake/icelake_utf32_validation.inl.cpp +63 -0
  172. package/deps/simdutf/src/icelake/icelake_utf8_common.inl.cpp +753 -0
  173. package/deps/simdutf/src/icelake/icelake_utf8_length_from_utf16.inl.cpp +269 -0
  174. package/deps/simdutf/src/icelake/icelake_utf8_validation.inl.cpp +116 -0
  175. package/deps/simdutf/src/icelake/implementation.cpp +1903 -0
  176. package/deps/simdutf/src/implementation.cpp +2526 -0
  177. package/deps/simdutf/src/lasx/implementation.cpp +1531 -0
  178. package/deps/simdutf/src/lasx/lasx_base64.cpp +695 -0
  179. package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf16.cpp +76 -0
  180. package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf32.cpp +55 -0
  181. package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf8.cpp +65 -0
  182. package/deps/simdutf/src/lasx/lasx_convert_utf16_to_latin1.cpp +64 -0
  183. package/deps/simdutf/src/lasx/lasx_convert_utf16_to_utf32.cpp +183 -0
  184. package/deps/simdutf/src/lasx/lasx_convert_utf16_to_utf8.cpp +550 -0
  185. package/deps/simdutf/src/lasx/lasx_convert_utf32_to_latin1.cpp +73 -0
  186. package/deps/simdutf/src/lasx/lasx_convert_utf32_to_utf16.cpp +218 -0
  187. package/deps/simdutf/src/lasx/lasx_convert_utf32_to_utf8.cpp +589 -0
  188. package/deps/simdutf/src/lasx/lasx_convert_utf8_to_latin1.cpp +72 -0
  189. package/deps/simdutf/src/lasx/lasx_convert_utf8_to_utf16.cpp +296 -0
  190. package/deps/simdutf/src/lasx/lasx_convert_utf8_to_utf32.cpp +190 -0
  191. package/deps/simdutf/src/lasx/lasx_find.cpp +64 -0
  192. package/deps/simdutf/src/lasx/lasx_validate_utf16.cpp +13 -0
  193. package/deps/simdutf/src/lasx/lasx_validate_utf32le.cpp +84 -0
  194. package/deps/simdutf/src/lsx/implementation.cpp +1417 -0
  195. package/deps/simdutf/src/lsx/lsx_base64.cpp +675 -0
  196. package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf16.cpp +39 -0
  197. package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf32.cpp +27 -0
  198. package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf8.cpp +56 -0
  199. package/deps/simdutf/src/lsx/lsx_convert_utf16_to_latin1.cpp +64 -0
  200. package/deps/simdutf/src/lsx/lsx_convert_utf16_to_utf32.cpp +133 -0
  201. package/deps/simdutf/src/lsx/lsx_convert_utf16_to_utf8.cpp +518 -0
  202. package/deps/simdutf/src/lsx/lsx_convert_utf32_to_latin1.cpp +66 -0
  203. package/deps/simdutf/src/lsx/lsx_convert_utf32_to_utf16.cpp +155 -0
  204. package/deps/simdutf/src/lsx/lsx_convert_utf32_to_utf8.cpp +459 -0
  205. package/deps/simdutf/src/lsx/lsx_convert_utf8_to_latin1.cpp +75 -0
  206. package/deps/simdutf/src/lsx/lsx_convert_utf8_to_utf16.cpp +291 -0
  207. package/deps/simdutf/src/lsx/lsx_convert_utf8_to_utf32.cpp +179 -0
  208. package/deps/simdutf/src/lsx/lsx_find.cpp +60 -0
  209. package/deps/simdutf/src/lsx/lsx_validate_utf16.cpp +13 -0
  210. package/deps/simdutf/src/lsx/lsx_validate_utf32le.cpp +68 -0
  211. package/deps/simdutf/src/ppc64/implementation.cpp +992 -0
  212. package/deps/simdutf/src/ppc64/ppc64_base64.cpp +480 -0
  213. package/deps/simdutf/src/ppc64/ppc64_base64_internal_tests.cpp +401 -0
  214. package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf16.cpp +12 -0
  215. package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf32.cpp +12 -0
  216. package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf8.cpp +149 -0
  217. package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_latin1.cpp +67 -0
  218. package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_utf32.cpp +87 -0
  219. package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_utf8.cpp +296 -0
  220. package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_latin1.cpp +57 -0
  221. package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_utf16.cpp +117 -0
  222. package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_utf8.cpp +166 -0
  223. package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_latin1.cpp +69 -0
  224. package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_utf16.cpp +211 -0
  225. package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_utf32.cpp +153 -0
  226. package/deps/simdutf/src/ppc64/ppc64_utf16_to_utf8_tables.h +1011 -0
  227. package/deps/simdutf/src/ppc64/ppc64_utf8_length_from_latin1.cpp +37 -0
  228. package/deps/simdutf/src/ppc64/ppc64_validate_utf16.cpp +19 -0
  229. package/deps/simdutf/src/ppc64/templates.cpp +91 -0
  230. package/deps/simdutf/src/rvv/implementation.cpp +138 -0
  231. package/deps/simdutf/src/rvv/rvv_find.cpp +27 -0
  232. package/deps/simdutf/src/rvv/rvv_helpers.inl.cpp +23 -0
  233. package/deps/simdutf/src/rvv/rvv_latin1_to.inl.cpp +71 -0
  234. package/deps/simdutf/src/rvv/rvv_length_from.inl.cpp +164 -0
  235. package/deps/simdutf/src/rvv/rvv_utf16_to.inl.cpp +399 -0
  236. package/deps/simdutf/src/rvv/rvv_utf16fix.cpp +110 -0
  237. package/deps/simdutf/src/rvv/rvv_utf32_to.inl.cpp +307 -0
  238. package/deps/simdutf/src/rvv/rvv_utf8_to.inl.cpp +435 -0
  239. package/deps/simdutf/src/rvv/rvv_validate.inl.cpp +275 -0
  240. package/deps/simdutf/src/simdutf/arm64/begin.h +2 -0
  241. package/deps/simdutf/src/simdutf/arm64/bitmanipulation.h +34 -0
  242. package/deps/simdutf/src/simdutf/arm64/end.h +2 -0
  243. package/deps/simdutf/src/simdutf/arm64/implementation.h +307 -0
  244. package/deps/simdutf/src/simdutf/arm64/intrinsics.h +10 -0
  245. package/deps/simdutf/src/simdutf/arm64/simd.h +547 -0
  246. package/deps/simdutf/src/simdutf/arm64/simd16-inl.h +403 -0
  247. package/deps/simdutf/src/simdutf/arm64/simd32-inl.h +129 -0
  248. package/deps/simdutf/src/simdutf/arm64/simd64-inl.h +28 -0
  249. package/deps/simdutf/src/simdutf/arm64.h +43 -0
  250. package/deps/simdutf/src/simdutf/fallback/begin.h +1 -0
  251. package/deps/simdutf/src/simdutf/fallback/bitmanipulation.h +13 -0
  252. package/deps/simdutf/src/simdutf/fallback/end.h +1 -0
  253. package/deps/simdutf/src/simdutf/fallback/implementation.h +331 -0
  254. package/deps/simdutf/src/simdutf/fallback.h +42 -0
  255. package/deps/simdutf/src/simdutf/haswell/begin.h +15 -0
  256. package/deps/simdutf/src/simdutf/haswell/bitmanipulation.h +35 -0
  257. package/deps/simdutf/src/simdutf/haswell/end.h +13 -0
  258. package/deps/simdutf/src/simdutf/haswell/implementation.h +338 -0
  259. package/deps/simdutf/src/simdutf/haswell/intrinsics.h +67 -0
  260. package/deps/simdutf/src/simdutf/haswell/simd.h +363 -0
  261. package/deps/simdutf/src/simdutf/haswell/simd16-inl.h +261 -0
  262. package/deps/simdutf/src/simdutf/haswell/simd32-inl.h +111 -0
  263. package/deps/simdutf/src/simdutf/haswell/simd64-inl.h +34 -0
  264. package/deps/simdutf/src/simdutf/haswell.h +63 -0
  265. package/deps/simdutf/src/simdutf/icelake/begin.h +14 -0
  266. package/deps/simdutf/src/simdutf/icelake/bitmanipulation.h +44 -0
  267. package/deps/simdutf/src/simdutf/icelake/end.h +12 -0
  268. package/deps/simdutf/src/simdutf/icelake/implementation.h +346 -0
  269. package/deps/simdutf/src/simdutf/icelake/intrinsics.h +138 -0
  270. package/deps/simdutf/src/simdutf/icelake/simd.h +17 -0
  271. package/deps/simdutf/src/simdutf/icelake/simd16-inl.h +90 -0
  272. package/deps/simdutf/src/simdutf/icelake/simd32-inl.h +47 -0
  273. package/deps/simdutf/src/simdutf/icelake.h +81 -0
  274. package/deps/simdutf/src/simdutf/lasx/begin.h +8 -0
  275. package/deps/simdutf/src/simdutf/lasx/bitmanipulation.h +25 -0
  276. package/deps/simdutf/src/simdutf/lasx/end.h +8 -0
  277. package/deps/simdutf/src/simdutf/lasx/implementation.h +310 -0
  278. package/deps/simdutf/src/simdutf/lasx/intrinsics.h +319 -0
  279. package/deps/simdutf/src/simdutf/lasx/simd.h +551 -0
  280. package/deps/simdutf/src/simdutf/lasx/simd16-inl.h +234 -0
  281. package/deps/simdutf/src/simdutf/lasx/simd32-inl.h +74 -0
  282. package/deps/simdutf/src/simdutf/lasx/simd64-inl.h +52 -0
  283. package/deps/simdutf/src/simdutf/lasx.h +49 -0
  284. package/deps/simdutf/src/simdutf/lsx/begin.h +2 -0
  285. package/deps/simdutf/src/simdutf/lsx/bitmanipulation.h +25 -0
  286. package/deps/simdutf/src/simdutf/lsx/end.h +2 -0
  287. package/deps/simdutf/src/simdutf/lsx/implementation.h +309 -0
  288. package/deps/simdutf/src/simdutf/lsx/intrinsics.h +196 -0
  289. package/deps/simdutf/src/simdutf/lsx/simd.h +421 -0
  290. package/deps/simdutf/src/simdutf/lsx/simd16-inl.h +242 -0
  291. package/deps/simdutf/src/simdutf/lsx/simd32-inl.h +69 -0
  292. package/deps/simdutf/src/simdutf/lsx/simd64-inl.h +50 -0
  293. package/deps/simdutf/src/simdutf/lsx.h +52 -0
  294. package/deps/simdutf/src/simdutf/ppc64/begin.h +1 -0
  295. package/deps/simdutf/src/simdutf/ppc64/bitmanipulation.h +29 -0
  296. package/deps/simdutf/src/simdutf/ppc64/end.h +1 -0
  297. package/deps/simdutf/src/simdutf/ppc64/implementation.h +348 -0
  298. package/deps/simdutf/src/simdutf/ppc64/intrinsics.h +19 -0
  299. package/deps/simdutf/src/simdutf/ppc64/simd.h +177 -0
  300. package/deps/simdutf/src/simdutf/ppc64/simd16-inl.h +327 -0
  301. package/deps/simdutf/src/simdutf/ppc64/simd32-inl.h +247 -0
  302. package/deps/simdutf/src/simdutf/ppc64/simd8-inl.h +618 -0
  303. package/deps/simdutf/src/simdutf/ppc64.h +40 -0
  304. package/deps/simdutf/src/simdutf/rvv/begin.h +7 -0
  305. package/deps/simdutf/src/simdutf/rvv/end.h +7 -0
  306. package/deps/simdutf/src/simdutf/rvv/implementation.h +321 -0
  307. package/deps/simdutf/src/simdutf/rvv/intrinsics.h +131 -0
  308. package/deps/simdutf/src/simdutf/rvv.h +41 -0
  309. package/deps/simdutf/src/simdutf/westmere/begin.h +8 -0
  310. package/deps/simdutf/src/simdutf/westmere/bitmanipulation.h +37 -0
  311. package/deps/simdutf/src/simdutf/westmere/end.h +8 -0
  312. package/deps/simdutf/src/simdutf/westmere/implementation.h +338 -0
  313. package/deps/simdutf/src/simdutf/westmere/intrinsics.h +38 -0
  314. package/deps/simdutf/src/simdutf/westmere/simd.h +379 -0
  315. package/deps/simdutf/src/simdutf/westmere/simd16-inl.h +242 -0
  316. package/deps/simdutf/src/simdutf/westmere/simd32-inl.h +151 -0
  317. package/deps/simdutf/src/simdutf/westmere/simd64-inl.h +33 -0
  318. package/deps/simdutf/src/simdutf/westmere.h +59 -0
  319. package/deps/simdutf/src/simdutf.cpp +152 -0
  320. package/deps/simdutf/src/simdutf_c.cpp +525 -0
  321. package/deps/simdutf/src/tables/utf16_to_utf8_tables.h +768 -0
  322. package/deps/simdutf/src/tables/utf32_to_utf16_tables.h +53 -0
  323. package/deps/simdutf/src/tables/utf8_to_utf16_tables.h +826 -0
  324. package/deps/simdutf/src/westmere/implementation.cpp +1479 -0
  325. package/deps/simdutf/src/westmere/internal/loader.cpp +7 -0
  326. package/deps/simdutf/src/westmere/internal/write_v_u16_11bits_to_utf8.cpp +66 -0
  327. package/deps/simdutf/src/westmere/sse_base64.cpp +672 -0
  328. package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf16.cpp +21 -0
  329. package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf32.cpp +31 -0
  330. package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf8.cpp +71 -0
  331. package/deps/simdutf/src/westmere/sse_convert_utf16_to_latin1.cpp +70 -0
  332. package/deps/simdutf/src/westmere/sse_convert_utf16_to_utf32.cpp +206 -0
  333. package/deps/simdutf/src/westmere/sse_convert_utf16_to_utf8.cpp +504 -0
  334. package/deps/simdutf/src/westmere/sse_convert_utf32_to_latin1.cpp +82 -0
  335. package/deps/simdutf/src/westmere/sse_convert_utf32_to_utf16.cpp +209 -0
  336. package/deps/simdutf/src/westmere/sse_convert_utf32_to_utf8.cpp +589 -0
  337. package/deps/simdutf/src/westmere/sse_convert_utf8_to_latin1.cpp +58 -0
  338. package/deps/simdutf/src/westmere/sse_convert_utf8_to_utf16.cpp +197 -0
  339. package/deps/simdutf/src/westmere/sse_convert_utf8_to_utf32.cpp +141 -0
  340. package/deps/simdutf/src/westmere/sse_utf16fix.cpp +82 -0
  341. package/deps/simdutf/src/westmere/sse_validate_utf16.cpp +17 -0
  342. package/lib/commonjs/argon2.js +51 -2
  343. package/lib/commonjs/argon2.js.map +1 -1
  344. package/lib/commonjs/cipher.js +109 -11
  345. package/lib/commonjs/cipher.js.map +1 -1
  346. package/lib/commonjs/dsa.js +8 -2
  347. package/lib/commonjs/dsa.js.map +1 -1
  348. package/lib/commonjs/hash.js +15 -5
  349. package/lib/commonjs/hash.js.map +1 -1
  350. package/lib/commonjs/hkdf.js +33 -6
  351. package/lib/commonjs/hkdf.js.map +1 -1
  352. package/lib/commonjs/hmac.js +15 -5
  353. package/lib/commonjs/hmac.js.map +1 -1
  354. package/lib/commonjs/keys/publicCipher.js +10 -4
  355. package/lib/commonjs/keys/publicCipher.js.map +1 -1
  356. package/lib/commonjs/random.js +11 -2
  357. package/lib/commonjs/random.js.map +1 -1
  358. package/lib/commonjs/rsa.js +12 -5
  359. package/lib/commonjs/rsa.js.map +1 -1
  360. package/lib/commonjs/scrypt.js +47 -6
  361. package/lib/commonjs/scrypt.js.map +1 -1
  362. package/lib/commonjs/subtle.js +76 -5
  363. package/lib/commonjs/subtle.js.map +1 -1
  364. package/lib/commonjs/utils/cipher.js +18 -7
  365. package/lib/commonjs/utils/cipher.js.map +1 -1
  366. package/lib/commonjs/utils/conversion.js +33 -9
  367. package/lib/commonjs/utils/conversion.js.map +1 -1
  368. package/lib/commonjs/utils/timingSafeEqual.js +7 -2
  369. package/lib/commonjs/utils/timingSafeEqual.js.map +1 -1
  370. package/lib/commonjs/x509certificate.js +6 -6
  371. package/lib/commonjs/x509certificate.js.map +1 -1
  372. package/lib/module/argon2.js +51 -2
  373. package/lib/module/argon2.js.map +1 -1
  374. package/lib/module/cipher.js +109 -11
  375. package/lib/module/cipher.js.map +1 -1
  376. package/lib/module/dsa.js +8 -2
  377. package/lib/module/dsa.js.map +1 -1
  378. package/lib/module/hash.js +15 -5
  379. package/lib/module/hash.js.map +1 -1
  380. package/lib/module/hkdf.js +33 -6
  381. package/lib/module/hkdf.js.map +1 -1
  382. package/lib/module/hmac.js +15 -5
  383. package/lib/module/hmac.js.map +1 -1
  384. package/lib/module/keys/publicCipher.js +10 -4
  385. package/lib/module/keys/publicCipher.js.map +1 -1
  386. package/lib/module/random.js +11 -2
  387. package/lib/module/random.js.map +1 -1
  388. package/lib/module/rsa.js +11 -4
  389. package/lib/module/rsa.js.map +1 -1
  390. package/lib/module/scrypt.js +47 -6
  391. package/lib/module/scrypt.js.map +1 -1
  392. package/lib/module/subtle.js +76 -5
  393. package/lib/module/subtle.js.map +1 -1
  394. package/lib/module/utils/cipher.js +18 -7
  395. package/lib/module/utils/cipher.js.map +1 -1
  396. package/lib/module/utils/conversion.js +33 -9
  397. package/lib/module/utils/conversion.js.map +1 -1
  398. package/lib/module/utils/timingSafeEqual.js +8 -3
  399. package/lib/module/utils/timingSafeEqual.js.map +1 -1
  400. package/lib/module/x509certificate.js +6 -6
  401. package/lib/module/x509certificate.js.map +1 -1
  402. package/lib/typescript/argon2.d.ts.map +1 -1
  403. package/lib/typescript/cipher.d.ts +2 -2
  404. package/lib/typescript/cipher.d.ts.map +1 -1
  405. package/lib/typescript/dsa.d.ts.map +1 -1
  406. package/lib/typescript/hash.d.ts +2 -2
  407. package/lib/typescript/hash.d.ts.map +1 -1
  408. package/lib/typescript/hkdf.d.ts.map +1 -1
  409. package/lib/typescript/hmac.d.ts +2 -2
  410. package/lib/typescript/hmac.d.ts.map +1 -1
  411. package/lib/typescript/index.d.ts +1 -1
  412. package/lib/typescript/index.d.ts.map +1 -1
  413. package/lib/typescript/keys/publicCipher.d.ts.map +1 -1
  414. package/lib/typescript/random.d.ts.map +1 -1
  415. package/lib/typescript/rsa.d.ts.map +1 -1
  416. package/lib/typescript/scrypt.d.ts.map +1 -1
  417. package/lib/typescript/specs/utils.nitro.d.ts +0 -2
  418. package/lib/typescript/specs/utils.nitro.d.ts.map +1 -1
  419. package/lib/typescript/subtle.d.ts.map +1 -1
  420. package/lib/typescript/utils/cipher.d.ts +13 -1
  421. package/lib/typescript/utils/cipher.d.ts.map +1 -1
  422. package/lib/typescript/utils/conversion.d.ts +9 -6
  423. package/lib/typescript/utils/conversion.d.ts.map +1 -1
  424. package/lib/typescript/utils/timingSafeEqual.d.ts.map +1 -1
  425. package/lib/typescript/x509certificate.d.ts.map +1 -1
  426. package/nitrogen/generated/shared/c++/HybridUtilsSpec.cpp +0 -2
  427. package/nitrogen/generated/shared/c++/HybridUtilsSpec.hpp +0 -3
  428. package/package.json +38 -6
  429. package/src/argon2.ts +80 -2
  430. package/src/cipher.ts +139 -15
  431. package/src/dsa.ts +11 -2
  432. package/src/hash.ts +17 -7
  433. package/src/hkdf.ts +44 -6
  434. package/src/hmac.ts +17 -7
  435. package/src/keys/publicCipher.ts +10 -4
  436. package/src/random.ts +11 -2
  437. package/src/rsa.ts +18 -4
  438. package/src/scrypt.ts +73 -6
  439. package/src/specs/utils.nitro.ts +0 -2
  440. package/src/subtle.ts +90 -8
  441. package/src/utils/cipher.ts +30 -8
  442. package/src/utils/conversion.ts +58 -20
  443. package/src/utils/timingSafeEqual.ts +8 -3
  444. package/src/x509certificate.ts +5 -6
  445. package/deps/blake3/.cargo/config.toml +0 -2
  446. package/deps/blake3/.git-blame-ignore-revs +0 -2
  447. package/deps/blake3/.github/workflows/build_b3sum.py +0 -38
  448. package/deps/blake3/.github/workflows/ci.yml +0 -491
  449. package/deps/blake3/.github/workflows/tag.yml +0 -43
  450. package/deps/blake3/.github/workflows/upload_github_release_asset.py +0 -73
  451. package/deps/blake3/CONTRIBUTING.md +0 -31
  452. package/deps/blake3/Cargo.toml +0 -135
  453. package/deps/blake3/b3sum/Cargo.lock +0 -513
  454. package/deps/blake3/b3sum/Cargo.toml +0 -26
  455. package/deps/blake3/b3sum/README.md +0 -72
  456. package/deps/blake3/b3sum/src/main.rs +0 -564
  457. package/deps/blake3/b3sum/src/unit_tests.rs +0 -235
  458. package/deps/blake3/b3sum/tests/cli_tests.rs +0 -680
  459. package/deps/blake3/b3sum/what_does_check_do.md +0 -176
  460. package/deps/blake3/benches/bench.rs +0 -623
  461. package/deps/blake3/build.rs +0 -389
  462. package/deps/blake3/c/CMakeLists.txt +0 -383
  463. package/deps/blake3/c/CMakePresets.json +0 -73
  464. package/deps/blake3/c/Makefile.testing +0 -82
  465. package/deps/blake3/c/blake3-config.cmake.in +0 -14
  466. package/deps/blake3/c/blake3_avx2.c +0 -326
  467. package/deps/blake3/c/blake3_avx2_x86-64_unix.S +0 -1815
  468. package/deps/blake3/c/blake3_avx2_x86-64_windows_gnu.S +0 -1817
  469. package/deps/blake3/c/blake3_avx2_x86-64_windows_msvc.asm +0 -1828
  470. package/deps/blake3/c/blake3_avx512.c +0 -1388
  471. package/deps/blake3/c/blake3_avx512_x86-64_unix.S +0 -4824
  472. package/deps/blake3/c/blake3_avx512_x86-64_windows_gnu.S +0 -2615
  473. package/deps/blake3/c/blake3_avx512_x86-64_windows_msvc.asm +0 -2634
  474. package/deps/blake3/c/blake3_c_rust_bindings/Cargo.toml +0 -32
  475. package/deps/blake3/c/blake3_c_rust_bindings/README.md +0 -4
  476. package/deps/blake3/c/blake3_c_rust_bindings/benches/bench.rs +0 -477
  477. package/deps/blake3/c/blake3_c_rust_bindings/build.rs +0 -253
  478. package/deps/blake3/c/blake3_c_rust_bindings/cross_test.sh +0 -31
  479. package/deps/blake3/c/blake3_c_rust_bindings/src/lib.rs +0 -333
  480. package/deps/blake3/c/blake3_c_rust_bindings/src/test.rs +0 -696
  481. package/deps/blake3/c/blake3_sse2.c +0 -566
  482. package/deps/blake3/c/blake3_sse2_x86-64_unix.S +0 -2291
  483. package/deps/blake3/c/blake3_sse2_x86-64_windows_gnu.S +0 -2332
  484. package/deps/blake3/c/blake3_sse2_x86-64_windows_msvc.asm +0 -2350
  485. package/deps/blake3/c/blake3_sse41.c +0 -560
  486. package/deps/blake3/c/blake3_sse41_x86-64_unix.S +0 -2028
  487. package/deps/blake3/c/blake3_sse41_x86-64_windows_gnu.S +0 -2069
  488. package/deps/blake3/c/blake3_sse41_x86-64_windows_msvc.asm +0 -2089
  489. package/deps/blake3/c/blake3_tbb.cpp +0 -37
  490. package/deps/blake3/c/dependencies/CMakeLists.txt +0 -3
  491. package/deps/blake3/c/dependencies/tbb/CMakeLists.txt +0 -28
  492. package/deps/blake3/c/example.c +0 -36
  493. package/deps/blake3/c/example_tbb.c +0 -57
  494. package/deps/blake3/c/libblake3.pc.in +0 -12
  495. package/deps/blake3/c/main.c +0 -166
  496. package/deps/blake3/c/test.py +0 -97
  497. package/deps/blake3/media/B3.svg +0 -70
  498. package/deps/blake3/media/BLAKE3.svg +0 -85
  499. package/deps/blake3/media/speed.svg +0 -1474
  500. package/deps/blake3/reference_impl/Cargo.toml +0 -8
  501. package/deps/blake3/reference_impl/README.md +0 -14
  502. package/deps/blake3/reference_impl/reference_impl.rs +0 -374
  503. package/deps/blake3/src/ffi_avx2.rs +0 -65
  504. package/deps/blake3/src/ffi_avx512.rs +0 -169
  505. package/deps/blake3/src/ffi_neon.rs +0 -82
  506. package/deps/blake3/src/ffi_sse2.rs +0 -126
  507. package/deps/blake3/src/ffi_sse41.rs +0 -126
  508. package/deps/blake3/src/guts.rs +0 -60
  509. package/deps/blake3/src/hazmat.rs +0 -704
  510. package/deps/blake3/src/io.rs +0 -64
  511. package/deps/blake3/src/join.rs +0 -92
  512. package/deps/blake3/src/lib.rs +0 -1835
  513. package/deps/blake3/src/platform.rs +0 -587
  514. package/deps/blake3/src/portable.rs +0 -198
  515. package/deps/blake3/src/rust_avx2.rs +0 -474
  516. package/deps/blake3/src/rust_sse2.rs +0 -775
  517. package/deps/blake3/src/rust_sse41.rs +0 -766
  518. package/deps/blake3/src/test.rs +0 -1049
  519. package/deps/blake3/src/traits.rs +0 -227
  520. package/deps/blake3/src/wasm32_simd.rs +0 -794
  521. package/deps/blake3/test_vectors/Cargo.toml +0 -19
  522. package/deps/blake3/test_vectors/cross_test.sh +0 -25
  523. package/deps/blake3/test_vectors/src/bin/generate.rs +0 -4
  524. package/deps/blake3/test_vectors/src/lib.rs +0 -350
  525. package/deps/blake3/test_vectors/test_vectors.json +0 -217
  526. package/deps/blake3/tools/compiler_version/Cargo.toml +0 -7
  527. package/deps/blake3/tools/compiler_version/build.rs +0 -6
  528. package/deps/blake3/tools/compiler_version/src/main.rs +0 -27
  529. package/deps/blake3/tools/instruction_set_support/Cargo.toml +0 -6
  530. package/deps/blake3/tools/instruction_set_support/src/main.rs +0 -10
  531. package/deps/blake3/tools/release.md +0 -16
  532. package/deps/ncrypto/.bazelignore +0 -4
  533. package/deps/ncrypto/.bazelrc +0 -1
  534. package/deps/ncrypto/.bazelversion +0 -1
  535. package/deps/ncrypto/.clang-format +0 -111
  536. package/deps/ncrypto/.github/workflows/bazel.yml +0 -58
  537. package/deps/ncrypto/.github/workflows/commitlint.yml +0 -16
  538. package/deps/ncrypto/.github/workflows/linter.yml +0 -38
  539. package/deps/ncrypto/.github/workflows/macos.yml +0 -43
  540. package/deps/ncrypto/.github/workflows/release-please.yml +0 -16
  541. package/deps/ncrypto/.github/workflows/ubuntu.yml +0 -128
  542. package/deps/ncrypto/.github/workflows/visual-studio.yml +0 -49
  543. package/deps/ncrypto/.python-version +0 -1
  544. package/deps/ncrypto/.release-please-manifest.json +0 -3
  545. package/deps/ncrypto/BUILD.bazel +0 -44
  546. package/deps/ncrypto/CHANGELOG.md +0 -37
  547. package/deps/ncrypto/CMakeLists.txt +0 -79
  548. package/deps/ncrypto/MODULE.bazel +0 -16
  549. package/deps/ncrypto/MODULE.bazel.lock +0 -461
  550. package/deps/ncrypto/cmake/CPM.cmake +0 -1225
  551. package/deps/ncrypto/cmake/ncrypto-flags.cmake +0 -17
  552. package/deps/ncrypto/ncrypto.pc.in +0 -10
  553. package/deps/ncrypto/patches/0001-Expose-libdecrepit-so-NodeJS-can-use-it-for-ncrypto.patch +0 -28
  554. package/deps/ncrypto/pyproject.toml +0 -38
  555. package/deps/ncrypto/release-please-config.json +0 -11
  556. package/deps/ncrypto/src/CMakeLists.txt +0 -40
  557. package/deps/ncrypto/tests/BUILD.bazel +0 -11
  558. package/deps/ncrypto/tests/CMakeLists.txt +0 -7
  559. package/deps/ncrypto/tests/basic.cpp +0 -856
  560. package/deps/ncrypto/tools/run-clang-format.sh +0 -42
  561. package/lib/tsconfig.tsbuildinfo +0 -1
@@ -0,0 +1,26 @@
1
+ #ifndef SIMDUTF_LATIN1_H
2
+ #define SIMDUTF_LATIN1_H
3
+
4
+ namespace simdutf {
5
+ namespace scalar {
6
+ namespace {
7
+ namespace latin1 {
8
+
9
+ simdutf_really_inline size_t utf8_length_from_latin1(const char *buf,
10
+ size_t len) {
11
+ const uint8_t *c = reinterpret_cast<const uint8_t *>(buf);
12
+ size_t answer = 0;
13
+ for (size_t i = 0; i < len; i++) {
14
+ if ((c[i] >> 7)) {
15
+ answer++;
16
+ }
17
+ }
18
+ return answer + len;
19
+ }
20
+
21
+ } // namespace latin1
22
+ } // unnamed namespace
23
+ } // namespace scalar
24
+ } // namespace simdutf
25
+
26
+ #endif
@@ -0,0 +1,52 @@
1
+ #ifndef SIMDUTF_LATIN1_TO_UTF16_H
2
+ #define SIMDUTF_LATIN1_TO_UTF16_H
3
+
4
+ namespace simdutf {
5
+ namespace scalar {
6
+ namespace {
7
+ namespace latin1_to_utf16 {
8
+
9
+ template <endianness big_endian, typename InputPtr>
10
+ #if SIMDUTF_CPLUSPLUS20
11
+ requires simdutf::detail::indexes_into_byte_like<InputPtr>
12
+ #endif
13
+ simdutf_constexpr23 size_t convert(InputPtr data, size_t len,
14
+ char16_t *utf16_output) {
15
+ size_t pos = 0;
16
+ char16_t *start{utf16_output};
17
+
18
+ while (pos < len) {
19
+ uint16_t word =
20
+ uint8_t(data[pos]); // extend Latin-1 char to 16-bit Unicode code point
21
+ *utf16_output++ =
22
+ char16_t(match_system(big_endian) ? word : u16_swap_bytes(word));
23
+ pos++;
24
+ }
25
+
26
+ return utf16_output - start;
27
+ }
28
+
29
+ template <endianness big_endian>
30
+ inline result convert_with_errors(const char *buf, size_t len,
31
+ char16_t *utf16_output) {
32
+ const uint8_t *data = reinterpret_cast<const uint8_t *>(buf);
33
+ size_t pos = 0;
34
+ char16_t *start{utf16_output};
35
+
36
+ while (pos < len) {
37
+ uint16_t word =
38
+ uint16_t(data[pos]); // extend Latin-1 char to 16-bit Unicode code point
39
+ *utf16_output++ =
40
+ char16_t(match_system(big_endian) ? word : u16_swap_bytes(word));
41
+ pos++;
42
+ }
43
+
44
+ return result(error_code::SUCCESS, utf16_output - start);
45
+ }
46
+
47
+ } // namespace latin1_to_utf16
48
+ } // unnamed namespace
49
+ } // namespace scalar
50
+ } // namespace simdutf
51
+
52
+ #endif
@@ -0,0 +1,27 @@
1
+ #ifndef SIMDUTF_LATIN1_TO_UTF32_H
2
+ #define SIMDUTF_LATIN1_TO_UTF32_H
3
+
4
+ namespace simdutf {
5
+ namespace scalar {
6
+ namespace {
7
+ namespace latin1_to_utf32 {
8
+
9
+ template <typename InputPtr>
10
+ #if SIMDUTF_CPLUSPLUS20
11
+ requires simdutf::detail::indexes_into_byte_like<InputPtr>
12
+ #endif
13
+ simdutf_constexpr23 size_t convert(InputPtr data, size_t len,
14
+ char32_t *utf32_output) {
15
+ char32_t *start{utf32_output};
16
+ for (size_t i = 0; i < len; i++) {
17
+ *utf32_output++ = uint8_t(data[i]);
18
+ }
19
+ return utf32_output - start;
20
+ }
21
+
22
+ } // namespace latin1_to_utf32
23
+ } // unnamed namespace
24
+ } // namespace scalar
25
+ } // namespace simdutf
26
+
27
+ #endif
@@ -0,0 +1,191 @@
1
+ #ifndef SIMDUTF_LATIN1_TO_UTF8_H
2
+ #define SIMDUTF_LATIN1_TO_UTF8_H
3
+
4
+ namespace simdutf {
5
+ namespace scalar {
6
+ namespace {
7
+ namespace latin1_to_utf8 {
8
+
9
+ template <typename InputPtr, typename OutputPtr>
10
+ #if SIMDUTF_CPLUSPLUS20
11
+ requires(simdutf::detail::indexes_into_byte_like<InputPtr> &&
12
+ simdutf::detail::index_assignable_from_char<OutputPtr>)
13
+ #endif
14
+ simdutf_constexpr23 size_t convert(InputPtr data, size_t len,
15
+ OutputPtr utf8_output) {
16
+ // const unsigned char *data = reinterpret_cast<const unsigned char *>(buf);
17
+ size_t pos = 0;
18
+ size_t utf8_pos = 0;
19
+
20
+ while (pos < len) {
21
+ #if SIMDUTF_CPLUSPLUS23
22
+ if !consteval
23
+ #endif
24
+ {
25
+ // try to convert the next block of 16 ASCII bytes
26
+ if (pos + 16 <= len) { // if it is safe to read 16 more bytes, check that
27
+ // they are ascii
28
+ uint64_t v1;
29
+ ::memcpy(&v1, data + pos, sizeof(uint64_t));
30
+ uint64_t v2;
31
+ ::memcpy(&v2, data + pos + sizeof(uint64_t), sizeof(uint64_t));
32
+ uint64_t v{v1 |
33
+ v2}; // We are only interested in these bits: 1000 1000 1000
34
+ // 1000, so it makes sense to concatenate everything
35
+ if ((v & 0x8080808080808080) ==
36
+ 0) { // if NONE of these are set, e.g. all of them are zero, then
37
+ // everything is ASCII
38
+ size_t final_pos = pos + 16;
39
+ while (pos < final_pos) {
40
+ utf8_output[utf8_pos++] = char(data[pos]);
41
+ pos++;
42
+ }
43
+ continue;
44
+ }
45
+ } // if (pos + 16 <= len)
46
+ } // !consteval scope
47
+
48
+ unsigned char byte = data[pos];
49
+ if ((byte & 0x80) == 0) { // if ASCII
50
+ // will generate one UTF-8 bytes
51
+ utf8_output[utf8_pos++] = char(byte);
52
+ pos++;
53
+ } else {
54
+ // will generate two UTF-8 bytes
55
+ utf8_output[utf8_pos++] = char((byte >> 6) | 0b11000000);
56
+ utf8_output[utf8_pos++] = char((byte & 0b111111) | 0b10000000);
57
+ pos++;
58
+ }
59
+ } // while
60
+ return utf8_pos;
61
+ }
62
+
63
+ simdutf_really_inline size_t convert(const char *buf, size_t len,
64
+ char *utf8_output) {
65
+ return convert(reinterpret_cast<const unsigned char *>(buf), len,
66
+ utf8_output);
67
+ }
68
+
69
+ inline size_t convert_safe(const char *buf, size_t len, char *utf8_output,
70
+ size_t utf8_len) {
71
+ const unsigned char *data = reinterpret_cast<const unsigned char *>(buf);
72
+ size_t pos = 0;
73
+ size_t skip_pos = 0;
74
+ size_t utf8_pos = 0;
75
+ while (pos < len && utf8_pos < utf8_len) {
76
+ // try to convert the next block of 16 ASCII bytes
77
+ if (pos >= skip_pos && pos + 16 <= len &&
78
+ utf8_pos + 16 <= utf8_len) { // if it is safe to read 16 more bytes,
79
+ // check that they are ascii
80
+ uint64_t v1;
81
+ ::memcpy(&v1, data + pos, sizeof(uint64_t));
82
+ uint64_t v2;
83
+ ::memcpy(&v2, data + pos + sizeof(uint64_t), sizeof(uint64_t));
84
+ uint64_t v{v1 |
85
+ v2}; // We are only interested in these bits: 1000 1000 1000
86
+ // 1000, so it makes sense to concatenate everything
87
+ if ((v & 0x8080808080808080) ==
88
+ 0) { // if NONE of these are set, e.g. all of them are zero, then
89
+ // everything is ASCII
90
+ ::memcpy(utf8_output + utf8_pos, buf + pos, 16);
91
+ utf8_pos += 16;
92
+ pos += 16;
93
+ } else {
94
+ // At least one of the next 16 bytes are not ASCII, we will process them
95
+ // one by one
96
+ skip_pos = pos + 16;
97
+ }
98
+ } else {
99
+ const auto byte = data[pos];
100
+ if ((byte & 0x80) == 0) { // if ASCII
101
+ // will generate one UTF-8 bytes
102
+ utf8_output[utf8_pos++] = char(byte);
103
+ pos++;
104
+ } else if (utf8_pos + 2 <= utf8_len) {
105
+ // will generate two UTF-8 bytes
106
+ utf8_output[utf8_pos++] = char((byte >> 6) | 0b11000000);
107
+ utf8_output[utf8_pos++] = char((byte & 0b111111) | 0b10000000);
108
+ pos++;
109
+ } else {
110
+ break;
111
+ }
112
+ }
113
+ }
114
+ return utf8_pos;
115
+ }
116
+
117
+ template <typename InputPtr, typename OutputPtr>
118
+ #if SIMDUTF_CPLUSPLUS20
119
+ requires(simdutf::detail::indexes_into_byte_like<InputPtr> &&
120
+ simdutf::detail::index_assignable_from_char<OutputPtr>)
121
+ #endif
122
+ simdutf_constexpr23 size_t convert_safe_constexpr(InputPtr data, size_t len,
123
+ OutputPtr utf8_output,
124
+ size_t utf8_len) {
125
+ size_t pos = 0;
126
+ size_t utf8_pos = 0;
127
+ while (pos < len && utf8_pos < utf8_len) {
128
+ const unsigned char byte = data[pos];
129
+ if ((byte & 0x80) == 0) { // if ASCII
130
+ // will generate one UTF-8 bytes
131
+ utf8_output[utf8_pos++] = char(byte);
132
+ pos++;
133
+ } else if (utf8_pos + 2 <= utf8_len) {
134
+ // will generate two UTF-8 bytes
135
+ utf8_output[utf8_pos++] = char((byte >> 6) | 0b11000000);
136
+ utf8_output[utf8_pos++] = char((byte & 0b111111) | 0b10000000);
137
+ pos++;
138
+ } else {
139
+ break;
140
+ }
141
+ }
142
+ return utf8_pos;
143
+ }
144
+
145
+ template <typename InputPtr>
146
+ #if SIMDUTF_CPLUSPLUS20
147
+ requires simdutf::detail::indexes_into_byte_like<InputPtr>
148
+ #endif
149
+ simdutf_constexpr23 simdutf_warn_unused size_t
150
+ utf8_length_from_latin1(InputPtr input, size_t length) noexcept {
151
+ size_t answer = length;
152
+ size_t i = 0;
153
+
154
+ #if SIMDUTF_CPLUSPLUS23
155
+ if !consteval
156
+ #endif
157
+ {
158
+ auto pop = [](uint64_t v) {
159
+ return (size_t)(((v >> 7) & UINT64_C(0x0101010101010101)) *
160
+ UINT64_C(0x0101010101010101) >>
161
+ 56);
162
+ };
163
+ for (; i + 32 <= length; i += 32) {
164
+ uint64_t v;
165
+ memcpy(&v, input + i, 8);
166
+ answer += pop(v);
167
+ memcpy(&v, input + i + 8, sizeof(v));
168
+ answer += pop(v);
169
+ memcpy(&v, input + i + 16, sizeof(v));
170
+ answer += pop(v);
171
+ memcpy(&v, input + i + 24, sizeof(v));
172
+ answer += pop(v);
173
+ }
174
+ for (; i + 8 <= length; i += 8) {
175
+ uint64_t v;
176
+ memcpy(&v, input + i, sizeof(v));
177
+ answer += pop(v);
178
+ }
179
+ } // !consteval scope
180
+ for (; i + 1 <= length; i += 1) {
181
+ answer += static_cast<uint8_t>(input[i]) >> 7;
182
+ }
183
+ return answer;
184
+ }
185
+
186
+ } // namespace latin1_to_utf8
187
+ } // unnamed namespace
188
+ } // namespace scalar
189
+ } // namespace simdutf
190
+
191
+ #endif
@@ -0,0 +1,35 @@
1
+ #ifndef SIMDUTF_SWAP_BYTES_H
2
+ #define SIMDUTF_SWAP_BYTES_H
3
+
4
+ namespace simdutf {
5
+ namespace scalar {
6
+
7
+ constexpr inline simdutf_warn_unused uint16_t
8
+ u16_swap_bytes(const uint16_t word) {
9
+ return uint16_t((word >> 8) | (word << 8));
10
+ }
11
+
12
+ constexpr inline simdutf_warn_unused uint32_t
13
+ u32_swap_bytes(const uint32_t word) {
14
+ return ((word >> 24) & 0xff) | // move byte 3 to byte 0
15
+ ((word << 8) & 0xff0000) | // move byte 1 to byte 2
16
+ ((word >> 8) & 0xff00) | // move byte 2 to byte 1
17
+ ((word << 24) & 0xff000000); // byte 0 to byte 3
18
+ }
19
+
20
+ namespace utf32 {
21
+ template <endianness big_endian> constexpr uint32_t swap_if_needed(uint32_t c) {
22
+ return !match_system(big_endian) ? scalar::u32_swap_bytes(c) : c;
23
+ }
24
+ } // namespace utf32
25
+
26
+ namespace utf16 {
27
+ template <endianness big_endian> constexpr uint16_t swap_if_needed(uint16_t c) {
28
+ return !match_system(big_endian) ? scalar::u16_swap_bytes(c) : c;
29
+ }
30
+ } // namespace utf16
31
+
32
+ } // namespace scalar
33
+ } // namespace simdutf
34
+
35
+ #endif
@@ -0,0 +1,226 @@
1
+ #ifndef SIMDUTF_UTF16_H
2
+ #define SIMDUTF_UTF16_H
3
+
4
+ namespace simdutf {
5
+ namespace scalar {
6
+ namespace utf16 {
7
+
8
+ template <endianness big_endian>
9
+ simdutf_warn_unused simdutf_constexpr23 bool
10
+ validate_as_ascii(const char16_t *data, size_t len) noexcept {
11
+ for (size_t pos = 0; pos < len; pos++) {
12
+ char16_t word = scalar::utf16::swap_if_needed<big_endian>(data[pos]);
13
+ if (word >= 0x80) {
14
+ return false;
15
+ }
16
+ }
17
+ return true;
18
+ }
19
+
20
+ template <endianness big_endian>
21
+ inline simdutf_warn_unused simdutf_constexpr23 bool
22
+ validate(const char16_t *data, size_t len) noexcept {
23
+ uint64_t pos = 0;
24
+ while (pos < len) {
25
+ char16_t word = scalar::utf16::swap_if_needed<big_endian>(data[pos]);
26
+ if ((word & 0xF800) == 0xD800) {
27
+ if (pos + 1 >= len) {
28
+ return false;
29
+ }
30
+ char16_t diff = char16_t(word - 0xD800);
31
+ if (diff > 0x3FF) {
32
+ return false;
33
+ }
34
+ char16_t next_word = !match_system(big_endian)
35
+ ? u16_swap_bytes(data[pos + 1])
36
+ : data[pos + 1];
37
+ char16_t diff2 = char16_t(next_word - 0xDC00);
38
+ if (diff2 > 0x3FF) {
39
+ return false;
40
+ }
41
+ pos += 2;
42
+ } else {
43
+ pos++;
44
+ }
45
+ }
46
+ return true;
47
+ }
48
+
49
+ template <endianness big_endian>
50
+ inline simdutf_warn_unused simdutf_constexpr23 result
51
+ validate_with_errors(const char16_t *data, size_t len) noexcept {
52
+ size_t pos = 0;
53
+ while (pos < len) {
54
+ char16_t word = scalar::utf16::swap_if_needed<big_endian>(data[pos]);
55
+ if ((word & 0xF800) == 0xD800) {
56
+ if (pos + 1 >= len) {
57
+ return result(error_code::SURROGATE, pos);
58
+ }
59
+ char16_t diff = char16_t(word - 0xD800);
60
+ if (diff > 0x3FF) {
61
+ return result(error_code::SURROGATE, pos);
62
+ }
63
+ char16_t next_word = !match_system(big_endian)
64
+ ? u16_swap_bytes(data[pos + 1])
65
+ : data[pos + 1];
66
+ char16_t diff2 = uint16_t(next_word - 0xDC00);
67
+ if (diff2 > 0x3FF) {
68
+ return result(error_code::SURROGATE, pos);
69
+ }
70
+ pos += 2;
71
+ } else {
72
+ pos++;
73
+ }
74
+ }
75
+ return result(error_code::SUCCESS, pos);
76
+ }
77
+
78
+ template <endianness big_endian>
79
+ simdutf_constexpr23 size_t count_code_points(const char16_t *p, size_t len) {
80
+ // We are not BOM aware.
81
+ size_t counter{0};
82
+ for (size_t i = 0; i < len; i++) {
83
+ char16_t word = scalar::utf16::swap_if_needed<big_endian>(p[i]);
84
+ counter += ((word & 0xFC00) != 0xDC00);
85
+ }
86
+ return counter;
87
+ }
88
+
89
+ template <endianness big_endian>
90
+ simdutf_constexpr23 size_t utf8_length_from_utf16(const char16_t *p,
91
+ size_t len) {
92
+ // We are not BOM aware.
93
+ size_t counter{0};
94
+ for (size_t i = 0; i < len; i++) {
95
+ char16_t word = scalar::utf16::swap_if_needed<big_endian>(p[i]);
96
+ counter++; // ASCII
97
+ counter += static_cast<size_t>(
98
+ word >
99
+ 0x7F); // non-ASCII is at least 2 bytes, surrogates are 2*2 == 4 bytes
100
+ counter += static_cast<size_t>((word > 0x7FF && word <= 0xD7FF) ||
101
+ (word >= 0xE000)); // three-byte
102
+ }
103
+ return counter;
104
+ }
105
+
106
+ template <endianness big_endian>
107
+ simdutf_constexpr23 size_t utf32_length_from_utf16(const char16_t *p,
108
+ size_t len) {
109
+ // We are not BOM aware.
110
+ size_t counter{0};
111
+ for (size_t i = 0; i < len; i++) {
112
+ char16_t word = scalar::utf16::swap_if_needed<big_endian>(p[i]);
113
+ counter += ((word & 0xFC00) != 0xDC00);
114
+ }
115
+ return counter;
116
+ }
117
+
118
+ simdutf_really_inline simdutf_constexpr23 void
119
+ change_endianness_utf16(const char16_t *input, size_t size, char16_t *output) {
120
+ for (size_t i = 0; i < size; i++) {
121
+ *output++ = char16_t(input[i] >> 8 | input[i] << 8);
122
+ }
123
+ }
124
+
125
+ template <endianness big_endian>
126
+ simdutf_warn_unused simdutf_constexpr23 size_t
127
+ trim_partial_utf16(const char16_t *input, size_t length) {
128
+ if (length == 0) {
129
+ return 0;
130
+ }
131
+ uint16_t last_word = uint16_t(input[length - 1]);
132
+ last_word = scalar::utf16::swap_if_needed<big_endian>(last_word);
133
+ length -= ((last_word & 0xFC00) == 0xD800);
134
+ return length;
135
+ }
136
+
137
+ template <endianness big_endian>
138
+ simdutf_constexpr bool is_high_surrogate(char16_t c) {
139
+ c = scalar::utf16::swap_if_needed<big_endian>(c);
140
+ return (0xd800 <= c && c <= 0xdbff);
141
+ }
142
+
143
+ template <endianness big_endian>
144
+ simdutf_constexpr bool is_low_surrogate(char16_t c) {
145
+ c = scalar::utf16::swap_if_needed<big_endian>(c);
146
+ return (0xdc00 <= c && c <= 0xdfff);
147
+ }
148
+
149
+ simdutf_really_inline constexpr bool high_surrogate(char16_t c) {
150
+ return (0xd800 <= c && c <= 0xdbff);
151
+ }
152
+
153
+ simdutf_really_inline constexpr bool low_surrogate(char16_t c) {
154
+ return (0xdc00 <= c && c <= 0xdfff);
155
+ }
156
+
157
+ template <endianness big_endian>
158
+ simdutf_constexpr23 result
159
+ utf8_length_from_utf16_with_replacement(const char16_t *p, size_t len) {
160
+ bool any_surrogates = false;
161
+ // We are not BOM aware.
162
+ size_t counter{0};
163
+ for (size_t i = 0; i < len; i++) {
164
+ if (is_high_surrogate<big_endian>(p[i])) {
165
+ any_surrogates = true;
166
+ // surrogate pair
167
+ if (i + 1 < len && is_low_surrogate<big_endian>(p[i + 1])) {
168
+ counter += 4;
169
+ i++; // skip low surrogate
170
+ } else {
171
+ counter += 3; // unpaired high surrogate replaced by U+FFFD
172
+ }
173
+ continue;
174
+ } else if (is_low_surrogate<big_endian>(p[i])) {
175
+ any_surrogates = true;
176
+ counter += 3; // unpaired low surrogate replaced by U+FFFD
177
+ continue;
178
+ }
179
+ char16_t word = !match_system(big_endian) ? u16_swap_bytes(p[i]) : p[i];
180
+ counter++; // at least 1 byte
181
+ counter +=
182
+ static_cast<size_t>(word > 0x7F); // non-ASCII is at least 2 bytes
183
+ counter += static_cast<size_t>(word > 0x7FF); // three-byte
184
+ }
185
+ return {any_surrogates ? error_code::SURROGATE : error_code::SUCCESS,
186
+ counter};
187
+ }
188
+
189
+ // variable templates are a C++14 extension
190
+ template <endianness big_endian> constexpr char16_t replacement() {
191
+ return !match_system(big_endian) ? scalar::u16_swap_bytes(0xfffd) : 0xfffd;
192
+ }
193
+
194
+ template <endianness big_endian>
195
+ simdutf_constexpr23 void to_well_formed_utf16(const char16_t *input, size_t len,
196
+ char16_t *output) {
197
+ const char16_t replacement = utf16::replacement<big_endian>();
198
+ bool high_surrogate_prev = false, high_surrogate, low_surrogate;
199
+ size_t i = 0;
200
+ for (; i < len; i++) {
201
+ char16_t c = input[i];
202
+ high_surrogate = is_high_surrogate<big_endian>(c);
203
+ low_surrogate = is_low_surrogate<big_endian>(c);
204
+ if (high_surrogate_prev && !low_surrogate) {
205
+ output[i - 1] = replacement;
206
+ }
207
+
208
+ if (!high_surrogate_prev && low_surrogate) {
209
+ output[i] = replacement;
210
+ } else {
211
+ output[i] = input[i];
212
+ }
213
+ high_surrogate_prev = high_surrogate;
214
+ }
215
+
216
+ /* string may not end with high surrogate */
217
+ if (high_surrogate_prev) {
218
+ output[i - 1] = replacement;
219
+ }
220
+ }
221
+
222
+ } // namespace utf16
223
+ } // namespace scalar
224
+ } // namespace simdutf
225
+
226
+ #endif
@@ -0,0 +1,108 @@
1
+ #ifndef SIMDUTF_UTF16_TO_LATIN1_H
2
+ #define SIMDUTF_UTF16_TO_LATIN1_H
3
+
4
+ #include <cstring> // for std::memcpy
5
+
6
+ namespace simdutf {
7
+ namespace scalar {
8
+ namespace {
9
+ namespace utf16_to_latin1 {
10
+
11
+ template <endianness big_endian, typename InputPtr, typename OutputPtr>
12
+ #if SIMDUTF_CPLUSPLUS20
13
+ requires(simdutf::detail::indexes_into_utf16<InputPtr> &&
14
+ simdutf::detail::index_assignable_from_char<OutputPtr>)
15
+ #endif
16
+ simdutf_constexpr23 size_t convert(InputPtr data, size_t len,
17
+ OutputPtr latin_output) {
18
+ if (len == 0) {
19
+ return 0;
20
+ }
21
+ size_t pos = 0;
22
+ const auto latin_output_start = latin_output;
23
+ uint16_t word = 0;
24
+ uint16_t too_large = 0;
25
+
26
+ while (pos < len) {
27
+ word = !match_system(big_endian) ? u16_swap_bytes(data[pos]) : data[pos];
28
+ too_large |= word;
29
+ *latin_output++ = char(word & 0xFF);
30
+ pos++;
31
+ }
32
+ if ((too_large & 0xFF00) != 0) {
33
+ return 0;
34
+ }
35
+
36
+ return latin_output - latin_output_start;
37
+ }
38
+
39
+ template <endianness big_endian, typename InputPtr, typename OutputPtr>
40
+ #if SIMDUTF_CPLUSPLUS20
41
+ requires(simdutf::detail::indexes_into_utf16<InputPtr> &&
42
+ simdutf::detail::index_assignable_from_char<OutputPtr>)
43
+ #endif
44
+ simdutf_constexpr23 result convert_with_errors(InputPtr data, size_t len,
45
+ OutputPtr latin_output) {
46
+ if (len == 0) {
47
+ return result(error_code::SUCCESS, 0);
48
+ }
49
+ size_t pos = 0;
50
+ auto start = latin_output;
51
+ uint16_t word;
52
+
53
+ while (pos < len) {
54
+ #if SIMDUTF_CPLUSPLUS23
55
+ if !consteval
56
+ #endif
57
+ {
58
+ if (pos + 16 <= len) { // if it is safe to read 32 more bytes, check that
59
+ // they are Latin1
60
+ uint64_t v1, v2, v3, v4;
61
+ ::memcpy(&v1, data + pos, sizeof(uint64_t));
62
+ ::memcpy(&v2, data + pos + 4, sizeof(uint64_t));
63
+ ::memcpy(&v3, data + pos + 8, sizeof(uint64_t));
64
+ ::memcpy(&v4, data + pos + 12, sizeof(uint64_t));
65
+
66
+ if simdutf_constexpr (!match_system(big_endian)) {
67
+ v1 = (v1 >> 8) | (v1 << (64 - 8));
68
+ }
69
+ if simdutf_constexpr (!match_system(big_endian)) {
70
+ v2 = (v2 >> 8) | (v2 << (64 - 8));
71
+ }
72
+ if simdutf_constexpr (!match_system(big_endian)) {
73
+ v3 = (v3 >> 8) | (v3 << (64 - 8));
74
+ }
75
+ if simdutf_constexpr (!match_system(big_endian)) {
76
+ v4 = (v4 >> 8) | (v4 << (64 - 8));
77
+ }
78
+
79
+ if (((v1 | v2 | v3 | v4) & 0xFF00FF00FF00FF00) == 0) {
80
+ size_t final_pos = pos + 16;
81
+ while (pos < final_pos) {
82
+ *latin_output++ = !match_system(big_endian)
83
+ ? char(u16_swap_bytes(data[pos]))
84
+ : char(data[pos]);
85
+ pos++;
86
+ }
87
+ continue;
88
+ }
89
+ }
90
+ }
91
+
92
+ word = !match_system(big_endian) ? u16_swap_bytes(data[pos]) : data[pos];
93
+ if ((word & 0xFF00) == 0) {
94
+ *latin_output++ = char(word & 0xFF);
95
+ pos++;
96
+ } else {
97
+ return result(error_code::TOO_LARGE, pos);
98
+ }
99
+ }
100
+ return result(error_code::SUCCESS, latin_output - start);
101
+ }
102
+
103
+ } // namespace utf16_to_latin1
104
+ } // unnamed namespace
105
+ } // namespace scalar
106
+ } // namespace simdutf
107
+
108
+ #endif