bool ValidateUTF8(const char *p) { for (; *p != 0; ++p) { unsigned char ch = *p; if (IsASCII(ch)) continue; if (IsContinuation(ch)) /* continuation without a prefix */ return false; if (IsLeading1(ch)) { /* 1 continuation */ if (!IsContinuation(*++p)) return false; } else if (IsLeading2(ch)) { /* 2 continuations */ if (!IsContinuation(*++p) || !IsContinuation(*++p)) return false; } else if (IsLeading3(ch)) { /* 3 continuations */ if (!IsContinuation(*++p) || !IsContinuation(*++p) || !IsContinuation(*++p)) return false; } else if (IsLeading4(ch)) { /* 4 continuations */ if (!IsContinuation(*++p) || !IsContinuation(*++p) || !IsContinuation(*++p) || !IsContinuation(*++p)) return false; } else if (IsLeading5(ch)) { /* 5 continuations */ if (!IsContinuation(*++p) || !IsContinuation(*++p) || !IsContinuation(*++p) || !IsContinuation(*++p) || !IsContinuation(*++p)) return false; } else return false; } return true; }
gcc_pure bool operator()(const char *p) const { return IsContinuation(*p) && CheckSequenceUTF8<L-1>()(p + 1); }
inline bool asio_handler_is_continuation( wrapped_handler<Dispatcher, Handler, IsContinuation>* this_handler) { return IsContinuation()(this_handler->dispatcher_, this_handler->handler_); }