5#include "roo_backport.h"
6#include "roo_backport/string_view.h"
38#if __cplusplus >= 202002L
44 const byte *
data()
const {
return ptr_; }
47 if (ptr_ == end_)
return false;
57template <
typename OutputItr>
65 std::vector<char32_t>
result;
72template <
typename OutputIterator>
76 }
else if (
v <= 0x7FF) {
77 itr.write((
byte)((
v >> 6) | 0xC0));
78 itr.write((
byte)((
v & 0x3F) | 0x80));
79 }
else if (
v <= 0xFFFF) {
80 itr.write((
byte)((
v >> 12) | 0xE0));
81 itr.write((
byte)(((
v >> 6) & 0x3F) | 0x80));
82 itr.write((
byte)((
v & 0x3F) | 0x80));
84 itr.write((
byte)((
v >> 18) | 0xF0));
85 itr.write((
byte)(((
v >> 12) & 0x3F) | 0x80));
86 itr.write((
byte)(((
v >> 6) & 0x3F) | 0x80));
87 itr.write((
byte)((
v & 0x3F) | 0x80));
Utf8Decoder(const byte *data, size_t size)
Utf8Decoder(const byte data[N])
bool next(char32_t &result)
const byte * data() const
Utf8Decoder(const char *data, size_t size)
Utf8Decoder(const char data[N])
Utf8Decoder(roo::string_view s)
void DecodeUtfString(roo::string_view s, OutputItr itr)
roo::basic_string_view< CharT, Traits > basic_string_view
void WriteUtf8Char(OutputIterator &itr, char32_t v)
std::vector< char32_t > DecodeUtfStringToVector(roo::string_view s)
size_t u8next_(const char *start, const char *end, char32_t &val)