28using ssize_t = SSIZE_T;
36#if defined(__GNUC__) && (__GNUC__ > 2) || defined(__clang__)
37#define LIKELY(expr) (__builtin_expect(expr, 1))
38#define UNLIKELY(expr) (__builtin_expect(expr, 0))
40#define LIKELY(expr) (expr)
41#define UNLIKELY(expr) (expr)
54#define UNICODE_VALID(Char) ((Char) < 0x110000 && (((Char) &0xFFFFF800) != 0xD800))
56#define CONTINUATION_CHAR \
57 if ((*(unsigned char*) p & 0xc0) != 0x80) \
60 val |= (*(unsigned char*) p) & 0x3f;
73 for (p =
str; *p; p++) {
74 if (*(
unsigned char*) p < 128)
81 if ((*(
unsigned char*) p & 0xe0) == 0xc0) {
82 if (
UNLIKELY((*(
unsigned char*) p & 0x1e) == 0))
87 if (
UNLIKELY((*(
unsigned char*) p & 0xc0) != 0x80))
90 if ((*(
unsigned char*) p & 0xf0) == 0xe0) {
92 val = *(
unsigned char*) p & 0x0f;
94 }
else if ((*(
unsigned char*) p & 0xf8) == 0xf0) {
96 val = *(
unsigned char*) p & 0x07;
135 if (*(
unsigned char*) p < 128)
142 if ((*(
unsigned char*) p & 0xe0) == 0xc0) {
146 if (
UNLIKELY((*(
unsigned char*) p & 0x1e) == 0))
151 if (
UNLIKELY((*(
unsigned char*) p & 0xc0) != 0x80))
154 if ((*(
unsigned char*) p & 0xf0) == 0xe0) {
159 val = *(
unsigned char*) p & 0x0f;
161 }
else if ((*(
unsigned char*) p & 0xf8) == 0xf0) {
166 val = *(
unsigned char*) p & 0x07;
283 return std::string(name);
static const char * fast_validate(const char *str)
bool utf8_validate(std::string_view str)
utf8_validate:
void emitSignal(Args... args)
bool utf8_validate_c_str(const char *str, ssize_t max_len, const char **end)
utf8_validate_c_str: @str: a pointer to character data @max_len: max bytes to validate,...
std::string utf8_make_valid(std::string_view name)
static const char * fast_validate_len(const char *str, ssize_t max_len)
#define UNICODE_VALID(Char)
#define CONTINUATION_CHAR