#ifndef SIMDUTF_LATIN1_TO_UTF16_H #define SIMDUTF_LATIN1_TO_UTF16_H namespace simdutf { namespace scalar { namespace { namespace latin1_to_utf16 { template inline size_t convert(const char *buf, size_t len, char16_t *utf16_output) { const uint8_t *data = reinterpret_cast(buf); size_t pos = 0; char16_t *start{utf16_output}; while (pos < len) { uint16_t word = uint16_t(data[pos]); // extend Latin-1 char to 16-bit Unicode code point *utf16_output++ = char16_t(match_system(big_endian) ? word : utf16::swap_bytes(word)); pos++; } return utf16_output - start; } template inline result convert_with_errors(const char *buf, size_t len, char16_t *utf16_output) { const uint8_t *data = reinterpret_cast(buf); size_t pos = 0; char16_t *start{utf16_output}; while (pos < len) { uint16_t word = uint16_t(data[pos]); // extend Latin-1 char to 16-bit Unicode code point *utf16_output++ = char16_t(match_system(big_endian) ? word : utf16::swap_bytes(word)); pos++; } return result(error_code::SUCCESS, utf16_output - start); } } // namespace latin1_to_utf16 } // unnamed namespace } // namespace scalar } // namespace simdutf #endif