28#ifndef UTF8_FOR_CPP_UNCHECKED_H_2675DCD0_9480_4c0c_B92A_CC14C027B731
29#define UTF8_FOR_CPP_UNCHECKED_H_2675DCD0_9480_4c0c_B92A_CC14C027B731
37 template <
typename octet_iterator>
43 template <
typename word_iterator>
49 template <
typename octet_iterator,
typename output_iterator>
52 while (start != end) {
53 octet_iterator sequence_start = start;
57 for (octet_iterator it = sequence_start; it != start; ++it)
82 template <
typename octet_iterator,
typename output_iterator>
83 inline output_iterator
replace_invalid(octet_iterator start, octet_iterator end, output_iterator out)
92 replace_invalid(s.begin(), s.end(), std::back_inserter(result), replacement);
103 template <
typename octet_iterator>
112 cp = ((cp << 6) & 0x7ff) + ((*it) & 0x3f);
118 cp =
static_cast<utfchar32_t>(cp + ((*it) & 0x3f));
126 cp =
static_cast<utfchar32_t>(cp + ((*it) & 0x3f));
133 template <
typename octet_iterator>
139 template <
typename word_iterator>
148 template <
typename octet_iterator>
152 octet_iterator temp = it;
156 template <
typename octet_iterator,
typename distance_type>
157 void advance(octet_iterator& it, distance_type n)
159 const distance_type zero(0);
162 for (distance_type i = n; i < zero; ++i)
166 for (distance_type i = zero; i < n; ++i)
171 template <
typename octet_iterator>
172 typename std::iterator_traits<octet_iterator>::difference_type
173 distance(octet_iterator first, octet_iterator last)
175 typename std::iterator_traits<octet_iterator>::difference_type dist;
176 for (dist = 0; first < last; ++dist)
181 template <
typename u16bit_iterator,
typename octet_iterator>
182 octet_iterator
utf16to8(u16bit_iterator start, u16bit_iterator end, octet_iterator result)
184 while (start != end) {
198 template <
typename u16bit_iterator,
typename octet_iterator>
199 u16bit_iterator
utf8to16(octet_iterator start, octet_iterator end, u16bit_iterator result)
201 while (start < end) {
213 template <
typename octet_iterator,
typename u32bit_iterator>
214 octet_iterator
utf32to8(u32bit_iterator start, u32bit_iterator end, octet_iterator result)
222 template <
typename octet_iterator,
typename u32bit_iterator>
223 u32bit_iterator
utf8to32(octet_iterator start, octet_iterator end, u32bit_iterator result)
232 template <
typename octet_iterator>
242 explicit iterator (
const octet_iterator& octet_it): it(octet_it) {}
244 octet_iterator
base ()
const {
return it; }
247 octet_iterator temp = it;
252 return (it == rhs.it);
utfchar32_t value_type
Definition unchecked.h:236
iterator(const octet_iterator &octet_it)
Definition unchecked.h:242
bool operator!=(const iterator &rhs) const
Definition unchecked.h:254
octet_iterator base() const
Definition unchecked.h:244
iterator & operator--()
Definition unchecked.h:269
iterator()
Definition unchecked.h:241
std::bidirectional_iterator_tag iterator_category
Definition unchecked.h:240
iterator & operator++()
Definition unchecked.h:258
utfchar32_t operator*() const
Definition unchecked.h:245
bool operator==(const iterator &rhs) const
Definition unchecked.h:250
utfchar32_t * pointer
Definition unchecked.h:237
utfchar32_t & reference
Definition unchecked.h:238
std::ptrdiff_t difference_type
Definition unchecked.h:239
bool is_lead_surrogate(utfchar32_t cp)
Definition core.h:106
octet_iterator append(utfchar32_t cp, octet_iterator result)
Definition core.h:356
const utfchar32_t SURROGATE_OFFSET
Definition core.h:83
utfchar8_t mask8(octet_type oc)
Definition core.h:89
utfchar16_t mask16(u16_type oc)
Definition core.h:95
word_iterator append16(utfchar32_t cp, word_iterator result)
Definition core.h:405
utf_error
Definition core.h:164
@ INCOMPLETE_SEQUENCE
Definition core.h:164
@ INVALID_LEAD
Definition core.h:164
@ OVERLONG_SEQUENCE
Definition core.h:164
@ INVALID_CODE_POINT
Definition core.h:164
@ NOT_ENOUGH_ROOM
Definition core.h:164
@ UTF8_OK
Definition core.h:164
bool is_trail(octet_type oc)
Definition core.h:101
utf_error validate_next(octet_iterator &it, octet_iterator end, utfchar32_t &code_point)
Definition core.h:253
int sequence_length(octet_iterator lead_it)
Definition core.h:132
const utfchar16_t TRAIL_SURROGATE_MIN
Definition core.h:80
const utfchar16_t LEAD_OFFSET
Definition core.h:82
Definition unchecked.h:36
std::iterator_traits< octet_iterator >::difference_type distance(octet_iterator first, octet_iterator last)
Definition unchecked.h:173
octet_iterator append(utfchar32_t cp, octet_iterator result)
Definition unchecked.h:38
utfchar32_t next16(word_iterator &it)
Definition unchecked.h:140
void advance(octet_iterator &it, distance_type n)
Definition unchecked.h:157
word_iterator append16(utfchar32_t cp, word_iterator result)
Definition unchecked.h:44
u32bit_iterator utf8to32(octet_iterator start, octet_iterator end, u32bit_iterator result)
Definition unchecked.h:223
utfchar32_t prior(octet_iterator &it)
Definition unchecked.h:149
utfchar32_t next(octet_iterator &it)
Definition unchecked.h:104
output_iterator replace_invalid(octet_iterator start, octet_iterator end, output_iterator out, utfchar32_t replacement)
Definition unchecked.h:50
octet_iterator utf16to8(u16bit_iterator start, u16bit_iterator end, octet_iterator result)
Definition unchecked.h:182
u16bit_iterator utf8to16(octet_iterator start, octet_iterator end, u16bit_iterator result)
Definition unchecked.h:199
octet_iterator utf32to8(u32bit_iterator start, u32bit_iterator end, octet_iterator result)
Definition unchecked.h:214
utfchar32_t peek_next(octet_iterator it)
Definition unchecked.h:134
unsigned int utfchar32_t
Definition core.h:69
unsigned short utfchar16_t
Definition core.h:68