25 #ifndef UTF16_TRANSFORM_INC
26 #define UTF16_TRANSFORM_INC 1
32 typedef void ReturnType;
34 CopyUtf16ToUtf8(
char *dst) : dst(dst) {}
36 void utf8(uint8_t c) { *dst++ = c; }
38 void finish() { *dst =
'\0'; }
44 template<
typename Iterator,
typename Fn>
45 inline typename Fn::ReturnType
transform(Iterator it, Iterator end, Fn fn) {
46 for (; it != end; ++it) {
51 if ((c != 0) && (c < 0x80)) {
54 }
else if (c < 0x800) {
56 unsigned char high = c >> 6;
57 unsigned char low = c & 0x3F;
64 char mid = (c >> 6) & 0x3F;
77 template<
typename Utf16Iterator>
78 inline void encode(Utf16Iterator begin, Utf16Iterator end,
char *dst) {
85 #endif // UTF16_TRANSFORM_INC
Fn::ReturnType transform(Iterator begin, Iterator end, Fn)
void encode(Utf16Iterator begin, Utf16Iterator end, char *dst)
Fn::ReturnType transform(Iterator begin, Iterator end, Fn)