| 219 | } |
| 220 | |
| 221 | bool UTF8ToUTF16(const ccstd::string &utf8, std::u16string &outUtf16) { //NOLINT |
| 222 | #if CC_USE_SIMD_UTF |
| 223 | bool validutf8 = simdutf::validate_utf8(utf8.c_str(), utf8.length()); |
| 224 | if (!validutf8) { |
| 225 | outUtf16.clear(); |
| 226 | return false; |
| 227 | } |
| 228 | |
| 229 | // We need a buffer of size where to write the UTF-16LE words. |
| 230 | size_t expectedUtf16words = simdutf::utf16_length_from_utf8(utf8.c_str(), utf8.length()); |
| 231 | outUtf16.resize(expectedUtf16words); |
| 232 | |
| 233 | // convert to UTF-16LE |
| 234 | size_t utf16words = simdutf::convert_utf8_to_utf16le(utf8.c_str(), utf8.length(), outUtf16.data()); |
| 235 | bool validutf16 = simdutf::validate_utf16le(outUtf16.c_str(), utf16words); |
| 236 | if (!validutf16) { |
| 237 | outUtf16.clear(); |
| 238 | return false; |
| 239 | } |
| 240 | |
| 241 | return true; |
| 242 | #else |
| 243 | return utfConvert(utf8, outUtf16, ConvertUTF8toUTF16); |
| 244 | #endif |
| 245 | } |
| 246 | |
| 247 | bool UTF8ToUTF32(const ccstd::string &utf8, std::u32string &outUtf32) { //NOLINT |
| 248 | return utfConvert(utf8, outUtf32, ConvertUTF8toUTF32); |