51 #include <drizzled/utf8/checked.h>
52 #include <drizzled/utf8/unchecked.h>
62 static const int MAX_LENGTH= 4;
72 return (static_cast<uint8_t>(c) & 0x80) == 0;
81 static inline int codepoint_length(uint32_t c)
83 return (c <= 0x7f ? 1 :
86 (c <= 0xdfff || c>0x10ffff ? 0 :
87 (c <= 0xffff ? 3 : 4)))));
97 int sequence_length(T c)
99 return (static_cast<uint8_t>(c) < 0x80 ? 1 :
100 ((static_cast<uint8_t>(c) >> 5) == 0x6 ? 2 :
101 ((static_cast<uint8_t>(c) >> 4) == 0xe ? 3 :
102 ((static_cast<uint8_t>(c) >> 3) == 0x1e ? 4 : 0))));
112 static inline uint32_t char_length(
const std::string &in_string)
116 std::string::const_iterator iter= in_string.begin();
117 while (iter < in_string.end())
120 seq_length= sequence_length(*iter);
121 iter += (seq_length > 0) ? seq_length : 1;
132 static inline uint32_t char_length(
const char *in_string)
134 const std::string process_string(in_string);
135 return char_length(process_string);