29 #ifndef UTF8_VALIDATOR_HPP    30 #define UTF8_VALIDATOR_HPP    37 namespace utf8_validator {
    45 static uint8_t 
const utf8d[] = {
    46   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 
    47   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 
    48   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 
    49   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 
    50   1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 
    51   7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 
    52   8,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 
    53   0xa,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x4,0x3,0x3, 
    54   0xb,0x6,0x6,0x6,0x5,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8, 
    55   0x0,0x1,0x2,0x3,0x5,0x8,0x7,0x1,0x1,0x1,0x4,0x6,0x1,0x1,0x1,0x1, 
    56   1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,1,1, 
    57   1,2,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1, 
    58   1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,3,1,1,1,1,1,1, 
    59   1,3,1,1,1,1,1,3,1,3,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 
    69 inline uint32_t 
decode(uint32_t * state, uint32_t * codep, uint8_t byte) {
    70   uint32_t type = utf8d[byte];
    73     (byte & 0x3fu) | (*codep << 6) :
    74     (0xff >> type) & (byte);
    76   *state = utf8d[256 + *state*16 + type];
    84     validator() : m_state(utf8_accept),m_codepoint(0) {}
   104     template <
typename iterator_type>
   105     bool decode (iterator_type begin, iterator_type end) {
   106         for (iterator_type it = begin; it != end; ++it) {
   110                 static_cast<uint8_t>(*it)
   113             if (result == utf8_reject) {
   135     uint32_t    m_codepoint;
   145     if (!v.
decode(s.begin(),s.end())) {
   154 #endif // UTF8_VALIDATOR_HPP bool decode(iterator_type begin, iterator_type end)
Advance validator state with input from an iterator pair. 
 
uint32_t decode(uint32_t *state, uint32_t *codep, uint8_t byte)
Decode the next byte of a UTF8 sequence. 
 
static uint8_t const utf8d[]
Lookup table for the UTF8 decode state machine. 
 
Provides streaming UTF8 validation functionality. 
 
bool consume(uint8_t byte)
Advance the state of the validator with the next input byte. 
 
void reset()
Reset the validator to decode another message. 
 
bool validate(std::string const &s)
Validate a UTF8 string. 
 
Namespace for the WebSocket++ project. 
 
static unsigned int const utf8_accept
State that represents a valid utf8 input sequence. 
 
static unsigned int const utf8_reject
State that represents an invalid utf8 input sequence. 
 
bool complete()
Return whether the input sequence ended on a valid utf8 codepoint. 
 
validator()
Construct and initialize the validator.