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,26 @@
|
|
|
1
|
+
#ifndef SIMDUTF_LATIN1_H
|
|
2
|
+
#define SIMDUTF_LATIN1_H
|
|
3
|
+
|
|
4
|
+
namespace simdutf {
|
|
5
|
+
namespace scalar {
|
|
6
|
+
namespace {
|
|
7
|
+
namespace latin1 {
|
|
8
|
+
|
|
9
|
+
simdutf_really_inline size_t utf8_length_from_latin1(const char *buf,
|
|
10
|
+
size_t len) {
|
|
11
|
+
const uint8_t *c = reinterpret_cast<const uint8_t *>(buf);
|
|
12
|
+
size_t answer = 0;
|
|
13
|
+
for (size_t i = 0; i < len; i++) {
|
|
14
|
+
if ((c[i] >> 7)) {
|
|
15
|
+
answer++;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return answer + len;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
} // namespace latin1
|
|
22
|
+
} // unnamed namespace
|
|
23
|
+
} // namespace scalar
|
|
24
|
+
} // namespace simdutf
|
|
25
|
+
|
|
26
|
+
#endif
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
#ifndef SIMDUTF_LATIN1_TO_UTF16_H
|
|
2
|
+
#define SIMDUTF_LATIN1_TO_UTF16_H
|
|
3
|
+
|
|
4
|
+
namespace simdutf {
|
|
5
|
+
namespace scalar {
|
|
6
|
+
namespace {
|
|
7
|
+
namespace latin1_to_utf16 {
|
|
8
|
+
|
|
9
|
+
template <endianness big_endian, typename InputPtr>
|
|
10
|
+
#if SIMDUTF_CPLUSPLUS20
|
|
11
|
+
requires simdutf::detail::indexes_into_byte_like<InputPtr>
|
|
12
|
+
#endif
|
|
13
|
+
simdutf_constexpr23 size_t convert(InputPtr data, size_t len,
|
|
14
|
+
char16_t *utf16_output) {
|
|
15
|
+
size_t pos = 0;
|
|
16
|
+
char16_t *start{utf16_output};
|
|
17
|
+
|
|
18
|
+
while (pos < len) {
|
|
19
|
+
uint16_t word =
|
|
20
|
+
uint8_t(data[pos]); // extend Latin-1 char to 16-bit Unicode code point
|
|
21
|
+
*utf16_output++ =
|
|
22
|
+
char16_t(match_system(big_endian) ? word : u16_swap_bytes(word));
|
|
23
|
+
pos++;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return utf16_output - start;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
template <endianness big_endian>
|
|
30
|
+
inline result convert_with_errors(const char *buf, size_t len,
|
|
31
|
+
char16_t *utf16_output) {
|
|
32
|
+
const uint8_t *data = reinterpret_cast<const uint8_t *>(buf);
|
|
33
|
+
size_t pos = 0;
|
|
34
|
+
char16_t *start{utf16_output};
|
|
35
|
+
|
|
36
|
+
while (pos < len) {
|
|
37
|
+
uint16_t word =
|
|
38
|
+
uint16_t(data[pos]); // extend Latin-1 char to 16-bit Unicode code point
|
|
39
|
+
*utf16_output++ =
|
|
40
|
+
char16_t(match_system(big_endian) ? word : u16_swap_bytes(word));
|
|
41
|
+
pos++;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return result(error_code::SUCCESS, utf16_output - start);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
} // namespace latin1_to_utf16
|
|
48
|
+
} // unnamed namespace
|
|
49
|
+
} // namespace scalar
|
|
50
|
+
} // namespace simdutf
|
|
51
|
+
|
|
52
|
+
#endif
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#ifndef SIMDUTF_LATIN1_TO_UTF32_H
|
|
2
|
+
#define SIMDUTF_LATIN1_TO_UTF32_H
|
|
3
|
+
|
|
4
|
+
namespace simdutf {
|
|
5
|
+
namespace scalar {
|
|
6
|
+
namespace {
|
|
7
|
+
namespace latin1_to_utf32 {
|
|
8
|
+
|
|
9
|
+
template <typename InputPtr>
|
|
10
|
+
#if SIMDUTF_CPLUSPLUS20
|
|
11
|
+
requires simdutf::detail::indexes_into_byte_like<InputPtr>
|
|
12
|
+
#endif
|
|
13
|
+
simdutf_constexpr23 size_t convert(InputPtr data, size_t len,
|
|
14
|
+
char32_t *utf32_output) {
|
|
15
|
+
char32_t *start{utf32_output};
|
|
16
|
+
for (size_t i = 0; i < len; i++) {
|
|
17
|
+
*utf32_output++ = uint8_t(data[i]);
|
|
18
|
+
}
|
|
19
|
+
return utf32_output - start;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
} // namespace latin1_to_utf32
|
|
23
|
+
} // unnamed namespace
|
|
24
|
+
} // namespace scalar
|
|
25
|
+
} // namespace simdutf
|
|
26
|
+
|
|
27
|
+
#endif
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
#ifndef SIMDUTF_LATIN1_TO_UTF8_H
|
|
2
|
+
#define SIMDUTF_LATIN1_TO_UTF8_H
|
|
3
|
+
|
|
4
|
+
namespace simdutf {
|
|
5
|
+
namespace scalar {
|
|
6
|
+
namespace {
|
|
7
|
+
namespace latin1_to_utf8 {
|
|
8
|
+
|
|
9
|
+
template <typename InputPtr, typename OutputPtr>
|
|
10
|
+
#if SIMDUTF_CPLUSPLUS20
|
|
11
|
+
requires(simdutf::detail::indexes_into_byte_like<InputPtr> &&
|
|
12
|
+
simdutf::detail::index_assignable_from_char<OutputPtr>)
|
|
13
|
+
#endif
|
|
14
|
+
simdutf_constexpr23 size_t convert(InputPtr data, size_t len,
|
|
15
|
+
OutputPtr utf8_output) {
|
|
16
|
+
// const unsigned char *data = reinterpret_cast<const unsigned char *>(buf);
|
|
17
|
+
size_t pos = 0;
|
|
18
|
+
size_t utf8_pos = 0;
|
|
19
|
+
|
|
20
|
+
while (pos < len) {
|
|
21
|
+
#if SIMDUTF_CPLUSPLUS23
|
|
22
|
+
if !consteval
|
|
23
|
+
#endif
|
|
24
|
+
{
|
|
25
|
+
// try to convert the next block of 16 ASCII bytes
|
|
26
|
+
if (pos + 16 <= len) { // if it is safe to read 16 more bytes, check that
|
|
27
|
+
// they are ascii
|
|
28
|
+
uint64_t v1;
|
|
29
|
+
::memcpy(&v1, data + pos, sizeof(uint64_t));
|
|
30
|
+
uint64_t v2;
|
|
31
|
+
::memcpy(&v2, data + pos + sizeof(uint64_t), sizeof(uint64_t));
|
|
32
|
+
uint64_t v{v1 |
|
|
33
|
+
v2}; // We are only interested in these bits: 1000 1000 1000
|
|
34
|
+
// 1000, so it makes sense to concatenate everything
|
|
35
|
+
if ((v & 0x8080808080808080) ==
|
|
36
|
+
0) { // if NONE of these are set, e.g. all of them are zero, then
|
|
37
|
+
// everything is ASCII
|
|
38
|
+
size_t final_pos = pos + 16;
|
|
39
|
+
while (pos < final_pos) {
|
|
40
|
+
utf8_output[utf8_pos++] = char(data[pos]);
|
|
41
|
+
pos++;
|
|
42
|
+
}
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
} // if (pos + 16 <= len)
|
|
46
|
+
} // !consteval scope
|
|
47
|
+
|
|
48
|
+
unsigned char byte = data[pos];
|
|
49
|
+
if ((byte & 0x80) == 0) { // if ASCII
|
|
50
|
+
// will generate one UTF-8 bytes
|
|
51
|
+
utf8_output[utf8_pos++] = char(byte);
|
|
52
|
+
pos++;
|
|
53
|
+
} else {
|
|
54
|
+
// will generate two UTF-8 bytes
|
|
55
|
+
utf8_output[utf8_pos++] = char((byte >> 6) | 0b11000000);
|
|
56
|
+
utf8_output[utf8_pos++] = char((byte & 0b111111) | 0b10000000);
|
|
57
|
+
pos++;
|
|
58
|
+
}
|
|
59
|
+
} // while
|
|
60
|
+
return utf8_pos;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
simdutf_really_inline size_t convert(const char *buf, size_t len,
|
|
64
|
+
char *utf8_output) {
|
|
65
|
+
return convert(reinterpret_cast<const unsigned char *>(buf), len,
|
|
66
|
+
utf8_output);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
inline size_t convert_safe(const char *buf, size_t len, char *utf8_output,
|
|
70
|
+
size_t utf8_len) {
|
|
71
|
+
const unsigned char *data = reinterpret_cast<const unsigned char *>(buf);
|
|
72
|
+
size_t pos = 0;
|
|
73
|
+
size_t skip_pos = 0;
|
|
74
|
+
size_t utf8_pos = 0;
|
|
75
|
+
while (pos < len && utf8_pos < utf8_len) {
|
|
76
|
+
// try to convert the next block of 16 ASCII bytes
|
|
77
|
+
if (pos >= skip_pos && pos + 16 <= len &&
|
|
78
|
+
utf8_pos + 16 <= utf8_len) { // if it is safe to read 16 more bytes,
|
|
79
|
+
// check that they are ascii
|
|
80
|
+
uint64_t v1;
|
|
81
|
+
::memcpy(&v1, data + pos, sizeof(uint64_t));
|
|
82
|
+
uint64_t v2;
|
|
83
|
+
::memcpy(&v2, data + pos + sizeof(uint64_t), sizeof(uint64_t));
|
|
84
|
+
uint64_t v{v1 |
|
|
85
|
+
v2}; // We are only interested in these bits: 1000 1000 1000
|
|
86
|
+
// 1000, so it makes sense to concatenate everything
|
|
87
|
+
if ((v & 0x8080808080808080) ==
|
|
88
|
+
0) { // if NONE of these are set, e.g. all of them are zero, then
|
|
89
|
+
// everything is ASCII
|
|
90
|
+
::memcpy(utf8_output + utf8_pos, buf + pos, 16);
|
|
91
|
+
utf8_pos += 16;
|
|
92
|
+
pos += 16;
|
|
93
|
+
} else {
|
|
94
|
+
// At least one of the next 16 bytes are not ASCII, we will process them
|
|
95
|
+
// one by one
|
|
96
|
+
skip_pos = pos + 16;
|
|
97
|
+
}
|
|
98
|
+
} else {
|
|
99
|
+
const auto byte = data[pos];
|
|
100
|
+
if ((byte & 0x80) == 0) { // if ASCII
|
|
101
|
+
// will generate one UTF-8 bytes
|
|
102
|
+
utf8_output[utf8_pos++] = char(byte);
|
|
103
|
+
pos++;
|
|
104
|
+
} else if (utf8_pos + 2 <= utf8_len) {
|
|
105
|
+
// will generate two UTF-8 bytes
|
|
106
|
+
utf8_output[utf8_pos++] = char((byte >> 6) | 0b11000000);
|
|
107
|
+
utf8_output[utf8_pos++] = char((byte & 0b111111) | 0b10000000);
|
|
108
|
+
pos++;
|
|
109
|
+
} else {
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return utf8_pos;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
template <typename InputPtr, typename OutputPtr>
|
|
118
|
+
#if SIMDUTF_CPLUSPLUS20
|
|
119
|
+
requires(simdutf::detail::indexes_into_byte_like<InputPtr> &&
|
|
120
|
+
simdutf::detail::index_assignable_from_char<OutputPtr>)
|
|
121
|
+
#endif
|
|
122
|
+
simdutf_constexpr23 size_t convert_safe_constexpr(InputPtr data, size_t len,
|
|
123
|
+
OutputPtr utf8_output,
|
|
124
|
+
size_t utf8_len) {
|
|
125
|
+
size_t pos = 0;
|
|
126
|
+
size_t utf8_pos = 0;
|
|
127
|
+
while (pos < len && utf8_pos < utf8_len) {
|
|
128
|
+
const unsigned char byte = data[pos];
|
|
129
|
+
if ((byte & 0x80) == 0) { // if ASCII
|
|
130
|
+
// will generate one UTF-8 bytes
|
|
131
|
+
utf8_output[utf8_pos++] = char(byte);
|
|
132
|
+
pos++;
|
|
133
|
+
} else if (utf8_pos + 2 <= utf8_len) {
|
|
134
|
+
// will generate two UTF-8 bytes
|
|
135
|
+
utf8_output[utf8_pos++] = char((byte >> 6) | 0b11000000);
|
|
136
|
+
utf8_output[utf8_pos++] = char((byte & 0b111111) | 0b10000000);
|
|
137
|
+
pos++;
|
|
138
|
+
} else {
|
|
139
|
+
break;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return utf8_pos;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
template <typename InputPtr>
|
|
146
|
+
#if SIMDUTF_CPLUSPLUS20
|
|
147
|
+
requires simdutf::detail::indexes_into_byte_like<InputPtr>
|
|
148
|
+
#endif
|
|
149
|
+
simdutf_constexpr23 simdutf_warn_unused size_t
|
|
150
|
+
utf8_length_from_latin1(InputPtr input, size_t length) noexcept {
|
|
151
|
+
size_t answer = length;
|
|
152
|
+
size_t i = 0;
|
|
153
|
+
|
|
154
|
+
#if SIMDUTF_CPLUSPLUS23
|
|
155
|
+
if !consteval
|
|
156
|
+
#endif
|
|
157
|
+
{
|
|
158
|
+
auto pop = [](uint64_t v) {
|
|
159
|
+
return (size_t)(((v >> 7) & UINT64_C(0x0101010101010101)) *
|
|
160
|
+
UINT64_C(0x0101010101010101) >>
|
|
161
|
+
56);
|
|
162
|
+
};
|
|
163
|
+
for (; i + 32 <= length; i += 32) {
|
|
164
|
+
uint64_t v;
|
|
165
|
+
memcpy(&v, input + i, 8);
|
|
166
|
+
answer += pop(v);
|
|
167
|
+
memcpy(&v, input + i + 8, sizeof(v));
|
|
168
|
+
answer += pop(v);
|
|
169
|
+
memcpy(&v, input + i + 16, sizeof(v));
|
|
170
|
+
answer += pop(v);
|
|
171
|
+
memcpy(&v, input + i + 24, sizeof(v));
|
|
172
|
+
answer += pop(v);
|
|
173
|
+
}
|
|
174
|
+
for (; i + 8 <= length; i += 8) {
|
|
175
|
+
uint64_t v;
|
|
176
|
+
memcpy(&v, input + i, sizeof(v));
|
|
177
|
+
answer += pop(v);
|
|
178
|
+
}
|
|
179
|
+
} // !consteval scope
|
|
180
|
+
for (; i + 1 <= length; i += 1) {
|
|
181
|
+
answer += static_cast<uint8_t>(input[i]) >> 7;
|
|
182
|
+
}
|
|
183
|
+
return answer;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
} // namespace latin1_to_utf8
|
|
187
|
+
} // unnamed namespace
|
|
188
|
+
} // namespace scalar
|
|
189
|
+
} // namespace simdutf
|
|
190
|
+
|
|
191
|
+
#endif
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
#ifndef SIMDUTF_SWAP_BYTES_H
|
|
2
|
+
#define SIMDUTF_SWAP_BYTES_H
|
|
3
|
+
|
|
4
|
+
namespace simdutf {
|
|
5
|
+
namespace scalar {
|
|
6
|
+
|
|
7
|
+
constexpr inline simdutf_warn_unused uint16_t
|
|
8
|
+
u16_swap_bytes(const uint16_t word) {
|
|
9
|
+
return uint16_t((word >> 8) | (word << 8));
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
constexpr inline simdutf_warn_unused uint32_t
|
|
13
|
+
u32_swap_bytes(const uint32_t word) {
|
|
14
|
+
return ((word >> 24) & 0xff) | // move byte 3 to byte 0
|
|
15
|
+
((word << 8) & 0xff0000) | // move byte 1 to byte 2
|
|
16
|
+
((word >> 8) & 0xff00) | // move byte 2 to byte 1
|
|
17
|
+
((word << 24) & 0xff000000); // byte 0 to byte 3
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
namespace utf32 {
|
|
21
|
+
template <endianness big_endian> constexpr uint32_t swap_if_needed(uint32_t c) {
|
|
22
|
+
return !match_system(big_endian) ? scalar::u32_swap_bytes(c) : c;
|
|
23
|
+
}
|
|
24
|
+
} // namespace utf32
|
|
25
|
+
|
|
26
|
+
namespace utf16 {
|
|
27
|
+
template <endianness big_endian> constexpr uint16_t swap_if_needed(uint16_t c) {
|
|
28
|
+
return !match_system(big_endian) ? scalar::u16_swap_bytes(c) : c;
|
|
29
|
+
}
|
|
30
|
+
} // namespace utf16
|
|
31
|
+
|
|
32
|
+
} // namespace scalar
|
|
33
|
+
} // namespace simdutf
|
|
34
|
+
|
|
35
|
+
#endif
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
#ifndef SIMDUTF_UTF16_H
|
|
2
|
+
#define SIMDUTF_UTF16_H
|
|
3
|
+
|
|
4
|
+
namespace simdutf {
|
|
5
|
+
namespace scalar {
|
|
6
|
+
namespace utf16 {
|
|
7
|
+
|
|
8
|
+
template <endianness big_endian>
|
|
9
|
+
simdutf_warn_unused simdutf_constexpr23 bool
|
|
10
|
+
validate_as_ascii(const char16_t *data, size_t len) noexcept {
|
|
11
|
+
for (size_t pos = 0; pos < len; pos++) {
|
|
12
|
+
char16_t word = scalar::utf16::swap_if_needed<big_endian>(data[pos]);
|
|
13
|
+
if (word >= 0x80) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
template <endianness big_endian>
|
|
21
|
+
inline simdutf_warn_unused simdutf_constexpr23 bool
|
|
22
|
+
validate(const char16_t *data, size_t len) noexcept {
|
|
23
|
+
uint64_t pos = 0;
|
|
24
|
+
while (pos < len) {
|
|
25
|
+
char16_t word = scalar::utf16::swap_if_needed<big_endian>(data[pos]);
|
|
26
|
+
if ((word & 0xF800) == 0xD800) {
|
|
27
|
+
if (pos + 1 >= len) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
char16_t diff = char16_t(word - 0xD800);
|
|
31
|
+
if (diff > 0x3FF) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
char16_t next_word = !match_system(big_endian)
|
|
35
|
+
? u16_swap_bytes(data[pos + 1])
|
|
36
|
+
: data[pos + 1];
|
|
37
|
+
char16_t diff2 = char16_t(next_word - 0xDC00);
|
|
38
|
+
if (diff2 > 0x3FF) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
pos += 2;
|
|
42
|
+
} else {
|
|
43
|
+
pos++;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
template <endianness big_endian>
|
|
50
|
+
inline simdutf_warn_unused simdutf_constexpr23 result
|
|
51
|
+
validate_with_errors(const char16_t *data, size_t len) noexcept {
|
|
52
|
+
size_t pos = 0;
|
|
53
|
+
while (pos < len) {
|
|
54
|
+
char16_t word = scalar::utf16::swap_if_needed<big_endian>(data[pos]);
|
|
55
|
+
if ((word & 0xF800) == 0xD800) {
|
|
56
|
+
if (pos + 1 >= len) {
|
|
57
|
+
return result(error_code::SURROGATE, pos);
|
|
58
|
+
}
|
|
59
|
+
char16_t diff = char16_t(word - 0xD800);
|
|
60
|
+
if (diff > 0x3FF) {
|
|
61
|
+
return result(error_code::SURROGATE, pos);
|
|
62
|
+
}
|
|
63
|
+
char16_t next_word = !match_system(big_endian)
|
|
64
|
+
? u16_swap_bytes(data[pos + 1])
|
|
65
|
+
: data[pos + 1];
|
|
66
|
+
char16_t diff2 = uint16_t(next_word - 0xDC00);
|
|
67
|
+
if (diff2 > 0x3FF) {
|
|
68
|
+
return result(error_code::SURROGATE, pos);
|
|
69
|
+
}
|
|
70
|
+
pos += 2;
|
|
71
|
+
} else {
|
|
72
|
+
pos++;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return result(error_code::SUCCESS, pos);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
template <endianness big_endian>
|
|
79
|
+
simdutf_constexpr23 size_t count_code_points(const char16_t *p, size_t len) {
|
|
80
|
+
// We are not BOM aware.
|
|
81
|
+
size_t counter{0};
|
|
82
|
+
for (size_t i = 0; i < len; i++) {
|
|
83
|
+
char16_t word = scalar::utf16::swap_if_needed<big_endian>(p[i]);
|
|
84
|
+
counter += ((word & 0xFC00) != 0xDC00);
|
|
85
|
+
}
|
|
86
|
+
return counter;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
template <endianness big_endian>
|
|
90
|
+
simdutf_constexpr23 size_t utf8_length_from_utf16(const char16_t *p,
|
|
91
|
+
size_t len) {
|
|
92
|
+
// We are not BOM aware.
|
|
93
|
+
size_t counter{0};
|
|
94
|
+
for (size_t i = 0; i < len; i++) {
|
|
95
|
+
char16_t word = scalar::utf16::swap_if_needed<big_endian>(p[i]);
|
|
96
|
+
counter++; // ASCII
|
|
97
|
+
counter += static_cast<size_t>(
|
|
98
|
+
word >
|
|
99
|
+
0x7F); // non-ASCII is at least 2 bytes, surrogates are 2*2 == 4 bytes
|
|
100
|
+
counter += static_cast<size_t>((word > 0x7FF && word <= 0xD7FF) ||
|
|
101
|
+
(word >= 0xE000)); // three-byte
|
|
102
|
+
}
|
|
103
|
+
return counter;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
template <endianness big_endian>
|
|
107
|
+
simdutf_constexpr23 size_t utf32_length_from_utf16(const char16_t *p,
|
|
108
|
+
size_t len) {
|
|
109
|
+
// We are not BOM aware.
|
|
110
|
+
size_t counter{0};
|
|
111
|
+
for (size_t i = 0; i < len; i++) {
|
|
112
|
+
char16_t word = scalar::utf16::swap_if_needed<big_endian>(p[i]);
|
|
113
|
+
counter += ((word & 0xFC00) != 0xDC00);
|
|
114
|
+
}
|
|
115
|
+
return counter;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
simdutf_really_inline simdutf_constexpr23 void
|
|
119
|
+
change_endianness_utf16(const char16_t *input, size_t size, char16_t *output) {
|
|
120
|
+
for (size_t i = 0; i < size; i++) {
|
|
121
|
+
*output++ = char16_t(input[i] >> 8 | input[i] << 8);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
template <endianness big_endian>
|
|
126
|
+
simdutf_warn_unused simdutf_constexpr23 size_t
|
|
127
|
+
trim_partial_utf16(const char16_t *input, size_t length) {
|
|
128
|
+
if (length == 0) {
|
|
129
|
+
return 0;
|
|
130
|
+
}
|
|
131
|
+
uint16_t last_word = uint16_t(input[length - 1]);
|
|
132
|
+
last_word = scalar::utf16::swap_if_needed<big_endian>(last_word);
|
|
133
|
+
length -= ((last_word & 0xFC00) == 0xD800);
|
|
134
|
+
return length;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
template <endianness big_endian>
|
|
138
|
+
simdutf_constexpr bool is_high_surrogate(char16_t c) {
|
|
139
|
+
c = scalar::utf16::swap_if_needed<big_endian>(c);
|
|
140
|
+
return (0xd800 <= c && c <= 0xdbff);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
template <endianness big_endian>
|
|
144
|
+
simdutf_constexpr bool is_low_surrogate(char16_t c) {
|
|
145
|
+
c = scalar::utf16::swap_if_needed<big_endian>(c);
|
|
146
|
+
return (0xdc00 <= c && c <= 0xdfff);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
simdutf_really_inline constexpr bool high_surrogate(char16_t c) {
|
|
150
|
+
return (0xd800 <= c && c <= 0xdbff);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
simdutf_really_inline constexpr bool low_surrogate(char16_t c) {
|
|
154
|
+
return (0xdc00 <= c && c <= 0xdfff);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
template <endianness big_endian>
|
|
158
|
+
simdutf_constexpr23 result
|
|
159
|
+
utf8_length_from_utf16_with_replacement(const char16_t *p, size_t len) {
|
|
160
|
+
bool any_surrogates = false;
|
|
161
|
+
// We are not BOM aware.
|
|
162
|
+
size_t counter{0};
|
|
163
|
+
for (size_t i = 0; i < len; i++) {
|
|
164
|
+
if (is_high_surrogate<big_endian>(p[i])) {
|
|
165
|
+
any_surrogates = true;
|
|
166
|
+
// surrogate pair
|
|
167
|
+
if (i + 1 < len && is_low_surrogate<big_endian>(p[i + 1])) {
|
|
168
|
+
counter += 4;
|
|
169
|
+
i++; // skip low surrogate
|
|
170
|
+
} else {
|
|
171
|
+
counter += 3; // unpaired high surrogate replaced by U+FFFD
|
|
172
|
+
}
|
|
173
|
+
continue;
|
|
174
|
+
} else if (is_low_surrogate<big_endian>(p[i])) {
|
|
175
|
+
any_surrogates = true;
|
|
176
|
+
counter += 3; // unpaired low surrogate replaced by U+FFFD
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
char16_t word = !match_system(big_endian) ? u16_swap_bytes(p[i]) : p[i];
|
|
180
|
+
counter++; // at least 1 byte
|
|
181
|
+
counter +=
|
|
182
|
+
static_cast<size_t>(word > 0x7F); // non-ASCII is at least 2 bytes
|
|
183
|
+
counter += static_cast<size_t>(word > 0x7FF); // three-byte
|
|
184
|
+
}
|
|
185
|
+
return {any_surrogates ? error_code::SURROGATE : error_code::SUCCESS,
|
|
186
|
+
counter};
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// variable templates are a C++14 extension
|
|
190
|
+
template <endianness big_endian> constexpr char16_t replacement() {
|
|
191
|
+
return !match_system(big_endian) ? scalar::u16_swap_bytes(0xfffd) : 0xfffd;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
template <endianness big_endian>
|
|
195
|
+
simdutf_constexpr23 void to_well_formed_utf16(const char16_t *input, size_t len,
|
|
196
|
+
char16_t *output) {
|
|
197
|
+
const char16_t replacement = utf16::replacement<big_endian>();
|
|
198
|
+
bool high_surrogate_prev = false, high_surrogate, low_surrogate;
|
|
199
|
+
size_t i = 0;
|
|
200
|
+
for (; i < len; i++) {
|
|
201
|
+
char16_t c = input[i];
|
|
202
|
+
high_surrogate = is_high_surrogate<big_endian>(c);
|
|
203
|
+
low_surrogate = is_low_surrogate<big_endian>(c);
|
|
204
|
+
if (high_surrogate_prev && !low_surrogate) {
|
|
205
|
+
output[i - 1] = replacement;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
if (!high_surrogate_prev && low_surrogate) {
|
|
209
|
+
output[i] = replacement;
|
|
210
|
+
} else {
|
|
211
|
+
output[i] = input[i];
|
|
212
|
+
}
|
|
213
|
+
high_surrogate_prev = high_surrogate;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/* string may not end with high surrogate */
|
|
217
|
+
if (high_surrogate_prev) {
|
|
218
|
+
output[i - 1] = replacement;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
} // namespace utf16
|
|
223
|
+
} // namespace scalar
|
|
224
|
+
} // namespace simdutf
|
|
225
|
+
|
|
226
|
+
#endif
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
#ifndef SIMDUTF_UTF16_TO_LATIN1_H
|
|
2
|
+
#define SIMDUTF_UTF16_TO_LATIN1_H
|
|
3
|
+
|
|
4
|
+
#include <cstring> // for std::memcpy
|
|
5
|
+
|
|
6
|
+
namespace simdutf {
|
|
7
|
+
namespace scalar {
|
|
8
|
+
namespace {
|
|
9
|
+
namespace utf16_to_latin1 {
|
|
10
|
+
|
|
11
|
+
template <endianness big_endian, typename InputPtr, typename OutputPtr>
|
|
12
|
+
#if SIMDUTF_CPLUSPLUS20
|
|
13
|
+
requires(simdutf::detail::indexes_into_utf16<InputPtr> &&
|
|
14
|
+
simdutf::detail::index_assignable_from_char<OutputPtr>)
|
|
15
|
+
#endif
|
|
16
|
+
simdutf_constexpr23 size_t convert(InputPtr data, size_t len,
|
|
17
|
+
OutputPtr latin_output) {
|
|
18
|
+
if (len == 0) {
|
|
19
|
+
return 0;
|
|
20
|
+
}
|
|
21
|
+
size_t pos = 0;
|
|
22
|
+
const auto latin_output_start = latin_output;
|
|
23
|
+
uint16_t word = 0;
|
|
24
|
+
uint16_t too_large = 0;
|
|
25
|
+
|
|
26
|
+
while (pos < len) {
|
|
27
|
+
word = !match_system(big_endian) ? u16_swap_bytes(data[pos]) : data[pos];
|
|
28
|
+
too_large |= word;
|
|
29
|
+
*latin_output++ = char(word & 0xFF);
|
|
30
|
+
pos++;
|
|
31
|
+
}
|
|
32
|
+
if ((too_large & 0xFF00) != 0) {
|
|
33
|
+
return 0;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return latin_output - latin_output_start;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
template <endianness big_endian, typename InputPtr, typename OutputPtr>
|
|
40
|
+
#if SIMDUTF_CPLUSPLUS20
|
|
41
|
+
requires(simdutf::detail::indexes_into_utf16<InputPtr> &&
|
|
42
|
+
simdutf::detail::index_assignable_from_char<OutputPtr>)
|
|
43
|
+
#endif
|
|
44
|
+
simdutf_constexpr23 result convert_with_errors(InputPtr data, size_t len,
|
|
45
|
+
OutputPtr latin_output) {
|
|
46
|
+
if (len == 0) {
|
|
47
|
+
return result(error_code::SUCCESS, 0);
|
|
48
|
+
}
|
|
49
|
+
size_t pos = 0;
|
|
50
|
+
auto start = latin_output;
|
|
51
|
+
uint16_t word;
|
|
52
|
+
|
|
53
|
+
while (pos < len) {
|
|
54
|
+
#if SIMDUTF_CPLUSPLUS23
|
|
55
|
+
if !consteval
|
|
56
|
+
#endif
|
|
57
|
+
{
|
|
58
|
+
if (pos + 16 <= len) { // if it is safe to read 32 more bytes, check that
|
|
59
|
+
// they are Latin1
|
|
60
|
+
uint64_t v1, v2, v3, v4;
|
|
61
|
+
::memcpy(&v1, data + pos, sizeof(uint64_t));
|
|
62
|
+
::memcpy(&v2, data + pos + 4, sizeof(uint64_t));
|
|
63
|
+
::memcpy(&v3, data + pos + 8, sizeof(uint64_t));
|
|
64
|
+
::memcpy(&v4, data + pos + 12, sizeof(uint64_t));
|
|
65
|
+
|
|
66
|
+
if simdutf_constexpr (!match_system(big_endian)) {
|
|
67
|
+
v1 = (v1 >> 8) | (v1 << (64 - 8));
|
|
68
|
+
}
|
|
69
|
+
if simdutf_constexpr (!match_system(big_endian)) {
|
|
70
|
+
v2 = (v2 >> 8) | (v2 << (64 - 8));
|
|
71
|
+
}
|
|
72
|
+
if simdutf_constexpr (!match_system(big_endian)) {
|
|
73
|
+
v3 = (v3 >> 8) | (v3 << (64 - 8));
|
|
74
|
+
}
|
|
75
|
+
if simdutf_constexpr (!match_system(big_endian)) {
|
|
76
|
+
v4 = (v4 >> 8) | (v4 << (64 - 8));
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (((v1 | v2 | v3 | v4) & 0xFF00FF00FF00FF00) == 0) {
|
|
80
|
+
size_t final_pos = pos + 16;
|
|
81
|
+
while (pos < final_pos) {
|
|
82
|
+
*latin_output++ = !match_system(big_endian)
|
|
83
|
+
? char(u16_swap_bytes(data[pos]))
|
|
84
|
+
: char(data[pos]);
|
|
85
|
+
pos++;
|
|
86
|
+
}
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
word = !match_system(big_endian) ? u16_swap_bytes(data[pos]) : data[pos];
|
|
93
|
+
if ((word & 0xFF00) == 0) {
|
|
94
|
+
*latin_output++ = char(word & 0xFF);
|
|
95
|
+
pos++;
|
|
96
|
+
} else {
|
|
97
|
+
return result(error_code::TOO_LARGE, pos);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return result(error_code::SUCCESS, latin_output - start);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
} // namespace utf16_to_latin1
|
|
104
|
+
} // unnamed namespace
|
|
105
|
+
} // namespace scalar
|
|
106
|
+
} // namespace simdutf
|
|
107
|
+
|
|
108
|
+
#endif
|