| 9 | namespace mllm::preprocessor { |
| 10 | |
| 11 | std::string wideString2Utf8String(const std::wstring& wstr) { |
| 12 | std::string result; |
| 13 | for (wchar_t wc : wstr) { |
| 14 | if (wc <= 0x7FU) { |
| 15 | result.push_back(static_cast<char>(wc)); |
| 16 | } else if (wc <= 0x7FFU) { |
| 17 | result.push_back(static_cast<char>(0xC0U | ((wc >> 6U) & 0x1FU))); |
| 18 | result.push_back(static_cast<char>(0x80U | (wc & 0x3FU))); |
| 19 | } else if (wc <= 0xFFFFU) { |
| 20 | result.push_back(static_cast<char>(0xE0U | ((wc >> 12U) & 0x0FU))); |
| 21 | result.push_back(static_cast<char>(0x80U | ((wc >> 6U) & 0x3FU))); |
| 22 | result.push_back(static_cast<char>(0x80U | (wc & 0x3FU))); |
| 23 | } else if (wc <= 0x10FFFFU) { |
| 24 | result.push_back(static_cast<char>(0xF0U | ((wc >> 18U) & 0x07U))); |
| 25 | result.push_back(static_cast<char>(0x80U | ((wc >> 12U) & 0x3FU))); |
| 26 | result.push_back(static_cast<char>(0x80U | ((wc >> 6U) & 0x3FU))); |
| 27 | result.push_back(static_cast<char>(0x80U | (wc & 0x3FU))); |
| 28 | } |
| 29 | } |
| 30 | return result; |
| 31 | } |
| 32 | |
| 33 | std::wstring utf8string2WideString(const std::string& str) { |
| 34 | std::wstring w_ret_string; |
no outgoing calls
no test coverage detected