| 544 | |
| 545 | template<typename InputIter, typename Sentinel> |
| 546 | char32_t advance(InputIter & first, Sentinel last) |
| 547 | { |
| 548 | char32_t retval = 0; |
| 549 | |
| 550 | first_cu const info = first_cus[(unsigned char)*first]; |
| 551 | ++first; |
| 552 | |
| 553 | retval = info.initial_octet; |
| 554 | int state = info.next; |
| 555 | |
| 556 | while (state != bgn) { |
| 557 | if (first != last) { |
| 558 | unsigned char const cu = *first; |
| 559 | retval = (retval << 6) | (cu & 0x3f); |
| 560 | char_class const class_ = octet_classes[cu]; |
| 561 | state = transitions[state + class_]; |
| 562 | if (state == err) |
| 563 | return replacement_character; |
| 564 | ++first; |
| 565 | } else { |
| 566 | return replacement_character; |
| 567 | } |
| 568 | } |
| 569 | |
| 570 | return retval; |
| 571 | } |
| 572 | |
| 573 | template<typename Derived, typename Iter> |
| 574 | struct trans_ins_iter |
no outgoing calls
no test coverage detected