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,186 @@
1
+ #ifndef SIMDUTF_COMMON_DEFS_H
2
+ #define SIMDUTF_COMMON_DEFS_H
3
+
4
+ #include "simdutf/portability.h"
5
+ #include "simdutf/avx512.h"
6
+
7
+ // Sometimes logging is useful, but we want it disabled by default
8
+ // and free of any logging code in release builds.
9
+ #ifdef SIMDUTF_LOGGING
10
+ #include <iostream>
11
+ #define simdutf_log(msg) \
12
+ std::cout << "[" << __FUNCTION__ << "]: " << msg << std::endl \
13
+ << "\t" << __FILE__ << ":" << __LINE__ << std::endl;
14
+ #define simdutf_log_assert(cond, msg) \
15
+ do { \
16
+ if (!(cond)) { \
17
+ std::cerr << "[" << __FUNCTION__ << "]: " << msg << std::endl \
18
+ << "\t" << __FILE__ << ":" << __LINE__ << std::endl; \
19
+ std::abort(); \
20
+ } \
21
+ } while (0)
22
+ #else
23
+ #define simdutf_log(msg)
24
+ #define simdutf_log_assert(cond, msg)
25
+ #endif
26
+
27
+ #if defined(SIMDUTF_REGULAR_VISUAL_STUDIO)
28
+ #define SIMDUTF_DEPRECATED __declspec(deprecated)
29
+
30
+ #define simdutf_really_inline __forceinline // really inline in release mode
31
+ #define simdutf_always_inline __forceinline // always inline, no matter what
32
+ #define simdutf_never_inline __declspec(noinline)
33
+
34
+ #define simdutf_unused
35
+ #define simdutf_warn_unused
36
+
37
+ #ifndef simdutf_likely
38
+ #define simdutf_likely(x) x
39
+ #endif
40
+ #ifndef simdutf_unlikely
41
+ #define simdutf_unlikely(x) x
42
+ #endif
43
+
44
+ #define SIMDUTF_PUSH_DISABLE_WARNINGS __pragma(warning(push))
45
+ #define SIMDUTF_PUSH_DISABLE_ALL_WARNINGS __pragma(warning(push, 0))
46
+ #define SIMDUTF_DISABLE_VS_WARNING(WARNING_NUMBER) \
47
+ __pragma(warning(disable : WARNING_NUMBER))
48
+ // Get rid of Intellisense-only warnings (Code Analysis)
49
+ // Though __has_include is C++17, it is supported in Visual Studio 2017 or
50
+ // better (_MSC_VER>=1910).
51
+ #ifdef __has_include
52
+ #if __has_include(<CppCoreCheck\Warnings.h>)
53
+ #include <CppCoreCheck\Warnings.h>
54
+ #define SIMDUTF_DISABLE_UNDESIRED_WARNINGS \
55
+ SIMDUTF_DISABLE_VS_WARNING(ALL_CPPCORECHECK_WARNINGS)
56
+ #endif
57
+ #endif
58
+
59
+ #ifndef SIMDUTF_DISABLE_UNDESIRED_WARNINGS
60
+ #define SIMDUTF_DISABLE_UNDESIRED_WARNINGS
61
+ #endif
62
+
63
+ #define SIMDUTF_DISABLE_DEPRECATED_WARNING SIMDUTF_DISABLE_VS_WARNING(4996)
64
+ #define SIMDUTF_DISABLE_STRICT_OVERFLOW_WARNING
65
+ #define SIMDUTF_POP_DISABLE_WARNINGS __pragma(warning(pop))
66
+ #define SIMDUTF_DISABLE_UNUSED_WARNING
67
+ #else // SIMDUTF_REGULAR_VISUAL_STUDIO
68
+ #if defined(__OPTIMIZE__) || defined(NDEBUG)
69
+ #define simdutf_really_inline inline __attribute__((always_inline))
70
+ #else
71
+ #define simdutf_really_inline inline
72
+ #endif
73
+ #define simdutf_always_inline \
74
+ inline __attribute__((always_inline)) // always inline, no matter what
75
+ #define SIMDUTF_DEPRECATED __attribute__((deprecated))
76
+ #define simdutf_never_inline inline __attribute__((noinline))
77
+
78
+ #define simdutf_unused __attribute__((unused))
79
+ #define simdutf_warn_unused __attribute__((warn_unused_result))
80
+
81
+ #ifndef simdutf_likely
82
+ #define simdutf_likely(x) __builtin_expect(!!(x), 1)
83
+ #endif
84
+ #ifndef simdutf_unlikely
85
+ #define simdutf_unlikely(x) __builtin_expect(!!(x), 0)
86
+ #endif
87
+ // clang-format off
88
+ #define SIMDUTF_PUSH_DISABLE_WARNINGS _Pragma("GCC diagnostic push")
89
+ // gcc doesn't seem to disable all warnings with all and extra, add warnings
90
+ // here as necessary
91
+ #define SIMDUTF_PUSH_DISABLE_ALL_WARNINGS \
92
+ SIMDUTF_PUSH_DISABLE_WARNINGS \
93
+ SIMDUTF_DISABLE_GCC_WARNING(-Weffc++) \
94
+ SIMDUTF_DISABLE_GCC_WARNING(-Wall) \
95
+ SIMDUTF_DISABLE_GCC_WARNING(-Wconversion) \
96
+ SIMDUTF_DISABLE_GCC_WARNING(-Wextra) \
97
+ SIMDUTF_DISABLE_GCC_WARNING(-Wattributes) \
98
+ SIMDUTF_DISABLE_GCC_WARNING(-Wimplicit-fallthrough) \
99
+ SIMDUTF_DISABLE_GCC_WARNING(-Wnon-virtual-dtor) \
100
+ SIMDUTF_DISABLE_GCC_WARNING(-Wreturn-type) \
101
+ SIMDUTF_DISABLE_GCC_WARNING(-Wshadow) \
102
+ SIMDUTF_DISABLE_GCC_WARNING(-Wunused-parameter) \
103
+ SIMDUTF_DISABLE_GCC_WARNING(-Wunused-variable)
104
+ #define SIMDUTF_PRAGMA(P) _Pragma(#P)
105
+ #define SIMDUTF_DISABLE_GCC_WARNING(WARNING) \
106
+ SIMDUTF_PRAGMA(GCC diagnostic ignored #WARNING)
107
+ #if defined(SIMDUTF_CLANG_VISUAL_STUDIO)
108
+ #define SIMDUTF_DISABLE_UNDESIRED_WARNINGS \
109
+ SIMDUTF_DISABLE_GCC_WARNING(-Wmicrosoft-include)
110
+ #else
111
+ #define SIMDUTF_DISABLE_UNDESIRED_WARNINGS
112
+ #endif
113
+ #define SIMDUTF_DISABLE_DEPRECATED_WARNING \
114
+ SIMDUTF_DISABLE_GCC_WARNING(-Wdeprecated-declarations)
115
+ #define SIMDUTF_DISABLE_STRICT_OVERFLOW_WARNING \
116
+ SIMDUTF_DISABLE_GCC_WARNING(-Wstrict-overflow)
117
+ #define SIMDUTF_POP_DISABLE_WARNINGS _Pragma("GCC diagnostic pop")
118
+ #define SIMDUTF_DISABLE_UNUSED_WARNING \
119
+ SIMDUTF_PUSH_DISABLE_WARNINGS \
120
+ SIMDUTF_DISABLE_GCC_WARNING(-Wunused-function) \
121
+ SIMDUTF_DISABLE_GCC_WARNING(-Wunused-const-variable)
122
+ // clang-format on
123
+
124
+ #endif // MSC_VER
125
+
126
+ // Conditional constexpr macro: expands to constexpr for C++17+, empty otherwise
127
+ #if SIMDUTF_CPLUSPLUS17
128
+ #define simdutf_constexpr constexpr
129
+ #else
130
+ #define simdutf_constexpr
131
+ #endif
132
+
133
+ // Will evaluate to constexpr in C++23 or later. This makes it possible to mark
134
+ // functions constexpr if the "if consteval" feature is available to use.
135
+ #if SIMDUTF_CPLUSPLUS23
136
+ #define simdutf_constexpr23 constexpr
137
+ #else
138
+ #define simdutf_constexpr23
139
+ #endif
140
+
141
+ #ifndef SIMDUTF_DLLIMPORTEXPORT
142
+ #if defined(SIMDUTF_VISUAL_STUDIO) // Visual Studio
143
+ /**
144
+ * Windows users need to do some extra work when building
145
+ * or using a dynamic library (DLL). When building, we need
146
+ * to set SIMDUTF_DLLIMPORTEXPORT to __declspec(dllexport).
147
+ * When *using* the DLL, the user needs to set
148
+ * SIMDUTF_DLLIMPORTEXPORT __declspec(dllimport).
149
+ *
150
+ * Static libraries not need require such work.
151
+ *
152
+ * It does not matter here whether you are using
153
+ * the regular visual studio or clang under visual
154
+ * studio, you still need to handle these issues.
155
+ *
156
+ * Non-Windows systems do not have this complexity.
157
+ */
158
+ #if SIMDUTF_BUILDING_WINDOWS_DYNAMIC_LIBRARY
159
+
160
+ // We set SIMDUTF_BUILDING_WINDOWS_DYNAMIC_LIBRARY when we build a DLL
161
+ // under Windows. It should never happen that both
162
+ // SIMDUTF_BUILDING_WINDOWS_DYNAMIC_LIBRARY and
163
+ // SIMDUTF_USING_WINDOWS_DYNAMIC_LIBRARY are set.
164
+ #define SIMDUTF_DLLIMPORTEXPORT __declspec(dllexport)
165
+ #elif SIMDUTF_USING_WINDOWS_DYNAMIC_LIBRARY
166
+ // Windows user who call a dynamic library should set
167
+ // SIMDUTF_USING_WINDOWS_DYNAMIC_LIBRARY to 1.
168
+
169
+ #define SIMDUTF_DLLIMPORTEXPORT __declspec(dllimport)
170
+ #else
171
+ // We assume by default static linkage
172
+ #define SIMDUTF_DLLIMPORTEXPORT
173
+ #endif
174
+ #else // defined(SIMDUTF_VISUAL_STUDIO)
175
+ // Non-Windows systems do not have this complexity.
176
+ #define SIMDUTF_DLLIMPORTEXPORT
177
+ #endif // defined(SIMDUTF_VISUAL_STUDIO)
178
+ #endif
179
+
180
+ #if SIMDUTF_MAYBE_UNUSED_AVAILABLE
181
+ #define simdutf_maybe_unused [[maybe_unused]]
182
+ #else
183
+ #define simdutf_maybe_unused
184
+ #endif
185
+
186
+ #endif // SIMDUTF_COMMON_DEFS_H
@@ -0,0 +1,50 @@
1
+ #ifndef SIMDUTF_COMPILER_CHECK_H
2
+ #define SIMDUTF_COMPILER_CHECK_H
3
+
4
+ #ifndef __cplusplus
5
+ #error simdutf requires a C++ compiler
6
+ #endif
7
+
8
+ #ifndef SIMDUTF_CPLUSPLUS
9
+ #if defined(_MSVC_LANG) && !defined(__clang__)
10
+ #define SIMDUTF_CPLUSPLUS (_MSC_VER == 1900 ? 201103L : _MSVC_LANG)
11
+ #else
12
+ #define SIMDUTF_CPLUSPLUS __cplusplus
13
+ #endif
14
+ #endif
15
+
16
+ // C++ 26
17
+ #if !defined(SIMDUTF_CPLUSPLUS26) && (SIMDUTF_CPLUSPLUS >= 202602L)
18
+ #define SIMDUTF_CPLUSPLUS26 1
19
+ #endif
20
+
21
+ // C++ 23
22
+ #if !defined(SIMDUTF_CPLUSPLUS23) && (SIMDUTF_CPLUSPLUS >= 202302L)
23
+ #define SIMDUTF_CPLUSPLUS23 1
24
+ #endif
25
+
26
+ // C++ 20
27
+ #if !defined(SIMDUTF_CPLUSPLUS20) && (SIMDUTF_CPLUSPLUS >= 202002L)
28
+ #define SIMDUTF_CPLUSPLUS20 1
29
+ #endif
30
+
31
+ // C++ 17
32
+ #if !defined(SIMDUTF_CPLUSPLUS17) && (SIMDUTF_CPLUSPLUS >= 201703L)
33
+ #define SIMDUTF_CPLUSPLUS17 1
34
+ #endif
35
+
36
+ // C++ 14
37
+ #if !defined(SIMDUTF_CPLUSPLUS14) && (SIMDUTF_CPLUSPLUS >= 201402L)
38
+ #define SIMDUTF_CPLUSPLUS14 1
39
+ #endif
40
+
41
+ // C++ 11
42
+ #if !defined(SIMDUTF_CPLUSPLUS11) && (SIMDUTF_CPLUSPLUS >= 201103L)
43
+ #define SIMDUTF_CPLUSPLUS11 1
44
+ #endif
45
+
46
+ #ifndef SIMDUTF_CPLUSPLUS11
47
+ #error simdutf requires a compiler compliant with the C++11 standard
48
+ #endif
49
+
50
+ #endif // SIMDUTF_COMPILER_CHECK_H
@@ -0,0 +1,138 @@
1
+ #ifndef SIMDUTF_CONSTEXPR_PTR_H
2
+ #define SIMDUTF_CONSTEXPR_PTR_H
3
+
4
+ #include <cstddef>
5
+
6
+ namespace simdutf {
7
+ namespace detail {
8
+ /**
9
+ * The constexpr_ptr class is a workaround for reinterpret_cast not being
10
+ * allowed during constant evaluation.
11
+ */
12
+ template <typename to, typename from>
13
+ requires(sizeof(to) == sizeof(from))
14
+ struct constexpr_ptr {
15
+ const from *p;
16
+
17
+ constexpr explicit constexpr_ptr(const from *ptr) noexcept : p(ptr) {}
18
+
19
+ constexpr to operator*() const noexcept { return static_cast<to>(*p); }
20
+
21
+ constexpr constexpr_ptr &operator++() noexcept {
22
+ ++p;
23
+ return *this;
24
+ }
25
+
26
+ constexpr constexpr_ptr operator++(int) noexcept {
27
+ auto old = *this;
28
+ ++p;
29
+ return old;
30
+ }
31
+
32
+ constexpr constexpr_ptr &operator--() noexcept {
33
+ --p;
34
+ return *this;
35
+ }
36
+
37
+ constexpr constexpr_ptr operator--(int) noexcept {
38
+ auto old = *this;
39
+ --p;
40
+ return old;
41
+ }
42
+
43
+ constexpr constexpr_ptr &operator+=(std::ptrdiff_t n) noexcept {
44
+ p += n;
45
+ return *this;
46
+ }
47
+
48
+ constexpr constexpr_ptr &operator-=(std::ptrdiff_t n) noexcept {
49
+ p -= n;
50
+ return *this;
51
+ }
52
+
53
+ constexpr constexpr_ptr operator+(std::ptrdiff_t n) const noexcept {
54
+ return constexpr_ptr{p + n};
55
+ }
56
+
57
+ constexpr constexpr_ptr operator-(std::ptrdiff_t n) const noexcept {
58
+ return constexpr_ptr{p - n};
59
+ }
60
+
61
+ constexpr std::ptrdiff_t operator-(const constexpr_ptr &o) const noexcept {
62
+ return p - o.p;
63
+ }
64
+
65
+ constexpr to operator[](std::ptrdiff_t n) const noexcept {
66
+ return static_cast<to>(*(p + n));
67
+ }
68
+
69
+ // to prevent compilation errors for memcpy, even if it is never
70
+ // called during constant evaluation
71
+ constexpr operator const void *() const noexcept { return p; }
72
+ };
73
+
74
+ template <typename to, typename from>
75
+ constexpr constexpr_ptr<to, from> constexpr_cast_ptr(from *p) noexcept {
76
+ return constexpr_ptr<to, from>{p};
77
+ }
78
+
79
+ /**
80
+ * helper type for constexpr_writeptr, so it is possible to
81
+ * do "*ptr = val;"
82
+ */
83
+ template <typename SrcType, typename TargetType>
84
+ struct constexpr_write_ptr_proxy {
85
+
86
+ constexpr explicit constexpr_write_ptr_proxy(TargetType *raw) : p(raw) {}
87
+
88
+ constexpr constexpr_write_ptr_proxy &operator=(SrcType v) {
89
+ *p = static_cast<TargetType>(v);
90
+ return *this;
91
+ }
92
+
93
+ TargetType *p;
94
+ };
95
+
96
+ /**
97
+ * helper for working around reinterpret_cast not being allowed during constexpr
98
+ * evaluation. will try to act as a SrcType* but actually write to the pointer
99
+ * given in the constructor, which is of another type TargetType
100
+ */
101
+ template <typename SrcType, typename TargetType> struct constexpr_write_ptr {
102
+ constexpr explicit constexpr_write_ptr(TargetType *raw) : p(raw) {}
103
+
104
+ constexpr constexpr_write_ptr_proxy<SrcType, TargetType> operator*() const {
105
+ return constexpr_write_ptr_proxy<SrcType, TargetType>{p};
106
+ }
107
+
108
+ constexpr constexpr_write_ptr_proxy<SrcType, TargetType>
109
+ operator[](std::ptrdiff_t n) const {
110
+ return constexpr_write_ptr_proxy<SrcType, TargetType>{p + n};
111
+ }
112
+
113
+ constexpr constexpr_write_ptr &operator++() {
114
+ ++p;
115
+ return *this;
116
+ }
117
+
118
+ constexpr constexpr_write_ptr operator++(int) {
119
+ constexpr_write_ptr old = *this;
120
+ ++p;
121
+ return old;
122
+ }
123
+
124
+ constexpr std::ptrdiff_t operator-(const constexpr_write_ptr &other) const {
125
+ return p - other.p;
126
+ }
127
+
128
+ TargetType *p;
129
+ };
130
+
131
+ template <typename SrcType, typename TargetType>
132
+ constexpr auto constexpr_cast_writeptr(TargetType *raw) {
133
+ return constexpr_write_ptr<SrcType, TargetType>{raw};
134
+ }
135
+
136
+ } // namespace detail
137
+ } // namespace simdutf
138
+ #endif
@@ -0,0 +1,189 @@
1
+ #ifndef SIMDUTF_ENCODING_TYPES_H
2
+ #define SIMDUTF_ENCODING_TYPES_H
3
+ #include <string>
4
+ #include "simdutf/portability.h"
5
+ #include "simdutf/common_defs.h"
6
+
7
+ #if !defined(SIMDUTF_NO_STD_TEXT_ENCODING) && \
8
+ defined(__cpp_lib_text_encoding) && __cpp_lib_text_encoding >= 202306L
9
+ #define SIMDUTF_HAS_STD_TEXT_ENCODING 1
10
+ #include <text_encoding>
11
+ #endif
12
+
13
+ namespace simdutf {
14
+
15
+ enum encoding_type {
16
+ UTF8 = 1, // BOM 0xef 0xbb 0xbf
17
+ UTF16_LE = 2, // BOM 0xff 0xfe
18
+ UTF16_BE = 4, // BOM 0xfe 0xff
19
+ UTF32_LE = 8, // BOM 0xff 0xfe 0x00 0x00
20
+ UTF32_BE = 16, // BOM 0x00 0x00 0xfe 0xff
21
+ Latin1 = 32,
22
+
23
+ unspecified = 0
24
+ };
25
+
26
+ #ifndef SIMDUTF_IS_BIG_ENDIAN
27
+ #error "SIMDUTF_IS_BIG_ENDIAN needs to be defined."
28
+ #endif
29
+
30
+ enum endianness {
31
+ LITTLE = 0,
32
+ BIG = 1,
33
+ NATIVE =
34
+ #if SIMDUTF_IS_BIG_ENDIAN
35
+ BIG
36
+ #else
37
+ LITTLE
38
+ #endif
39
+ };
40
+
41
+ simdutf_warn_unused simdutf_really_inline constexpr bool
42
+ match_system(endianness e) {
43
+ return e == endianness::NATIVE;
44
+ }
45
+
46
+ simdutf_warn_unused std::string to_string(encoding_type bom);
47
+
48
+ // Note that BOM for UTF8 is discouraged.
49
+ namespace BOM {
50
+
51
+ /**
52
+ * Checks for a BOM. If not, returns unspecified
53
+ * @param input the string to process
54
+ * @param length the length of the string in code units
55
+ * @return the corresponding encoding
56
+ */
57
+
58
+ simdutf_warn_unused encoding_type check_bom(const uint8_t *byte, size_t length);
59
+ simdutf_warn_unused encoding_type check_bom(const char *byte, size_t length);
60
+ /**
61
+ * Returns the size, in bytes, of the BOM for a given encoding type.
62
+ * Note that UTF8 BOM are discouraged.
63
+ * @param bom the encoding type
64
+ * @return the size in bytes of the corresponding BOM
65
+ */
66
+ simdutf_warn_unused size_t bom_byte_size(encoding_type bom);
67
+
68
+ } // namespace BOM
69
+
70
+ #ifdef SIMDUTF_HAS_STD_TEXT_ENCODING
71
+ /**
72
+ * Convert a simdutf encoding type to a std::text_encoding.
73
+ *
74
+ * @param enc the simdutf encoding type
75
+ * @return the corresponding std::text_encoding, or
76
+ * std::text_encoding::id::unknown for unspecified/unsupported
77
+ */
78
+ simdutf_warn_unused constexpr std::text_encoding
79
+ to_std_encoding(encoding_type enc) noexcept {
80
+ switch (enc) {
81
+ case UTF8:
82
+ return std::text_encoding(std::text_encoding::id::UTF8);
83
+ case UTF16_LE:
84
+ return std::text_encoding(std::text_encoding::id::UTF16LE);
85
+ case UTF16_BE:
86
+ return std::text_encoding(std::text_encoding::id::UTF16BE);
87
+ case UTF32_LE:
88
+ return std::text_encoding(std::text_encoding::id::UTF32LE);
89
+ case UTF32_BE:
90
+ return std::text_encoding(std::text_encoding::id::UTF32BE);
91
+ case Latin1:
92
+ return std::text_encoding(std::text_encoding::id::ISOLatin1);
93
+ case unspecified:
94
+ default:
95
+ return std::text_encoding(std::text_encoding::id::unknown);
96
+ }
97
+ }
98
+
99
+ /**
100
+ * Convert a std::text_encoding to a simdutf encoding type.
101
+ *
102
+ * @param enc the std::text_encoding
103
+ * @return the corresponding simdutf encoding type, or
104
+ * encoding_type::unspecified if the encoding is not supported
105
+ */
106
+ simdutf_warn_unused constexpr encoding_type
107
+ from_std_encoding(const std::text_encoding &enc) noexcept {
108
+ switch (enc.mib()) {
109
+ case std::text_encoding::id::UTF8:
110
+ return UTF8;
111
+ case std::text_encoding::id::UTF16LE:
112
+ return UTF16_LE;
113
+ case std::text_encoding::id::UTF16BE:
114
+ return UTF16_BE;
115
+ case std::text_encoding::id::UTF32LE:
116
+ return UTF32_LE;
117
+ case std::text_encoding::id::UTF32BE:
118
+ return UTF32_BE;
119
+ case std::text_encoding::id::ISOLatin1:
120
+ return Latin1;
121
+ default:
122
+ return unspecified;
123
+ }
124
+ }
125
+
126
+ /**
127
+ * Get the native-endian UTF-16 encoding type for this system.
128
+ *
129
+ * @return UTF16_LE on little-endian systems, UTF16_BE on big-endian systems
130
+ */
131
+ simdutf_warn_unused constexpr encoding_type native_utf16_encoding() noexcept {
132
+ #if SIMDUTF_IS_BIG_ENDIAN
133
+ return UTF16_BE;
134
+ #else
135
+ return UTF16_LE;
136
+ #endif
137
+ }
138
+
139
+ /**
140
+ * Get the native-endian UTF-32 encoding type for this system.
141
+ *
142
+ * @return UTF32_LE on little-endian systems, UTF32_BE on big-endian systems
143
+ */
144
+ simdutf_warn_unused constexpr encoding_type native_utf32_encoding() noexcept {
145
+ #if SIMDUTF_IS_BIG_ENDIAN
146
+ return UTF32_BE;
147
+ #else
148
+ return UTF32_LE;
149
+ #endif
150
+ }
151
+
152
+ /**
153
+ * Convert a std::text_encoding to a simdutf encoding type,
154
+ * using native endianness for UTF-16/UTF-32 without explicit endianness.
155
+ *
156
+ * When the input is std::text_encoding::id::UTF16 or UTF32 (without LE/BE
157
+ * suffix), this returns the native-endian simdutf variant.
158
+ *
159
+ * @param enc the std::text_encoding
160
+ * @return the corresponding simdutf encoding type, or
161
+ * encoding_type::unspecified if the encoding is not supported
162
+ */
163
+ simdutf_warn_unused constexpr encoding_type
164
+ from_std_encoding_native(const std::text_encoding &enc) noexcept {
165
+ switch (enc.mib()) {
166
+ case std::text_encoding::id::UTF8:
167
+ return UTF8;
168
+ case std::text_encoding::id::UTF16:
169
+ return native_utf16_encoding();
170
+ case std::text_encoding::id::UTF16LE:
171
+ return UTF16_LE;
172
+ case std::text_encoding::id::UTF16BE:
173
+ return UTF16_BE;
174
+ case std::text_encoding::id::UTF32:
175
+ return native_utf32_encoding();
176
+ case std::text_encoding::id::UTF32LE:
177
+ return UTF32_LE;
178
+ case std::text_encoding::id::UTF32BE:
179
+ return UTF32_BE;
180
+ case std::text_encoding::id::ISOLatin1:
181
+ return Latin1;
182
+ default:
183
+ return unspecified;
184
+ }
185
+ }
186
+ #endif // SIMDUTF_HAS_STD_TEXT_ENCODING
187
+
188
+ } // namespace simdutf
189
+ #endif
@@ -0,0 +1,126 @@
1
+ #ifndef SIMDUTF_ERROR_H
2
+ #define SIMDUTF_ERROR_H
3
+ namespace simdutf {
4
+
5
+ enum error_code {
6
+ SUCCESS = 0,
7
+ HEADER_BITS, // Any byte must have fewer than 5 header bits.
8
+ TOO_SHORT, // The leading byte must be followed by N-1 continuation bytes,
9
+ // where N is the UTF-8 character length This is also the error
10
+ // when the input is truncated.
11
+ TOO_LONG, // We either have too many consecutive continuation bytes or the
12
+ // string starts with a continuation byte.
13
+ OVERLONG, // The decoded character must be above U+7F for two-byte characters,
14
+ // U+7FF for three-byte characters, and U+FFFF for four-byte
15
+ // characters.
16
+ TOO_LARGE, // The decoded character must be less than or equal to
17
+ // U+10FFFF,less than or equal than U+7F for ASCII OR less than
18
+ // equal than U+FF for Latin1
19
+ SURROGATE, // The decoded character must be not be in U+D800...DFFF (UTF-8 or
20
+ // UTF-32)
21
+ // OR
22
+ // a high surrogate must be followed by a low surrogate
23
+ // and a low surrogate must be preceded by a high surrogate
24
+ // (UTF-16)
25
+ // OR
26
+ // there must be no surrogate at all and one is
27
+ // found (Latin1 functions)
28
+ // OR
29
+ // *specifically* for the function
30
+ // utf8_length_from_utf16_with_replacement, a surrogate (whether
31
+ // in error or not) has been found (I.e., whether we are in the
32
+ // Basic Multilingual Plane or not).
33
+ INVALID_BASE64_CHARACTER, // Found a character that cannot be part of a valid
34
+ // base64 string. This may include a misplaced
35
+ // padding character ('=').
36
+ BASE64_INPUT_REMAINDER, // The base64 input terminates with a single
37
+ // character, excluding padding (=). It is also used
38
+ // in strict mode when padding is not adequate.
39
+ BASE64_EXTRA_BITS, // The base64 input terminates with non-zero
40
+ // padding bits.
41
+ OUTPUT_BUFFER_TOO_SMALL, // The provided buffer is too small.
42
+ OTHER // Not related to validation/transcoding.
43
+ };
44
+ #if SIMDUTF_CPLUSPLUS17
45
+ inline std::string_view error_to_string(error_code code) noexcept {
46
+ switch (code) {
47
+ case SUCCESS:
48
+ return "SUCCESS";
49
+ case HEADER_BITS:
50
+ return "HEADER_BITS";
51
+ case TOO_SHORT:
52
+ return "TOO_SHORT";
53
+ case TOO_LONG:
54
+ return "TOO_LONG";
55
+ case OVERLONG:
56
+ return "OVERLONG";
57
+ case TOO_LARGE:
58
+ return "TOO_LARGE";
59
+ case SURROGATE:
60
+ return "SURROGATE";
61
+ case INVALID_BASE64_CHARACTER:
62
+ return "INVALID_BASE64_CHARACTER";
63
+ case BASE64_INPUT_REMAINDER:
64
+ return "BASE64_INPUT_REMAINDER";
65
+ case BASE64_EXTRA_BITS:
66
+ return "BASE64_EXTRA_BITS";
67
+ case OUTPUT_BUFFER_TOO_SMALL:
68
+ return "OUTPUT_BUFFER_TOO_SMALL";
69
+ default:
70
+ return "OTHER";
71
+ }
72
+ }
73
+ #endif
74
+
75
+ struct result {
76
+ error_code error;
77
+ size_t count; // In case of error, indicates the position of the error. In
78
+ // case of success, indicates the number of code units
79
+ // validated/written.
80
+
81
+ simdutf_really_inline simdutf_constexpr23 result() noexcept
82
+ : error{error_code::SUCCESS}, count{0} {}
83
+
84
+ simdutf_really_inline simdutf_constexpr23 result(error_code err,
85
+ size_t pos) noexcept
86
+ : error{err}, count{pos} {}
87
+
88
+ simdutf_really_inline simdutf_constexpr23 bool is_ok() const noexcept {
89
+ return error == error_code::SUCCESS;
90
+ }
91
+
92
+ simdutf_really_inline simdutf_constexpr23 bool is_err() const noexcept {
93
+ return error != error_code::SUCCESS;
94
+ }
95
+ };
96
+
97
+ struct full_result {
98
+ error_code error;
99
+ size_t input_count;
100
+ size_t output_count;
101
+ bool padding_error = false; // true if the error is due to padding, only
102
+ // meaningful when error is not SUCCESS
103
+
104
+ simdutf_really_inline simdutf_constexpr23 full_result() noexcept
105
+ : error{error_code::SUCCESS}, input_count{0}, output_count{0} {}
106
+
107
+ simdutf_really_inline simdutf_constexpr23 full_result(error_code err,
108
+ size_t pos_in,
109
+ size_t pos_out) noexcept
110
+ : error{err}, input_count{pos_in}, output_count{pos_out} {}
111
+ simdutf_really_inline simdutf_constexpr23 full_result(
112
+ error_code err, size_t pos_in, size_t pos_out, bool padding_err) noexcept
113
+ : error{err}, input_count{pos_in}, output_count{pos_out},
114
+ padding_error{padding_err} {}
115
+
116
+ simdutf_really_inline simdutf_constexpr23 operator result() const noexcept {
117
+ if (error == error_code::SUCCESS) {
118
+ return result{error, output_count};
119
+ } else {
120
+ return result{error, input_count};
121
+ }
122
+ }
123
+ };
124
+
125
+ } // namespace simdutf
126
+ #endif