28#ifndef UTF8_FOR_CPP_CHECKED_H_2675DCD0_9480_4c0c_B92A_CC14C027B731
29#define UTF8_FOR_CPP_CHECKED_H_2675DCD0_9480_4c0c_B92A_CC14C027B731
73 template <
typename octet_iterator>
82 template <
typename octet_iterator,
typename output_iterator>
85 while (start != end) {
86 octet_iterator sequence_start = start;
90 for (octet_iterator it = sequence_start; it != start; ++it)
115 template <
typename octet_iterator,
typename output_iterator>
116 inline output_iterator
replace_invalid(octet_iterator start, octet_iterator end, output_iterator out)
122 template <
typename octet_iterator>
142 template <
typename octet_iterator>
148 template <
typename octet_iterator>
155 octet_iterator end = it;
163 template <
typename octet_iterator,
typename distance_type>
164 void advance (octet_iterator& it, distance_type n, octet_iterator end)
166 const distance_type zero(0);
169 for (distance_type i = n; i < zero; ++i)
173 for (distance_type i = zero; i < n; ++i)
178 template <
typename octet_iterator>
179 typename std::iterator_traits<octet_iterator>::difference_type
180 distance (octet_iterator first, octet_iterator last)
182 typename std::iterator_traits<octet_iterator>::difference_type dist;
183 for (dist = 0; first < last; ++dist)
188 template <
typename u16bit_iterator,
typename octet_iterator>
189 octet_iterator
utf16to8 (u16bit_iterator start, u16bit_iterator end, octet_iterator result)
191 while (start != end) {
215 template <
typename u16bit_iterator,
typename octet_iterator>
216 u16bit_iterator
utf8to16 (octet_iterator start, octet_iterator end, u16bit_iterator result)
218 while (start < end) {
225 *result++ =
static_cast<uint16_t>(cp);
230 template <
typename octet_iterator,
typename u32bit_iterator>
231 octet_iterator
utf32to8 (u32bit_iterator start, u32bit_iterator end, octet_iterator result)
239 template <
typename octet_iterator,
typename u32bit_iterator>
240 u32bit_iterator
utf8to32 (octet_iterator start, octet_iterator end, u32bit_iterator result)
249 template <
typename octet_iterator>
252 octet_iterator range_start;
253 octet_iterator range_end;
262 const octet_iterator& rangestart,
263 const octet_iterator& rangeend) :
264 it(octet_it), range_start(rangestart), range_end(rangeend)
266 if (it < range_start || it > range_end)
267 throw std::out_of_range(
"Invalid utf-8 iterator position");
270 octet_iterator
base ()
const {
return it; }
273 octet_iterator temp = it;
278 if (range_start != rhs.range_start || range_end != rhs.range_end)
279 throw std::logic_error(
"Comparing utf-8 iterators defined with different ranges");
280 return (it == rhs.it);
312#if UTF_CPP_CPLUSPLUS >= 201703L
314#elif UTF_CPP_CPLUSPLUS >= 201103L
#define UTF_CPP_OVERRIDE
Definition core.h:45
#define UTF_CPP_NOEXCEPT
Definition core.h:46
output_iterator replace_invalid(octet_iterator start, octet_iterator end, output_iterator out, uint32_t replacement)
Definition checked.h:83
octet_iterator append(uint32_t cp, octet_iterator result)
The library API - functions intended to be called by the users.
Definition checked.h:74
void advance(octet_iterator &it, distance_type n, octet_iterator end)
Definition checked.h:164
uint32_t peek_next(octet_iterator it, octet_iterator end)
Definition checked.h:143
octet_iterator utf32to8(u32bit_iterator start, u32bit_iterator end, octet_iterator result)
Definition checked.h:231
u16bit_iterator utf8to16(octet_iterator start, octet_iterator end, u16bit_iterator result)
Definition checked.h:216
u32bit_iterator utf8to32(octet_iterator start, octet_iterator end, u32bit_iterator result)
Definition checked.h:240
unsigned int uint32_t
Definition core.h:57
uint32_t prior(octet_iterator &it, octet_iterator start)
Definition checked.h:149
unsigned char uint8_t
Definition core.h:55
unsigned short uint16_t
Definition core.h:56
std::iterator_traits< octet_iterator >::difference_type distance(octet_iterator first, octet_iterator last)
Definition checked.h:180
octet_iterator utf16to8(u16bit_iterator start, u16bit_iterator end, octet_iterator result)
Definition checked.h:189
uint32_t next(octet_iterator &it, octet_iterator end)
Definition checked.h:123
bool is_lead_surrogate(u16 cp)
Definition core.h:92
bool is_trail_surrogate(u16 cp)
Definition core.h:98
const uint32_t SURROGATE_OFFSET
Definition core.h:70
const uint16_t LEAD_OFFSET
Definition core.h:69
const uint16_t TRAIL_SURROGATE_MIN
Definition core.h:67
bool is_code_point_valid(u32 cp)
Definition core.h:110
utf_error
Definition core.h:151
@ INCOMPLETE_SEQUENCE
Definition core.h:151
@ INVALID_LEAD
Definition core.h:151
@ OVERLONG_SEQUENCE
Definition core.h:151
@ INVALID_CODE_POINT
Definition core.h:151
@ NOT_ENOUGH_ROOM
Definition core.h:151
@ UTF8_OK
Definition core.h:151
uint16_t mask16(u16_type oc)
Definition core.h:81
bool is_trail(octet_type oc)
Definition core.h:86
utf_error validate_next(octet_iterator &it, octet_iterator end, uint32_t &code_point)
Definition core.h:240
octet_iterator append(uint32_t cp, octet_iterator result)
Definition core.h:304
uint32_t code_point() const
Definition checked.h:46
virtual const char * what() const UTF_CPP_NOEXCEPT UTF_CPP_OVERRIDE
Definition checked.h:45
invalid_code_point(uint32_t codepoint)
Definition checked.h:44
invalid_utf8(uint8_t u)
Definition checked.h:52
invalid_utf8(char c)
Definition checked.h:53
virtual const char * what() const UTF_CPP_NOEXCEPT UTF_CPP_OVERRIDE
Definition checked.h:54
uint8_t utf8_octet() const
Definition checked.h:55
uint16_t utf16_word() const
Definition checked.h:63
virtual const char * what() const UTF_CPP_NOEXCEPT UTF_CPP_OVERRIDE
Definition checked.h:62
invalid_utf16(uint16_t u)
Definition checked.h:61
virtual const char * what() const UTF_CPP_NOEXCEPT UTF_CPP_OVERRIDE
Definition checked.h:68
uint32_t operator*() const
Definition checked.h:271
uint32_t & reference
Definition checked.h:257
bool operator==(const iterator &rhs) const
Definition checked.h:276
octet_iterator base() const
Definition checked.h:270
std::ptrdiff_t difference_type
Definition checked.h:258
iterator()
Definition checked.h:260
iterator & operator--()
Definition checked.h:297
uint32_t value_type
Definition checked.h:255
std::bidirectional_iterator_tag iterator_category
Definition checked.h:259
iterator & operator++()
Definition checked.h:286
uint32_t * pointer
Definition checked.h:256
bool operator!=(const iterator &rhs) const
Definition checked.h:282
iterator(const octet_iterator &octet_it, const octet_iterator &rangestart, const octet_iterator &rangeend)
Definition checked.h:261