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.
- package/QuickCrypto.podspec +12 -38
- package/README.md +2 -0
- package/android/CMakeLists.txt +3 -0
- package/android/build.gradle +5 -1
- package/cpp/argon2/HybridArgon2.cpp +10 -3
- package/cpp/blake3/HybridBlake3.cpp +5 -3
- package/cpp/cipher/CCMCipher.cpp +29 -16
- package/cpp/cipher/CCMCipher.hpp +2 -4
- package/cpp/cipher/ChaCha20Cipher.cpp +14 -18
- package/cpp/cipher/ChaCha20Cipher.hpp +2 -4
- package/cpp/cipher/ChaCha20Poly1305Cipher.cpp +34 -23
- package/cpp/cipher/ChaCha20Poly1305Cipher.hpp +2 -4
- package/cpp/cipher/GCMCipher.cpp +14 -15
- package/cpp/cipher/HybridCipher.cpp +39 -36
- package/cpp/cipher/HybridCipher.hpp +17 -1
- package/cpp/cipher/HybridRsaCipher.cpp +74 -29
- package/cpp/cipher/OCBCipher.cpp +4 -3
- package/cpp/cipher/XChaCha20Poly1305Cipher.cpp +14 -13
- package/cpp/cipher/XSalsa20Cipher.cpp +72 -6
- package/cpp/cipher/XSalsa20Cipher.hpp +25 -3
- package/cpp/cipher/XSalsa20Poly1305Cipher.cpp +21 -25
- package/cpp/dh/HybridDiffieHellman.cpp +29 -0
- package/cpp/ec/HybridEcKeyPair.cpp +35 -33
- package/cpp/ec/HybridEcKeyPair.hpp +3 -7
- package/cpp/ecdh/HybridECDH.cpp +23 -0
- package/cpp/ed25519/HybridEdKeyPair.cpp +73 -117
- package/cpp/ed25519/HybridEdKeyPair.hpp +5 -9
- package/cpp/hash/HybridHash.cpp +5 -7
- package/cpp/hkdf/HybridHkdf.cpp +6 -4
- package/cpp/hmac/HybridHmac.cpp +4 -6
- package/cpp/kmac/HybridKmac.cpp +4 -4
- package/cpp/mldsa/HybridMlDsaKeyPair.cpp +37 -49
- package/cpp/mlkem/HybridMlKemKeyPair.cpp +39 -43
- package/cpp/pbkdf2/HybridPbkdf2.cpp +7 -8
- package/cpp/rsa/HybridRsaKeyPair.cpp +5 -8
- package/cpp/rsa/HybridRsaKeyPair.hpp +4 -7
- package/cpp/scrypt/HybridScrypt.cpp +6 -4
- package/cpp/sign/HybridSignHandle.cpp +25 -68
- package/cpp/sign/HybridVerifyHandle.cpp +23 -60
- package/cpp/utils/HybridUtils.cpp +213 -111
- package/cpp/utils/HybridUtils.hpp +9 -2
- package/cpp/utils/QuickCryptoUtils.hpp +72 -0
- package/deps/simdutf/LICENSE-APACHE +201 -0
- package/deps/simdutf/LICENSE-MIT +18 -0
- package/deps/simdutf/README.md +2782 -0
- package/deps/simdutf/include/simdutf/avx512.h +79 -0
- package/deps/simdutf/include/simdutf/base64_implementation.h +158 -0
- package/deps/simdutf/include/simdutf/base64_tables.h +887 -0
- package/deps/simdutf/include/simdutf/common_defs.h +186 -0
- package/deps/simdutf/include/simdutf/compiler_check.h +50 -0
- package/deps/simdutf/include/simdutf/constexpr_ptr.h +138 -0
- package/deps/simdutf/include/simdutf/encoding_types.h +189 -0
- package/deps/simdutf/include/simdutf/error.h +126 -0
- package/deps/simdutf/include/simdutf/implementation.h +7081 -0
- package/deps/simdutf/include/simdutf/internal/isadetection.h +325 -0
- package/deps/simdutf/include/simdutf/portability.h +285 -0
- package/deps/simdutf/include/simdutf/scalar/ascii.h +86 -0
- package/deps/simdutf/include/simdutf/scalar/atomic_util.h +105 -0
- package/deps/simdutf/include/simdutf/scalar/base64.h +911 -0
- package/deps/simdutf/include/simdutf/scalar/latin1.h +26 -0
- package/deps/simdutf/include/simdutf/scalar/latin1_to_utf16/latin1_to_utf16.h +52 -0
- package/deps/simdutf/include/simdutf/scalar/latin1_to_utf32/latin1_to_utf32.h +27 -0
- package/deps/simdutf/include/simdutf/scalar/latin1_to_utf8/latin1_to_utf8.h +191 -0
- package/deps/simdutf/include/simdutf/scalar/swap_bytes.h +35 -0
- package/deps/simdutf/include/simdutf/scalar/utf16.h +226 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_latin1/utf16_to_latin1.h +108 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_latin1/valid_utf16_to_latin1.h +40 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_utf32/utf16_to_utf32.h +86 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_utf32/valid_utf16_to_utf32.h +44 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_utf8/utf16_to_utf8.h +295 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_utf8/valid_utf16_to_utf8.h +91 -0
- package/deps/simdutf/include/simdutf/scalar/utf32.h +82 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_latin1/utf32_to_latin1.h +68 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_latin1/valid_utf32_to_latin1.h +67 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_utf16/utf32_to_utf16.h +84 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_utf16/valid_utf32_to_utf16.h +44 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_utf8/utf32_to_utf8.h +142 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_utf8/valid_utf32_to_utf8.h +72 -0
- package/deps/simdutf/include/simdutf/scalar/utf8.h +326 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_latin1/utf8_to_latin1.h +225 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_latin1/valid_utf8_to_latin1.h +87 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_utf16/utf8_to_utf16.h +342 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_utf16/valid_utf8_to_utf16.h +106 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_utf32/utf8_to_utf32.h +299 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_utf32/valid_utf8_to_utf32.h +83 -0
- package/deps/simdutf/include/simdutf/simdutf_version.h +26 -0
- package/deps/simdutf/include/simdutf.h +26 -0
- package/deps/simdutf/include/simdutf_c.h +342 -0
- package/deps/simdutf/src/arm64/arm_base64.cpp +791 -0
- package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf16.cpp +24 -0
- package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf32.cpp +24 -0
- package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf8.cpp +70 -0
- package/deps/simdutf/src/arm64/arm_convert_utf16_to_latin1.cpp +61 -0
- package/deps/simdutf/src/arm64/arm_convert_utf16_to_utf32.cpp +185 -0
- package/deps/simdutf/src/arm64/arm_convert_utf16_to_utf8.cpp +780 -0
- package/deps/simdutf/src/arm64/arm_convert_utf32_to_latin1.cpp +60 -0
- package/deps/simdutf/src/arm64/arm_convert_utf32_to_utf16.cpp +208 -0
- package/deps/simdutf/src/arm64/arm_convert_utf32_to_utf8.cpp +505 -0
- package/deps/simdutf/src/arm64/arm_convert_utf8_to_latin1.cpp +69 -0
- package/deps/simdutf/src/arm64/arm_convert_utf8_to_utf16.cpp +313 -0
- package/deps/simdutf/src/arm64/arm_convert_utf8_to_utf32.cpp +179 -0
- package/deps/simdutf/src/arm64/arm_find.cpp +199 -0
- package/deps/simdutf/src/arm64/arm_utf16fix.cpp +185 -0
- package/deps/simdutf/src/arm64/arm_validate_utf16.cpp +165 -0
- package/deps/simdutf/src/arm64/arm_validate_utf32le.cpp +65 -0
- package/deps/simdutf/src/arm64/implementation.cpp +1442 -0
- package/deps/simdutf/src/encoding_types.cpp +67 -0
- package/deps/simdutf/src/error.cpp +3 -0
- package/deps/simdutf/src/fallback/implementation.cpp +589 -0
- package/deps/simdutf/src/generic/ascii_validation.h +50 -0
- package/deps/simdutf/src/generic/base64.h +233 -0
- package/deps/simdutf/src/generic/base64lengths.h +63 -0
- package/deps/simdutf/src/generic/buf_block_reader.h +109 -0
- package/deps/simdutf/src/generic/find.h +75 -0
- package/deps/simdutf/src/generic/utf16/change_endianness.h +24 -0
- package/deps/simdutf/src/generic/utf16/count_code_points_bytemask.h +58 -0
- package/deps/simdutf/src/generic/utf16/to_well_formed.h +93 -0
- package/deps/simdutf/src/generic/utf16/utf32_length_from_utf16.h +15 -0
- package/deps/simdutf/src/generic/utf16/utf8_length_from_utf16.h +35 -0
- package/deps/simdutf/src/generic/utf16/utf8_length_from_utf16_bytemask.h +199 -0
- package/deps/simdutf/src/generic/utf16.h +73 -0
- package/deps/simdutf/src/generic/utf32.h +136 -0
- package/deps/simdutf/src/generic/utf8/utf16_length_from_utf8_bytemask.h +53 -0
- package/deps/simdutf/src/generic/utf8.h +92 -0
- package/deps/simdutf/src/generic/utf8_to_latin1/utf8_to_latin1.h +316 -0
- package/deps/simdutf/src/generic/utf8_to_latin1/valid_utf8_to_latin1.h +78 -0
- package/deps/simdutf/src/generic/utf8_to_utf16/utf8_to_utf16.h +332 -0
- package/deps/simdutf/src/generic/utf8_to_utf16/valid_utf8_to_utf16.h +74 -0
- package/deps/simdutf/src/generic/utf8_to_utf32/utf8_to_utf32.h +318 -0
- package/deps/simdutf/src/generic/utf8_to_utf32/valid_utf8_to_utf32.h +42 -0
- package/deps/simdutf/src/generic/utf8_validation/utf8_lookup4_algorithm.h +223 -0
- package/deps/simdutf/src/generic/utf8_validation/utf8_validator.h +84 -0
- package/deps/simdutf/src/generic/validate_utf16.h +164 -0
- package/deps/simdutf/src/generic/validate_utf32.h +99 -0
- package/deps/simdutf/src/haswell/avx2_base64.cpp +837 -0
- package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf16.cpp +28 -0
- package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf32.cpp +20 -0
- package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf8.cpp +83 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf16_to_latin1.cpp +83 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf16_to_utf32.cpp +210 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf16_to_utf8.cpp +602 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf32_to_latin1.cpp +116 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf32_to_utf16.cpp +164 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf32_to_utf8.cpp +569 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf8_to_latin1.cpp +60 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf8_to_utf16.cpp +195 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf8_to_utf32.cpp +135 -0
- package/deps/simdutf/src/haswell/avx2_utf16fix.cpp +173 -0
- package/deps/simdutf/src/haswell/avx2_validate_utf16.cpp +17 -0
- package/deps/simdutf/src/haswell/implementation.cpp +1447 -0
- package/deps/simdutf/src/icelake/icelake_ascii_validation.inl.cpp +19 -0
- package/deps/simdutf/src/icelake/icelake_base64.inl.cpp +630 -0
- package/deps/simdutf/src/icelake/icelake_common.inl.cpp +37 -0
- package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf16.inl.cpp +36 -0
- package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf32.inl.cpp +23 -0
- package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf8.inl.cpp +107 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf16_to_latin1.inl.cpp +103 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf16_to_utf32.inl.cpp +136 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf16_to_utf8.inl.cpp +206 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf32_to_latin1.inl.cpp +74 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf32_to_utf16.inl.cpp +338 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf32_to_utf8.inl.cpp +574 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf8_to_latin1.inl.cpp +104 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf8_to_utf16.inl.cpp +75 -0
- package/deps/simdutf/src/icelake/icelake_convert_valid_utf8_to_latin1.inl.cpp +69 -0
- package/deps/simdutf/src/icelake/icelake_find.inl.cpp +146 -0
- package/deps/simdutf/src/icelake/icelake_from_utf8.inl.cpp +266 -0
- package/deps/simdutf/src/icelake/icelake_from_valid_utf8.inl.cpp +136 -0
- package/deps/simdutf/src/icelake/icelake_macros.inl.cpp +143 -0
- package/deps/simdutf/src/icelake/icelake_utf16fix.cpp +138 -0
- package/deps/simdutf/src/icelake/icelake_utf32_validation.inl.cpp +63 -0
- package/deps/simdutf/src/icelake/icelake_utf8_common.inl.cpp +753 -0
- package/deps/simdutf/src/icelake/icelake_utf8_length_from_utf16.inl.cpp +269 -0
- package/deps/simdutf/src/icelake/icelake_utf8_validation.inl.cpp +116 -0
- package/deps/simdutf/src/icelake/implementation.cpp +1903 -0
- package/deps/simdutf/src/implementation.cpp +2526 -0
- package/deps/simdutf/src/lasx/implementation.cpp +1531 -0
- package/deps/simdutf/src/lasx/lasx_base64.cpp +695 -0
- package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf16.cpp +76 -0
- package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf32.cpp +55 -0
- package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf8.cpp +65 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf16_to_latin1.cpp +64 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf16_to_utf32.cpp +183 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf16_to_utf8.cpp +550 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf32_to_latin1.cpp +73 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf32_to_utf16.cpp +218 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf32_to_utf8.cpp +589 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf8_to_latin1.cpp +72 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf8_to_utf16.cpp +296 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf8_to_utf32.cpp +190 -0
- package/deps/simdutf/src/lasx/lasx_find.cpp +64 -0
- package/deps/simdutf/src/lasx/lasx_validate_utf16.cpp +13 -0
- package/deps/simdutf/src/lasx/lasx_validate_utf32le.cpp +84 -0
- package/deps/simdutf/src/lsx/implementation.cpp +1417 -0
- package/deps/simdutf/src/lsx/lsx_base64.cpp +675 -0
- package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf16.cpp +39 -0
- package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf32.cpp +27 -0
- package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf8.cpp +56 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf16_to_latin1.cpp +64 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf16_to_utf32.cpp +133 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf16_to_utf8.cpp +518 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf32_to_latin1.cpp +66 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf32_to_utf16.cpp +155 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf32_to_utf8.cpp +459 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf8_to_latin1.cpp +75 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf8_to_utf16.cpp +291 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf8_to_utf32.cpp +179 -0
- package/deps/simdutf/src/lsx/lsx_find.cpp +60 -0
- package/deps/simdutf/src/lsx/lsx_validate_utf16.cpp +13 -0
- package/deps/simdutf/src/lsx/lsx_validate_utf32le.cpp +68 -0
- package/deps/simdutf/src/ppc64/implementation.cpp +992 -0
- package/deps/simdutf/src/ppc64/ppc64_base64.cpp +480 -0
- package/deps/simdutf/src/ppc64/ppc64_base64_internal_tests.cpp +401 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf16.cpp +12 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf32.cpp +12 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf8.cpp +149 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_latin1.cpp +67 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_utf32.cpp +87 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_utf8.cpp +296 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_latin1.cpp +57 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_utf16.cpp +117 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_utf8.cpp +166 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_latin1.cpp +69 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_utf16.cpp +211 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_utf32.cpp +153 -0
- package/deps/simdutf/src/ppc64/ppc64_utf16_to_utf8_tables.h +1011 -0
- package/deps/simdutf/src/ppc64/ppc64_utf8_length_from_latin1.cpp +37 -0
- package/deps/simdutf/src/ppc64/ppc64_validate_utf16.cpp +19 -0
- package/deps/simdutf/src/ppc64/templates.cpp +91 -0
- package/deps/simdutf/src/rvv/implementation.cpp +138 -0
- package/deps/simdutf/src/rvv/rvv_find.cpp +27 -0
- package/deps/simdutf/src/rvv/rvv_helpers.inl.cpp +23 -0
- package/deps/simdutf/src/rvv/rvv_latin1_to.inl.cpp +71 -0
- package/deps/simdutf/src/rvv/rvv_length_from.inl.cpp +164 -0
- package/deps/simdutf/src/rvv/rvv_utf16_to.inl.cpp +399 -0
- package/deps/simdutf/src/rvv/rvv_utf16fix.cpp +110 -0
- package/deps/simdutf/src/rvv/rvv_utf32_to.inl.cpp +307 -0
- package/deps/simdutf/src/rvv/rvv_utf8_to.inl.cpp +435 -0
- package/deps/simdutf/src/rvv/rvv_validate.inl.cpp +275 -0
- package/deps/simdutf/src/simdutf/arm64/begin.h +2 -0
- package/deps/simdutf/src/simdutf/arm64/bitmanipulation.h +34 -0
- package/deps/simdutf/src/simdutf/arm64/end.h +2 -0
- package/deps/simdutf/src/simdutf/arm64/implementation.h +307 -0
- package/deps/simdutf/src/simdutf/arm64/intrinsics.h +10 -0
- package/deps/simdutf/src/simdutf/arm64/simd.h +547 -0
- package/deps/simdutf/src/simdutf/arm64/simd16-inl.h +403 -0
- package/deps/simdutf/src/simdutf/arm64/simd32-inl.h +129 -0
- package/deps/simdutf/src/simdutf/arm64/simd64-inl.h +28 -0
- package/deps/simdutf/src/simdutf/arm64.h +43 -0
- package/deps/simdutf/src/simdutf/fallback/begin.h +1 -0
- package/deps/simdutf/src/simdutf/fallback/bitmanipulation.h +13 -0
- package/deps/simdutf/src/simdutf/fallback/end.h +1 -0
- package/deps/simdutf/src/simdutf/fallback/implementation.h +331 -0
- package/deps/simdutf/src/simdutf/fallback.h +42 -0
- package/deps/simdutf/src/simdutf/haswell/begin.h +15 -0
- package/deps/simdutf/src/simdutf/haswell/bitmanipulation.h +35 -0
- package/deps/simdutf/src/simdutf/haswell/end.h +13 -0
- package/deps/simdutf/src/simdutf/haswell/implementation.h +338 -0
- package/deps/simdutf/src/simdutf/haswell/intrinsics.h +67 -0
- package/deps/simdutf/src/simdutf/haswell/simd.h +363 -0
- package/deps/simdutf/src/simdutf/haswell/simd16-inl.h +261 -0
- package/deps/simdutf/src/simdutf/haswell/simd32-inl.h +111 -0
- package/deps/simdutf/src/simdutf/haswell/simd64-inl.h +34 -0
- package/deps/simdutf/src/simdutf/haswell.h +63 -0
- package/deps/simdutf/src/simdutf/icelake/begin.h +14 -0
- package/deps/simdutf/src/simdutf/icelake/bitmanipulation.h +44 -0
- package/deps/simdutf/src/simdutf/icelake/end.h +12 -0
- package/deps/simdutf/src/simdutf/icelake/implementation.h +346 -0
- package/deps/simdutf/src/simdutf/icelake/intrinsics.h +138 -0
- package/deps/simdutf/src/simdutf/icelake/simd.h +17 -0
- package/deps/simdutf/src/simdutf/icelake/simd16-inl.h +90 -0
- package/deps/simdutf/src/simdutf/icelake/simd32-inl.h +47 -0
- package/deps/simdutf/src/simdutf/icelake.h +81 -0
- package/deps/simdutf/src/simdutf/lasx/begin.h +8 -0
- package/deps/simdutf/src/simdutf/lasx/bitmanipulation.h +25 -0
- package/deps/simdutf/src/simdutf/lasx/end.h +8 -0
- package/deps/simdutf/src/simdutf/lasx/implementation.h +310 -0
- package/deps/simdutf/src/simdutf/lasx/intrinsics.h +319 -0
- package/deps/simdutf/src/simdutf/lasx/simd.h +551 -0
- package/deps/simdutf/src/simdutf/lasx/simd16-inl.h +234 -0
- package/deps/simdutf/src/simdutf/lasx/simd32-inl.h +74 -0
- package/deps/simdutf/src/simdutf/lasx/simd64-inl.h +52 -0
- package/deps/simdutf/src/simdutf/lasx.h +49 -0
- package/deps/simdutf/src/simdutf/lsx/begin.h +2 -0
- package/deps/simdutf/src/simdutf/lsx/bitmanipulation.h +25 -0
- package/deps/simdutf/src/simdutf/lsx/end.h +2 -0
- package/deps/simdutf/src/simdutf/lsx/implementation.h +309 -0
- package/deps/simdutf/src/simdutf/lsx/intrinsics.h +196 -0
- package/deps/simdutf/src/simdutf/lsx/simd.h +421 -0
- package/deps/simdutf/src/simdutf/lsx/simd16-inl.h +242 -0
- package/deps/simdutf/src/simdutf/lsx/simd32-inl.h +69 -0
- package/deps/simdutf/src/simdutf/lsx/simd64-inl.h +50 -0
- package/deps/simdutf/src/simdutf/lsx.h +52 -0
- package/deps/simdutf/src/simdutf/ppc64/begin.h +1 -0
- package/deps/simdutf/src/simdutf/ppc64/bitmanipulation.h +29 -0
- package/deps/simdutf/src/simdutf/ppc64/end.h +1 -0
- package/deps/simdutf/src/simdutf/ppc64/implementation.h +348 -0
- package/deps/simdutf/src/simdutf/ppc64/intrinsics.h +19 -0
- package/deps/simdutf/src/simdutf/ppc64/simd.h +177 -0
- package/deps/simdutf/src/simdutf/ppc64/simd16-inl.h +327 -0
- package/deps/simdutf/src/simdutf/ppc64/simd32-inl.h +247 -0
- package/deps/simdutf/src/simdutf/ppc64/simd8-inl.h +618 -0
- package/deps/simdutf/src/simdutf/ppc64.h +40 -0
- package/deps/simdutf/src/simdutf/rvv/begin.h +7 -0
- package/deps/simdutf/src/simdutf/rvv/end.h +7 -0
- package/deps/simdutf/src/simdutf/rvv/implementation.h +321 -0
- package/deps/simdutf/src/simdutf/rvv/intrinsics.h +131 -0
- package/deps/simdutf/src/simdutf/rvv.h +41 -0
- package/deps/simdutf/src/simdutf/westmere/begin.h +8 -0
- package/deps/simdutf/src/simdutf/westmere/bitmanipulation.h +37 -0
- package/deps/simdutf/src/simdutf/westmere/end.h +8 -0
- package/deps/simdutf/src/simdutf/westmere/implementation.h +338 -0
- package/deps/simdutf/src/simdutf/westmere/intrinsics.h +38 -0
- package/deps/simdutf/src/simdutf/westmere/simd.h +379 -0
- package/deps/simdutf/src/simdutf/westmere/simd16-inl.h +242 -0
- package/deps/simdutf/src/simdutf/westmere/simd32-inl.h +151 -0
- package/deps/simdutf/src/simdutf/westmere/simd64-inl.h +33 -0
- package/deps/simdutf/src/simdutf/westmere.h +59 -0
- package/deps/simdutf/src/simdutf.cpp +152 -0
- package/deps/simdutf/src/simdutf_c.cpp +525 -0
- package/deps/simdutf/src/tables/utf16_to_utf8_tables.h +768 -0
- package/deps/simdutf/src/tables/utf32_to_utf16_tables.h +53 -0
- package/deps/simdutf/src/tables/utf8_to_utf16_tables.h +826 -0
- package/deps/simdutf/src/westmere/implementation.cpp +1479 -0
- package/deps/simdutf/src/westmere/internal/loader.cpp +7 -0
- package/deps/simdutf/src/westmere/internal/write_v_u16_11bits_to_utf8.cpp +66 -0
- package/deps/simdutf/src/westmere/sse_base64.cpp +672 -0
- package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf16.cpp +21 -0
- package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf32.cpp +31 -0
- package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf8.cpp +71 -0
- package/deps/simdutf/src/westmere/sse_convert_utf16_to_latin1.cpp +70 -0
- package/deps/simdutf/src/westmere/sse_convert_utf16_to_utf32.cpp +206 -0
- package/deps/simdutf/src/westmere/sse_convert_utf16_to_utf8.cpp +504 -0
- package/deps/simdutf/src/westmere/sse_convert_utf32_to_latin1.cpp +82 -0
- package/deps/simdutf/src/westmere/sse_convert_utf32_to_utf16.cpp +209 -0
- package/deps/simdutf/src/westmere/sse_convert_utf32_to_utf8.cpp +589 -0
- package/deps/simdutf/src/westmere/sse_convert_utf8_to_latin1.cpp +58 -0
- package/deps/simdutf/src/westmere/sse_convert_utf8_to_utf16.cpp +197 -0
- package/deps/simdutf/src/westmere/sse_convert_utf8_to_utf32.cpp +141 -0
- package/deps/simdutf/src/westmere/sse_utf16fix.cpp +82 -0
- package/deps/simdutf/src/westmere/sse_validate_utf16.cpp +17 -0
- package/lib/commonjs/argon2.js +51 -2
- package/lib/commonjs/argon2.js.map +1 -1
- package/lib/commonjs/cipher.js +109 -11
- package/lib/commonjs/cipher.js.map +1 -1
- package/lib/commonjs/dsa.js +8 -2
- package/lib/commonjs/dsa.js.map +1 -1
- package/lib/commonjs/hash.js +15 -5
- package/lib/commonjs/hash.js.map +1 -1
- package/lib/commonjs/hkdf.js +33 -6
- package/lib/commonjs/hkdf.js.map +1 -1
- package/lib/commonjs/hmac.js +15 -5
- package/lib/commonjs/hmac.js.map +1 -1
- package/lib/commonjs/keys/publicCipher.js +10 -4
- package/lib/commonjs/keys/publicCipher.js.map +1 -1
- package/lib/commonjs/random.js +11 -2
- package/lib/commonjs/random.js.map +1 -1
- package/lib/commonjs/rsa.js +12 -5
- package/lib/commonjs/rsa.js.map +1 -1
- package/lib/commonjs/scrypt.js +47 -6
- package/lib/commonjs/scrypt.js.map +1 -1
- package/lib/commonjs/subtle.js +76 -5
- package/lib/commonjs/subtle.js.map +1 -1
- package/lib/commonjs/utils/cipher.js +18 -7
- package/lib/commonjs/utils/cipher.js.map +1 -1
- package/lib/commonjs/utils/conversion.js +33 -9
- package/lib/commonjs/utils/conversion.js.map +1 -1
- package/lib/commonjs/utils/timingSafeEqual.js +7 -2
- package/lib/commonjs/utils/timingSafeEqual.js.map +1 -1
- package/lib/commonjs/x509certificate.js +6 -6
- package/lib/commonjs/x509certificate.js.map +1 -1
- package/lib/module/argon2.js +51 -2
- package/lib/module/argon2.js.map +1 -1
- package/lib/module/cipher.js +109 -11
- package/lib/module/cipher.js.map +1 -1
- package/lib/module/dsa.js +8 -2
- package/lib/module/dsa.js.map +1 -1
- package/lib/module/hash.js +15 -5
- package/lib/module/hash.js.map +1 -1
- package/lib/module/hkdf.js +33 -6
- package/lib/module/hkdf.js.map +1 -1
- package/lib/module/hmac.js +15 -5
- package/lib/module/hmac.js.map +1 -1
- package/lib/module/keys/publicCipher.js +10 -4
- package/lib/module/keys/publicCipher.js.map +1 -1
- package/lib/module/random.js +11 -2
- package/lib/module/random.js.map +1 -1
- package/lib/module/rsa.js +11 -4
- package/lib/module/rsa.js.map +1 -1
- package/lib/module/scrypt.js +47 -6
- package/lib/module/scrypt.js.map +1 -1
- package/lib/module/subtle.js +76 -5
- package/lib/module/subtle.js.map +1 -1
- package/lib/module/utils/cipher.js +18 -7
- package/lib/module/utils/cipher.js.map +1 -1
- package/lib/module/utils/conversion.js +33 -9
- package/lib/module/utils/conversion.js.map +1 -1
- package/lib/module/utils/timingSafeEqual.js +8 -3
- package/lib/module/utils/timingSafeEqual.js.map +1 -1
- package/lib/module/x509certificate.js +6 -6
- package/lib/module/x509certificate.js.map +1 -1
- package/lib/typescript/argon2.d.ts.map +1 -1
- package/lib/typescript/cipher.d.ts +2 -2
- package/lib/typescript/cipher.d.ts.map +1 -1
- package/lib/typescript/dsa.d.ts.map +1 -1
- package/lib/typescript/hash.d.ts +2 -2
- package/lib/typescript/hash.d.ts.map +1 -1
- package/lib/typescript/hkdf.d.ts.map +1 -1
- package/lib/typescript/hmac.d.ts +2 -2
- package/lib/typescript/hmac.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +1 -1
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/keys/publicCipher.d.ts.map +1 -1
- package/lib/typescript/random.d.ts.map +1 -1
- package/lib/typescript/rsa.d.ts.map +1 -1
- package/lib/typescript/scrypt.d.ts.map +1 -1
- package/lib/typescript/specs/utils.nitro.d.ts +0 -2
- package/lib/typescript/specs/utils.nitro.d.ts.map +1 -1
- package/lib/typescript/subtle.d.ts.map +1 -1
- package/lib/typescript/utils/cipher.d.ts +13 -1
- package/lib/typescript/utils/cipher.d.ts.map +1 -1
- package/lib/typescript/utils/conversion.d.ts +9 -6
- package/lib/typescript/utils/conversion.d.ts.map +1 -1
- package/lib/typescript/utils/timingSafeEqual.d.ts.map +1 -1
- package/lib/typescript/x509certificate.d.ts.map +1 -1
- package/nitrogen/generated/shared/c++/HybridUtilsSpec.cpp +0 -2
- package/nitrogen/generated/shared/c++/HybridUtilsSpec.hpp +0 -3
- package/package.json +38 -6
- package/src/argon2.ts +80 -2
- package/src/cipher.ts +139 -15
- package/src/dsa.ts +11 -2
- package/src/hash.ts +17 -7
- package/src/hkdf.ts +44 -6
- package/src/hmac.ts +17 -7
- package/src/keys/publicCipher.ts +10 -4
- package/src/random.ts +11 -2
- package/src/rsa.ts +18 -4
- package/src/scrypt.ts +73 -6
- package/src/specs/utils.nitro.ts +0 -2
- package/src/subtle.ts +90 -8
- package/src/utils/cipher.ts +30 -8
- package/src/utils/conversion.ts +58 -20
- package/src/utils/timingSafeEqual.ts +8 -3
- package/src/x509certificate.ts +5 -6
- package/deps/blake3/.cargo/config.toml +0 -2
- package/deps/blake3/.git-blame-ignore-revs +0 -2
- package/deps/blake3/.github/workflows/build_b3sum.py +0 -38
- package/deps/blake3/.github/workflows/ci.yml +0 -491
- package/deps/blake3/.github/workflows/tag.yml +0 -43
- package/deps/blake3/.github/workflows/upload_github_release_asset.py +0 -73
- package/deps/blake3/CONTRIBUTING.md +0 -31
- package/deps/blake3/Cargo.toml +0 -135
- package/deps/blake3/b3sum/Cargo.lock +0 -513
- package/deps/blake3/b3sum/Cargo.toml +0 -26
- package/deps/blake3/b3sum/README.md +0 -72
- package/deps/blake3/b3sum/src/main.rs +0 -564
- package/deps/blake3/b3sum/src/unit_tests.rs +0 -235
- package/deps/blake3/b3sum/tests/cli_tests.rs +0 -680
- package/deps/blake3/b3sum/what_does_check_do.md +0 -176
- package/deps/blake3/benches/bench.rs +0 -623
- package/deps/blake3/build.rs +0 -389
- package/deps/blake3/c/CMakeLists.txt +0 -383
- package/deps/blake3/c/CMakePresets.json +0 -73
- package/deps/blake3/c/Makefile.testing +0 -82
- package/deps/blake3/c/blake3-config.cmake.in +0 -14
- package/deps/blake3/c/blake3_avx2.c +0 -326
- package/deps/blake3/c/blake3_avx2_x86-64_unix.S +0 -1815
- package/deps/blake3/c/blake3_avx2_x86-64_windows_gnu.S +0 -1817
- package/deps/blake3/c/blake3_avx2_x86-64_windows_msvc.asm +0 -1828
- package/deps/blake3/c/blake3_avx512.c +0 -1388
- package/deps/blake3/c/blake3_avx512_x86-64_unix.S +0 -4824
- package/deps/blake3/c/blake3_avx512_x86-64_windows_gnu.S +0 -2615
- package/deps/blake3/c/blake3_avx512_x86-64_windows_msvc.asm +0 -2634
- package/deps/blake3/c/blake3_c_rust_bindings/Cargo.toml +0 -32
- package/deps/blake3/c/blake3_c_rust_bindings/README.md +0 -4
- package/deps/blake3/c/blake3_c_rust_bindings/benches/bench.rs +0 -477
- package/deps/blake3/c/blake3_c_rust_bindings/build.rs +0 -253
- package/deps/blake3/c/blake3_c_rust_bindings/cross_test.sh +0 -31
- package/deps/blake3/c/blake3_c_rust_bindings/src/lib.rs +0 -333
- package/deps/blake3/c/blake3_c_rust_bindings/src/test.rs +0 -696
- package/deps/blake3/c/blake3_sse2.c +0 -566
- package/deps/blake3/c/blake3_sse2_x86-64_unix.S +0 -2291
- package/deps/blake3/c/blake3_sse2_x86-64_windows_gnu.S +0 -2332
- package/deps/blake3/c/blake3_sse2_x86-64_windows_msvc.asm +0 -2350
- package/deps/blake3/c/blake3_sse41.c +0 -560
- package/deps/blake3/c/blake3_sse41_x86-64_unix.S +0 -2028
- package/deps/blake3/c/blake3_sse41_x86-64_windows_gnu.S +0 -2069
- package/deps/blake3/c/blake3_sse41_x86-64_windows_msvc.asm +0 -2089
- package/deps/blake3/c/blake3_tbb.cpp +0 -37
- package/deps/blake3/c/dependencies/CMakeLists.txt +0 -3
- package/deps/blake3/c/dependencies/tbb/CMakeLists.txt +0 -28
- package/deps/blake3/c/example.c +0 -36
- package/deps/blake3/c/example_tbb.c +0 -57
- package/deps/blake3/c/libblake3.pc.in +0 -12
- package/deps/blake3/c/main.c +0 -166
- package/deps/blake3/c/test.py +0 -97
- package/deps/blake3/media/B3.svg +0 -70
- package/deps/blake3/media/BLAKE3.svg +0 -85
- package/deps/blake3/media/speed.svg +0 -1474
- package/deps/blake3/reference_impl/Cargo.toml +0 -8
- package/deps/blake3/reference_impl/README.md +0 -14
- package/deps/blake3/reference_impl/reference_impl.rs +0 -374
- package/deps/blake3/src/ffi_avx2.rs +0 -65
- package/deps/blake3/src/ffi_avx512.rs +0 -169
- package/deps/blake3/src/ffi_neon.rs +0 -82
- package/deps/blake3/src/ffi_sse2.rs +0 -126
- package/deps/blake3/src/ffi_sse41.rs +0 -126
- package/deps/blake3/src/guts.rs +0 -60
- package/deps/blake3/src/hazmat.rs +0 -704
- package/deps/blake3/src/io.rs +0 -64
- package/deps/blake3/src/join.rs +0 -92
- package/deps/blake3/src/lib.rs +0 -1835
- package/deps/blake3/src/platform.rs +0 -587
- package/deps/blake3/src/portable.rs +0 -198
- package/deps/blake3/src/rust_avx2.rs +0 -474
- package/deps/blake3/src/rust_sse2.rs +0 -775
- package/deps/blake3/src/rust_sse41.rs +0 -766
- package/deps/blake3/src/test.rs +0 -1049
- package/deps/blake3/src/traits.rs +0 -227
- package/deps/blake3/src/wasm32_simd.rs +0 -794
- package/deps/blake3/test_vectors/Cargo.toml +0 -19
- package/deps/blake3/test_vectors/cross_test.sh +0 -25
- package/deps/blake3/test_vectors/src/bin/generate.rs +0 -4
- package/deps/blake3/test_vectors/src/lib.rs +0 -350
- package/deps/blake3/test_vectors/test_vectors.json +0 -217
- package/deps/blake3/tools/compiler_version/Cargo.toml +0 -7
- package/deps/blake3/tools/compiler_version/build.rs +0 -6
- package/deps/blake3/tools/compiler_version/src/main.rs +0 -27
- package/deps/blake3/tools/instruction_set_support/Cargo.toml +0 -6
- package/deps/blake3/tools/instruction_set_support/src/main.rs +0 -10
- package/deps/blake3/tools/release.md +0 -16
- package/deps/ncrypto/.bazelignore +0 -4
- package/deps/ncrypto/.bazelrc +0 -1
- package/deps/ncrypto/.bazelversion +0 -1
- package/deps/ncrypto/.clang-format +0 -111
- package/deps/ncrypto/.github/workflows/bazel.yml +0 -58
- package/deps/ncrypto/.github/workflows/commitlint.yml +0 -16
- package/deps/ncrypto/.github/workflows/linter.yml +0 -38
- package/deps/ncrypto/.github/workflows/macos.yml +0 -43
- package/deps/ncrypto/.github/workflows/release-please.yml +0 -16
- package/deps/ncrypto/.github/workflows/ubuntu.yml +0 -128
- package/deps/ncrypto/.github/workflows/visual-studio.yml +0 -49
- package/deps/ncrypto/.python-version +0 -1
- package/deps/ncrypto/.release-please-manifest.json +0 -3
- package/deps/ncrypto/BUILD.bazel +0 -44
- package/deps/ncrypto/CHANGELOG.md +0 -37
- package/deps/ncrypto/CMakeLists.txt +0 -79
- package/deps/ncrypto/MODULE.bazel +0 -16
- package/deps/ncrypto/MODULE.bazel.lock +0 -461
- package/deps/ncrypto/cmake/CPM.cmake +0 -1225
- package/deps/ncrypto/cmake/ncrypto-flags.cmake +0 -17
- package/deps/ncrypto/ncrypto.pc.in +0 -10
- package/deps/ncrypto/patches/0001-Expose-libdecrepit-so-NodeJS-can-use-it-for-ncrypto.patch +0 -28
- package/deps/ncrypto/pyproject.toml +0 -38
- package/deps/ncrypto/release-please-config.json +0 -11
- package/deps/ncrypto/src/CMakeLists.txt +0 -40
- package/deps/ncrypto/tests/BUILD.bazel +0 -11
- package/deps/ncrypto/tests/CMakeLists.txt +0 -7
- package/deps/ncrypto/tests/basic.cpp +0 -856
- package/deps/ncrypto/tools/run-clang-format.sh +0 -42
- package/lib/tsconfig.tsbuildinfo +0 -1
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#ifndef SIMDUTF_VALID_UTF16_TO_LATIN1_H
|
|
2
|
+
#define SIMDUTF_VALID_UTF16_TO_LATIN1_H
|
|
3
|
+
|
|
4
|
+
namespace simdutf {
|
|
5
|
+
namespace scalar {
|
|
6
|
+
namespace {
|
|
7
|
+
namespace utf16_to_latin1 {
|
|
8
|
+
|
|
9
|
+
template <endianness big_endian, class InputIterator, class OutputIterator>
|
|
10
|
+
simdutf_constexpr23 inline size_t
|
|
11
|
+
convert_valid_impl(InputIterator data, size_t len,
|
|
12
|
+
OutputIterator latin_output) {
|
|
13
|
+
static_assert(
|
|
14
|
+
std::is_same<typename std::decay<decltype(*data)>::type, uint16_t>::value,
|
|
15
|
+
"must decay to uint16_t");
|
|
16
|
+
size_t pos = 0;
|
|
17
|
+
const auto start = latin_output;
|
|
18
|
+
uint16_t word = 0;
|
|
19
|
+
|
|
20
|
+
while (pos < len) {
|
|
21
|
+
word = !match_system(big_endian) ? u16_swap_bytes(data[pos]) : data[pos];
|
|
22
|
+
*latin_output++ = char(word);
|
|
23
|
+
pos++;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return latin_output - start;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
template <endianness big_endian>
|
|
30
|
+
simdutf_really_inline size_t convert_valid(const char16_t *buf, size_t len,
|
|
31
|
+
char *latin_output) {
|
|
32
|
+
return convert_valid_impl<big_endian>(reinterpret_cast<const uint16_t *>(buf),
|
|
33
|
+
len, latin_output);
|
|
34
|
+
}
|
|
35
|
+
} // namespace utf16_to_latin1
|
|
36
|
+
} // unnamed namespace
|
|
37
|
+
} // namespace scalar
|
|
38
|
+
} // namespace simdutf
|
|
39
|
+
|
|
40
|
+
#endif
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
#ifndef SIMDUTF_UTF16_TO_UTF32_H
|
|
2
|
+
#define SIMDUTF_UTF16_TO_UTF32_H
|
|
3
|
+
|
|
4
|
+
namespace simdutf {
|
|
5
|
+
namespace scalar {
|
|
6
|
+
namespace {
|
|
7
|
+
namespace utf16_to_utf32 {
|
|
8
|
+
|
|
9
|
+
template <endianness big_endian>
|
|
10
|
+
simdutf_constexpr23 size_t convert(const char16_t *data, size_t len,
|
|
11
|
+
char32_t *utf32_output) {
|
|
12
|
+
size_t pos = 0;
|
|
13
|
+
char32_t *start{utf32_output};
|
|
14
|
+
while (pos < len) {
|
|
15
|
+
uint16_t word =
|
|
16
|
+
!match_system(big_endian) ? u16_swap_bytes(data[pos]) : data[pos];
|
|
17
|
+
if ((word & 0xF800) != 0xD800) {
|
|
18
|
+
// No surrogate pair, extend 16-bit word to 32-bit word
|
|
19
|
+
*utf32_output++ = char32_t(word);
|
|
20
|
+
pos++;
|
|
21
|
+
} else {
|
|
22
|
+
// must be a surrogate pair
|
|
23
|
+
uint16_t diff = uint16_t(word - 0xD800);
|
|
24
|
+
if (diff > 0x3FF) {
|
|
25
|
+
return 0;
|
|
26
|
+
}
|
|
27
|
+
if (pos + 1 >= len) {
|
|
28
|
+
return 0;
|
|
29
|
+
} // minimal bound checking
|
|
30
|
+
uint16_t next_word = !match_system(big_endian)
|
|
31
|
+
? u16_swap_bytes(data[pos + 1])
|
|
32
|
+
: data[pos + 1];
|
|
33
|
+
uint16_t diff2 = uint16_t(next_word - 0xDC00);
|
|
34
|
+
if (diff2 > 0x3FF) {
|
|
35
|
+
return 0;
|
|
36
|
+
}
|
|
37
|
+
uint32_t value = (diff << 10) + diff2 + 0x10000;
|
|
38
|
+
*utf32_output++ = char32_t(value);
|
|
39
|
+
pos += 2;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return utf32_output - start;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
template <endianness big_endian>
|
|
46
|
+
simdutf_constexpr23 result convert_with_errors(const char16_t *data, size_t len,
|
|
47
|
+
char32_t *utf32_output) {
|
|
48
|
+
size_t pos = 0;
|
|
49
|
+
char32_t *start{utf32_output};
|
|
50
|
+
while (pos < len) {
|
|
51
|
+
uint16_t word =
|
|
52
|
+
!match_system(big_endian) ? u16_swap_bytes(data[pos]) : data[pos];
|
|
53
|
+
if ((word & 0xF800) != 0xD800) {
|
|
54
|
+
// No surrogate pair, extend 16-bit word to 32-bit word
|
|
55
|
+
*utf32_output++ = char32_t(word);
|
|
56
|
+
pos++;
|
|
57
|
+
} else {
|
|
58
|
+
// must be a surrogate pair
|
|
59
|
+
uint16_t diff = uint16_t(word - 0xD800);
|
|
60
|
+
if (diff > 0x3FF) {
|
|
61
|
+
return result(error_code::SURROGATE, pos);
|
|
62
|
+
}
|
|
63
|
+
if (pos + 1 >= len) {
|
|
64
|
+
return result(error_code::SURROGATE, pos);
|
|
65
|
+
} // minimal bound checking
|
|
66
|
+
uint16_t next_word = !match_system(big_endian)
|
|
67
|
+
? u16_swap_bytes(data[pos + 1])
|
|
68
|
+
: data[pos + 1];
|
|
69
|
+
uint16_t diff2 = uint16_t(next_word - 0xDC00);
|
|
70
|
+
if (diff2 > 0x3FF) {
|
|
71
|
+
return result(error_code::SURROGATE, pos);
|
|
72
|
+
}
|
|
73
|
+
uint32_t value = (diff << 10) + diff2 + 0x10000;
|
|
74
|
+
*utf32_output++ = char32_t(value);
|
|
75
|
+
pos += 2;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return result(error_code::SUCCESS, utf32_output - start);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
} // namespace utf16_to_utf32
|
|
82
|
+
} // unnamed namespace
|
|
83
|
+
} // namespace scalar
|
|
84
|
+
} // namespace simdutf
|
|
85
|
+
|
|
86
|
+
#endif
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
#ifndef SIMDUTF_VALID_UTF16_TO_UTF32_H
|
|
2
|
+
#define SIMDUTF_VALID_UTF16_TO_UTF32_H
|
|
3
|
+
|
|
4
|
+
namespace simdutf {
|
|
5
|
+
namespace scalar {
|
|
6
|
+
namespace {
|
|
7
|
+
namespace utf16_to_utf32 {
|
|
8
|
+
|
|
9
|
+
template <endianness big_endian>
|
|
10
|
+
simdutf_constexpr23 size_t convert_valid(const char16_t *data, size_t len,
|
|
11
|
+
char32_t *utf32_output) {
|
|
12
|
+
size_t pos = 0;
|
|
13
|
+
char32_t *start{utf32_output};
|
|
14
|
+
while (pos < len) {
|
|
15
|
+
uint16_t word =
|
|
16
|
+
!match_system(big_endian) ? u16_swap_bytes(data[pos]) : data[pos];
|
|
17
|
+
if ((word & 0xF800) != 0xD800) {
|
|
18
|
+
// No surrogate pair, extend 16-bit word to 32-bit word
|
|
19
|
+
*utf32_output++ = char32_t(word);
|
|
20
|
+
pos++;
|
|
21
|
+
} else {
|
|
22
|
+
// must be a surrogate pair
|
|
23
|
+
uint16_t diff = uint16_t(word - 0xD800);
|
|
24
|
+
if (pos + 1 >= len) {
|
|
25
|
+
return 0;
|
|
26
|
+
} // minimal bound checking
|
|
27
|
+
uint16_t next_word = !match_system(big_endian)
|
|
28
|
+
? u16_swap_bytes(data[pos + 1])
|
|
29
|
+
: data[pos + 1];
|
|
30
|
+
uint16_t diff2 = uint16_t(next_word - 0xDC00);
|
|
31
|
+
uint32_t value = (diff << 10) + diff2 + 0x10000;
|
|
32
|
+
*utf32_output++ = char32_t(value);
|
|
33
|
+
pos += 2;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return utf32_output - start;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
} // namespace utf16_to_utf32
|
|
40
|
+
} // unnamed namespace
|
|
41
|
+
} // namespace scalar
|
|
42
|
+
} // namespace simdutf
|
|
43
|
+
|
|
44
|
+
#endif
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
#ifndef SIMDUTF_UTF16_TO_UTF8_H
|
|
2
|
+
#define SIMDUTF_UTF16_TO_UTF8_H
|
|
3
|
+
|
|
4
|
+
namespace simdutf {
|
|
5
|
+
namespace scalar {
|
|
6
|
+
namespace {
|
|
7
|
+
namespace utf16_to_utf8 {
|
|
8
|
+
|
|
9
|
+
template <endianness big_endian, typename InputPtr, typename OutputPtr>
|
|
10
|
+
#if SIMDUTF_CPLUSPLUS20
|
|
11
|
+
requires simdutf::detail::indexes_into_utf16<InputPtr>
|
|
12
|
+
// FIXME constrain output as well
|
|
13
|
+
#endif
|
|
14
|
+
simdutf_constexpr23 size_t convert(InputPtr data, size_t len,
|
|
15
|
+
OutputPtr utf8_output) {
|
|
16
|
+
size_t pos = 0;
|
|
17
|
+
const auto start = utf8_output;
|
|
18
|
+
while (pos < len) {
|
|
19
|
+
#if SIMDUTF_CPLUSPLUS23
|
|
20
|
+
if !consteval
|
|
21
|
+
#endif
|
|
22
|
+
{
|
|
23
|
+
// try to convert the next block of 8 bytes
|
|
24
|
+
if (pos + 4 <= len) { // if it is safe to read 8 more bytes, check that
|
|
25
|
+
// they are ascii
|
|
26
|
+
uint64_t v;
|
|
27
|
+
::memcpy(&v, data + pos, sizeof(uint64_t));
|
|
28
|
+
if simdutf_constexpr (!match_system(big_endian)) {
|
|
29
|
+
v = (v >> 8) | (v << (64 - 8));
|
|
30
|
+
}
|
|
31
|
+
if ((v & 0xFF80FF80FF80FF80) == 0) {
|
|
32
|
+
size_t final_pos = pos + 4;
|
|
33
|
+
while (pos < final_pos) {
|
|
34
|
+
*utf8_output++ = !match_system(big_endian)
|
|
35
|
+
? char(u16_swap_bytes(data[pos]))
|
|
36
|
+
: char(data[pos]);
|
|
37
|
+
pos++;
|
|
38
|
+
}
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
uint16_t word =
|
|
44
|
+
!match_system(big_endian) ? u16_swap_bytes(data[pos]) : data[pos];
|
|
45
|
+
if ((word & 0xFF80) == 0) {
|
|
46
|
+
// will generate one UTF-8 bytes
|
|
47
|
+
*utf8_output++ = char(word);
|
|
48
|
+
pos++;
|
|
49
|
+
} else if ((word & 0xF800) == 0) {
|
|
50
|
+
// will generate two UTF-8 bytes
|
|
51
|
+
// we have 0b110XXXXX 0b10XXXXXX
|
|
52
|
+
*utf8_output++ = char((word >> 6) | 0b11000000);
|
|
53
|
+
*utf8_output++ = char((word & 0b111111) | 0b10000000);
|
|
54
|
+
pos++;
|
|
55
|
+
} else if ((word & 0xF800) != 0xD800) {
|
|
56
|
+
// will generate three UTF-8 bytes
|
|
57
|
+
// we have 0b1110XXXX 0b10XXXXXX 0b10XXXXXX
|
|
58
|
+
*utf8_output++ = char((word >> 12) | 0b11100000);
|
|
59
|
+
*utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000);
|
|
60
|
+
*utf8_output++ = char((word & 0b111111) | 0b10000000);
|
|
61
|
+
pos++;
|
|
62
|
+
} else {
|
|
63
|
+
// must be a surrogate pair
|
|
64
|
+
if (pos + 1 >= len) {
|
|
65
|
+
return 0;
|
|
66
|
+
}
|
|
67
|
+
uint16_t diff = uint16_t(word - 0xD800);
|
|
68
|
+
if (diff > 0x3FF) {
|
|
69
|
+
return 0;
|
|
70
|
+
}
|
|
71
|
+
uint16_t next_word = !match_system(big_endian)
|
|
72
|
+
? u16_swap_bytes(data[pos + 1])
|
|
73
|
+
: data[pos + 1];
|
|
74
|
+
uint16_t diff2 = uint16_t(next_word - 0xDC00);
|
|
75
|
+
if (diff2 > 0x3FF) {
|
|
76
|
+
return 0;
|
|
77
|
+
}
|
|
78
|
+
uint32_t value = (diff << 10) + diff2 + 0x10000;
|
|
79
|
+
// will generate four UTF-8 bytes
|
|
80
|
+
// we have 0b11110XXX 0b10XXXXXX 0b10XXXXXX 0b10XXXXXX
|
|
81
|
+
*utf8_output++ = char((value >> 18) | 0b11110000);
|
|
82
|
+
*utf8_output++ = char(((value >> 12) & 0b111111) | 0b10000000);
|
|
83
|
+
*utf8_output++ = char(((value >> 6) & 0b111111) | 0b10000000);
|
|
84
|
+
*utf8_output++ = char((value & 0b111111) | 0b10000000);
|
|
85
|
+
pos += 2;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return utf8_output - start;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
template <endianness big_endian, bool check_output = false, typename InputPtr,
|
|
92
|
+
typename OutputPtr>
|
|
93
|
+
#if SIMDUTF_CPLUSPLUS20
|
|
94
|
+
requires(simdutf::detail::indexes_into_utf16<InputPtr> &&
|
|
95
|
+
simdutf::detail::index_assignable_from_char<OutputPtr>)
|
|
96
|
+
#endif
|
|
97
|
+
simdutf_constexpr23 full_result convert_with_errors(InputPtr data, size_t len,
|
|
98
|
+
OutputPtr utf8_output,
|
|
99
|
+
size_t utf8_len = 0) {
|
|
100
|
+
if (check_output && utf8_len == 0) {
|
|
101
|
+
return full_result(error_code::OUTPUT_BUFFER_TOO_SMALL, 0, 0);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
size_t pos = 0;
|
|
105
|
+
auto start = utf8_output;
|
|
106
|
+
auto end = utf8_output + utf8_len;
|
|
107
|
+
|
|
108
|
+
while (pos < len) {
|
|
109
|
+
#if SIMDUTF_CPLUSPLUS23
|
|
110
|
+
if !consteval
|
|
111
|
+
#endif
|
|
112
|
+
{
|
|
113
|
+
// try to convert the next block of 8 bytes
|
|
114
|
+
if (pos + 4 <= len) { // if it is safe to read 8 more bytes, check that
|
|
115
|
+
// they are ascii
|
|
116
|
+
uint64_t v;
|
|
117
|
+
::memcpy(&v, data + pos, sizeof(uint64_t));
|
|
118
|
+
if simdutf_constexpr (!match_system(big_endian))
|
|
119
|
+
v = (v >> 8) | (v << (64 - 8));
|
|
120
|
+
if ((v & 0xFF80FF80FF80FF80) == 0) {
|
|
121
|
+
size_t final_pos = pos + 4;
|
|
122
|
+
while (pos < final_pos) {
|
|
123
|
+
if (check_output && size_t(end - utf8_output) < 1) {
|
|
124
|
+
return full_result(error_code::OUTPUT_BUFFER_TOO_SMALL, pos,
|
|
125
|
+
utf8_output - start);
|
|
126
|
+
}
|
|
127
|
+
*utf8_output++ = !match_system(big_endian)
|
|
128
|
+
? char(u16_swap_bytes(data[pos]))
|
|
129
|
+
: char(data[pos]);
|
|
130
|
+
pos++;
|
|
131
|
+
}
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
uint16_t word =
|
|
138
|
+
!match_system(big_endian) ? u16_swap_bytes(data[pos]) : data[pos];
|
|
139
|
+
if ((word & 0xFF80) == 0) {
|
|
140
|
+
// will generate one UTF-8 bytes
|
|
141
|
+
if (check_output && size_t(end - utf8_output) < 1) {
|
|
142
|
+
return full_result(error_code::OUTPUT_BUFFER_TOO_SMALL, pos,
|
|
143
|
+
utf8_output - start);
|
|
144
|
+
}
|
|
145
|
+
*utf8_output++ = char(word);
|
|
146
|
+
pos++;
|
|
147
|
+
} else if ((word & 0xF800) == 0) {
|
|
148
|
+
// will generate two UTF-8 bytes
|
|
149
|
+
// we have 0b110XXXXX 0b10XXXXXX
|
|
150
|
+
if (check_output && size_t(end - utf8_output) < 2) {
|
|
151
|
+
return full_result(error_code::OUTPUT_BUFFER_TOO_SMALL, pos,
|
|
152
|
+
utf8_output - start);
|
|
153
|
+
}
|
|
154
|
+
*utf8_output++ = char((word >> 6) | 0b11000000);
|
|
155
|
+
*utf8_output++ = char((word & 0b111111) | 0b10000000);
|
|
156
|
+
pos++;
|
|
157
|
+
|
|
158
|
+
} else if ((word & 0xF800) != 0xD800) {
|
|
159
|
+
// will generate three UTF-8 bytes
|
|
160
|
+
// we have 0b1110XXXX 0b10XXXXXX 0b10XXXXXX
|
|
161
|
+
if (check_output && size_t(end - utf8_output) < 3) {
|
|
162
|
+
return full_result(error_code::OUTPUT_BUFFER_TOO_SMALL, pos,
|
|
163
|
+
utf8_output - start);
|
|
164
|
+
}
|
|
165
|
+
*utf8_output++ = char((word >> 12) | 0b11100000);
|
|
166
|
+
*utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000);
|
|
167
|
+
*utf8_output++ = char((word & 0b111111) | 0b10000000);
|
|
168
|
+
pos++;
|
|
169
|
+
} else {
|
|
170
|
+
|
|
171
|
+
if (check_output && size_t(end - utf8_output) < 4) {
|
|
172
|
+
return full_result(error_code::OUTPUT_BUFFER_TOO_SMALL, pos,
|
|
173
|
+
utf8_output - start);
|
|
174
|
+
}
|
|
175
|
+
// must be a surrogate pair
|
|
176
|
+
if (pos + 1 >= len) {
|
|
177
|
+
return full_result(error_code::SURROGATE, pos, utf8_output - start);
|
|
178
|
+
}
|
|
179
|
+
uint16_t diff = uint16_t(word - 0xD800);
|
|
180
|
+
if (diff > 0x3FF) {
|
|
181
|
+
return full_result(error_code::SURROGATE, pos, utf8_output - start);
|
|
182
|
+
}
|
|
183
|
+
uint16_t next_word = !match_system(big_endian)
|
|
184
|
+
? u16_swap_bytes(data[pos + 1])
|
|
185
|
+
: data[pos + 1];
|
|
186
|
+
uint16_t diff2 = uint16_t(next_word - 0xDC00);
|
|
187
|
+
if (diff2 > 0x3FF) {
|
|
188
|
+
return full_result(error_code::SURROGATE, pos, utf8_output - start);
|
|
189
|
+
}
|
|
190
|
+
uint32_t value = (diff << 10) + diff2 + 0x10000;
|
|
191
|
+
// will generate four UTF-8 bytes
|
|
192
|
+
// we have 0b11110XXX 0b10XXXXXX 0b10XXXXXX 0b10XXXXXX
|
|
193
|
+
*utf8_output++ = char((value >> 18) | 0b11110000);
|
|
194
|
+
*utf8_output++ = char(((value >> 12) & 0b111111) | 0b10000000);
|
|
195
|
+
*utf8_output++ = char(((value >> 6) & 0b111111) | 0b10000000);
|
|
196
|
+
*utf8_output++ = char((value & 0b111111) | 0b10000000);
|
|
197
|
+
pos += 2;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return full_result(error_code::SUCCESS, pos, utf8_output - start);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
template <endianness big_endian>
|
|
204
|
+
inline result simple_convert_with_errors(const char16_t *buf, size_t len,
|
|
205
|
+
char *utf8_output) {
|
|
206
|
+
return convert_with_errors<big_endian, false>(buf, len, utf8_output, 0);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
template <endianness big_endian>
|
|
210
|
+
simdutf_constexpr23 size_t convert_with_replacement(const char16_t *data,
|
|
211
|
+
size_t len,
|
|
212
|
+
char *utf8_output) {
|
|
213
|
+
size_t pos = 0;
|
|
214
|
+
char *start = utf8_output;
|
|
215
|
+
while (pos < len) {
|
|
216
|
+
#if SIMDUTF_CPLUSPLUS23
|
|
217
|
+
if !consteval
|
|
218
|
+
#endif
|
|
219
|
+
{
|
|
220
|
+
// try to convert the next block of 8 bytes
|
|
221
|
+
if (pos + 4 <= len) { // if it is safe to read 8 more bytes, check that
|
|
222
|
+
// they are ascii
|
|
223
|
+
uint64_t v;
|
|
224
|
+
::memcpy(&v, data + pos, sizeof(uint64_t));
|
|
225
|
+
if simdutf_constexpr (!match_system(big_endian)) {
|
|
226
|
+
v = (v >> 8) | (v << (64 - 8));
|
|
227
|
+
}
|
|
228
|
+
if ((v & 0xFF80FF80FF80FF80) == 0) {
|
|
229
|
+
size_t final_pos = pos + 4;
|
|
230
|
+
while (pos < final_pos) {
|
|
231
|
+
*utf8_output++ = !match_system(big_endian)
|
|
232
|
+
? char(u16_swap_bytes(data[pos]))
|
|
233
|
+
: char(data[pos]);
|
|
234
|
+
pos++;
|
|
235
|
+
}
|
|
236
|
+
continue;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
uint16_t word =
|
|
241
|
+
!match_system(big_endian) ? u16_swap_bytes(data[pos]) : data[pos];
|
|
242
|
+
if ((word & 0xFF80) == 0) {
|
|
243
|
+
// will generate one UTF-8 bytes
|
|
244
|
+
*utf8_output++ = char(word);
|
|
245
|
+
pos++;
|
|
246
|
+
} else if ((word & 0xF800) == 0) {
|
|
247
|
+
// will generate two UTF-8 bytes
|
|
248
|
+
// we have 0b110XXXXX 0b10XXXXXX
|
|
249
|
+
*utf8_output++ = char((word >> 6) | 0b11000000);
|
|
250
|
+
*utf8_output++ = char((word & 0b111111) | 0b10000000);
|
|
251
|
+
pos++;
|
|
252
|
+
} else if ((word & 0xF800) != 0xD800) {
|
|
253
|
+
// will generate three UTF-8 bytes
|
|
254
|
+
// we have 0b1110XXXX 0b10XXXXXX 0b10XXXXXX
|
|
255
|
+
*utf8_output++ = char((word >> 12) | 0b11100000);
|
|
256
|
+
*utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000);
|
|
257
|
+
*utf8_output++ = char((word & 0b111111) | 0b10000000);
|
|
258
|
+
pos++;
|
|
259
|
+
} else {
|
|
260
|
+
// surrogate range
|
|
261
|
+
uint16_t diff = uint16_t(word - 0xD800);
|
|
262
|
+
if (diff <= 0x3FF && pos + 1 < len) {
|
|
263
|
+
// high surrogate, check for valid pair
|
|
264
|
+
uint16_t next_word = !match_system(big_endian)
|
|
265
|
+
? u16_swap_bytes(data[pos + 1])
|
|
266
|
+
: data[pos + 1];
|
|
267
|
+
uint16_t diff2 = uint16_t(next_word - 0xDC00);
|
|
268
|
+
if (diff2 <= 0x3FF) {
|
|
269
|
+
// valid surrogate pair
|
|
270
|
+
uint32_t value = (diff << 10) + diff2 + 0x10000;
|
|
271
|
+
// will generate four UTF-8 bytes
|
|
272
|
+
*utf8_output++ = char((value >> 18) | 0b11110000);
|
|
273
|
+
*utf8_output++ = char(((value >> 12) & 0b111111) | 0b10000000);
|
|
274
|
+
*utf8_output++ = char(((value >> 6) & 0b111111) | 0b10000000);
|
|
275
|
+
*utf8_output++ = char((value & 0b111111) | 0b10000000);
|
|
276
|
+
pos += 2;
|
|
277
|
+
continue;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
// unpaired surrogate: replace with U+FFFD (0xEF 0xBF 0xBD)
|
|
281
|
+
*utf8_output++ = char(0xef);
|
|
282
|
+
*utf8_output++ = char(0xbf);
|
|
283
|
+
*utf8_output++ = char(0xbd);
|
|
284
|
+
pos++;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
return utf8_output - start;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
} // namespace utf16_to_utf8
|
|
291
|
+
} // unnamed namespace
|
|
292
|
+
} // namespace scalar
|
|
293
|
+
} // namespace simdutf
|
|
294
|
+
|
|
295
|
+
#endif
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
#ifndef SIMDUTF_VALID_UTF16_TO_UTF8_H
|
|
2
|
+
#define SIMDUTF_VALID_UTF16_TO_UTF8_H
|
|
3
|
+
|
|
4
|
+
namespace simdutf {
|
|
5
|
+
namespace scalar {
|
|
6
|
+
namespace {
|
|
7
|
+
namespace utf16_to_utf8 {
|
|
8
|
+
|
|
9
|
+
template <endianness big_endian, typename InputPtr, typename OutputPtr>
|
|
10
|
+
#if SIMDUTF_CPLUSPLUS20
|
|
11
|
+
requires(simdutf::detail::indexes_into_utf16<InputPtr> &&
|
|
12
|
+
simdutf::detail::index_assignable_from_char<OutputPtr>)
|
|
13
|
+
#endif
|
|
14
|
+
simdutf_constexpr23 size_t convert_valid(InputPtr data, size_t len,
|
|
15
|
+
OutputPtr utf8_output) {
|
|
16
|
+
size_t pos = 0;
|
|
17
|
+
auto start = utf8_output;
|
|
18
|
+
while (pos < len) {
|
|
19
|
+
#if SIMDUTF_CPLUSPLUS23
|
|
20
|
+
if !consteval
|
|
21
|
+
#endif
|
|
22
|
+
{
|
|
23
|
+
// try to convert the next block of 4 ASCII characters
|
|
24
|
+
if (pos + 4 <= len) { // if it is safe to read 8 more bytes, check that
|
|
25
|
+
// they are ascii
|
|
26
|
+
uint64_t v;
|
|
27
|
+
::memcpy(&v, data + pos, sizeof(uint64_t));
|
|
28
|
+
if simdutf_constexpr (!match_system(big_endian)) {
|
|
29
|
+
v = (v >> 8) | (v << (64 - 8));
|
|
30
|
+
}
|
|
31
|
+
if ((v & 0xFF80FF80FF80FF80) == 0) {
|
|
32
|
+
size_t final_pos = pos + 4;
|
|
33
|
+
while (pos < final_pos) {
|
|
34
|
+
*utf8_output++ = !match_system(big_endian)
|
|
35
|
+
? char(u16_swap_bytes(data[pos]))
|
|
36
|
+
: char(data[pos]);
|
|
37
|
+
pos++;
|
|
38
|
+
}
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
uint16_t word =
|
|
45
|
+
!match_system(big_endian) ? u16_swap_bytes(data[pos]) : data[pos];
|
|
46
|
+
if ((word & 0xFF80) == 0) {
|
|
47
|
+
// will generate one UTF-8 bytes
|
|
48
|
+
*utf8_output++ = char(word);
|
|
49
|
+
pos++;
|
|
50
|
+
} else if ((word & 0xF800) == 0) {
|
|
51
|
+
// will generate two UTF-8 bytes
|
|
52
|
+
// we have 0b110XXXXX 0b10XXXXXX
|
|
53
|
+
*utf8_output++ = char((word >> 6) | 0b11000000);
|
|
54
|
+
*utf8_output++ = char((word & 0b111111) | 0b10000000);
|
|
55
|
+
pos++;
|
|
56
|
+
} else if ((word & 0xF800) != 0xD800) {
|
|
57
|
+
// will generate three UTF-8 bytes
|
|
58
|
+
// we have 0b1110XXXX 0b10XXXXXX 0b10XXXXXX
|
|
59
|
+
*utf8_output++ = char((word >> 12) | 0b11100000);
|
|
60
|
+
*utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000);
|
|
61
|
+
*utf8_output++ = char((word & 0b111111) | 0b10000000);
|
|
62
|
+
pos++;
|
|
63
|
+
} else {
|
|
64
|
+
// must be a surrogate pair
|
|
65
|
+
uint16_t diff = uint16_t(word - 0xD800);
|
|
66
|
+
if (pos + 1 >= len) {
|
|
67
|
+
return 0;
|
|
68
|
+
} // minimal bound checking
|
|
69
|
+
uint16_t next_word = !match_system(big_endian)
|
|
70
|
+
? u16_swap_bytes(data[pos + 1])
|
|
71
|
+
: data[pos + 1];
|
|
72
|
+
uint16_t diff2 = uint16_t(next_word - 0xDC00);
|
|
73
|
+
uint32_t value = (diff << 10) + diff2 + 0x10000;
|
|
74
|
+
// will generate four UTF-8 bytes
|
|
75
|
+
// we have 0b11110XXX 0b10XXXXXX 0b10XXXXXX 0b10XXXXXX
|
|
76
|
+
*utf8_output++ = char((value >> 18) | 0b11110000);
|
|
77
|
+
*utf8_output++ = char(((value >> 12) & 0b111111) | 0b10000000);
|
|
78
|
+
*utf8_output++ = char(((value >> 6) & 0b111111) | 0b10000000);
|
|
79
|
+
*utf8_output++ = char((value & 0b111111) | 0b10000000);
|
|
80
|
+
pos += 2;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return utf8_output - start;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
} // namespace utf16_to_utf8
|
|
87
|
+
} // unnamed namespace
|
|
88
|
+
} // namespace scalar
|
|
89
|
+
} // namespace simdutf
|
|
90
|
+
|
|
91
|
+
#endif
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
#ifndef SIMDUTF_UTF32_H
|
|
2
|
+
#define SIMDUTF_UTF32_H
|
|
3
|
+
|
|
4
|
+
namespace simdutf {
|
|
5
|
+
namespace scalar {
|
|
6
|
+
namespace utf32 {
|
|
7
|
+
|
|
8
|
+
template <typename InputPtr>
|
|
9
|
+
#if SIMDUTF_CPLUSPLUS20
|
|
10
|
+
requires simdutf::detail::indexes_into_uint32<InputPtr>
|
|
11
|
+
#endif
|
|
12
|
+
simdutf_warn_unused simdutf_constexpr23 bool validate(InputPtr data,
|
|
13
|
+
size_t len) noexcept {
|
|
14
|
+
uint64_t pos = 0;
|
|
15
|
+
for (; pos < len; pos++) {
|
|
16
|
+
uint32_t word = data[pos];
|
|
17
|
+
if (word > 0x10FFFF || (word >= 0xD800 && word <= 0xDFFF)) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
simdutf_warn_unused simdutf_really_inline bool validate(const char32_t *buf,
|
|
25
|
+
size_t len) noexcept {
|
|
26
|
+
return validate(reinterpret_cast<const uint32_t *>(buf), len);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
template <typename InputPtr>
|
|
30
|
+
#if SIMDUTF_CPLUSPLUS20
|
|
31
|
+
requires simdutf::detail::indexes_into_uint32<InputPtr>
|
|
32
|
+
#endif
|
|
33
|
+
simdutf_warn_unused simdutf_constexpr23 result
|
|
34
|
+
validate_with_errors(InputPtr data, size_t len) noexcept {
|
|
35
|
+
size_t pos = 0;
|
|
36
|
+
for (; pos < len; pos++) {
|
|
37
|
+
uint32_t word = data[pos];
|
|
38
|
+
if (word > 0x10FFFF) {
|
|
39
|
+
return result(error_code::TOO_LARGE, pos);
|
|
40
|
+
}
|
|
41
|
+
if (word >= 0xD800 && word <= 0xDFFF) {
|
|
42
|
+
return result(error_code::SURROGATE, pos);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return result(error_code::SUCCESS, pos);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
simdutf_warn_unused simdutf_really_inline result
|
|
49
|
+
validate_with_errors(const char32_t *buf, size_t len) noexcept {
|
|
50
|
+
return validate_with_errors(reinterpret_cast<const uint32_t *>(buf), len);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
inline simdutf_constexpr23 size_t utf8_length_from_utf32(const char32_t *p,
|
|
54
|
+
size_t len) {
|
|
55
|
+
// We are not BOM aware.
|
|
56
|
+
size_t counter{0};
|
|
57
|
+
for (size_t i = 0; i < len; i++) {
|
|
58
|
+
// credit: @ttsugriy for the vectorizable approach
|
|
59
|
+
counter++; // ASCII
|
|
60
|
+
counter += static_cast<size_t>(p[i] > 0x7F); // two-byte
|
|
61
|
+
counter += static_cast<size_t>(p[i] > 0x7FF); // three-byte
|
|
62
|
+
counter += static_cast<size_t>(p[i] > 0xFFFF); // four-bytes
|
|
63
|
+
}
|
|
64
|
+
return counter;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
inline simdutf_warn_unused simdutf_constexpr23 size_t
|
|
68
|
+
utf16_length_from_utf32(const char32_t *p, size_t len) {
|
|
69
|
+
// We are not BOM aware.
|
|
70
|
+
size_t counter{0};
|
|
71
|
+
for (size_t i = 0; i < len; i++) {
|
|
72
|
+
counter++; // non-surrogate word
|
|
73
|
+
counter += static_cast<size_t>(p[i] > 0xFFFF); // surrogate pair
|
|
74
|
+
}
|
|
75
|
+
return counter;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
} // namespace utf32
|
|
79
|
+
} // namespace scalar
|
|
80
|
+
} // namespace simdutf
|
|
81
|
+
|
|
82
|
+
#endif
|