7 #if !defined(MQTT_UTF8ENCODED_STRINGS_HPP)
8 #define MQTT_UTF8ENCODED_STRINGS_HPP
15 namespace utf8string {
43 return str.size() <= 0xffff;
50 #if defined(MQTT_USE_STR_CHECK)
51 auto it = str.begin();
55 if (
static_cast<unsigned char>(*(it + 0)) < 0b1000'0000) {
57 if (
static_cast<unsigned char>(*(it + 0)) == 0x00) {
61 if ((
static_cast<unsigned char>(*(it + 0)) >= 0x01 &&
62 static_cast<unsigned char>(*(it + 0)) <= 0x1f) ||
63 static_cast<unsigned char>(*(it + 0)) == 0x7f) {
68 else if ((
static_cast<unsigned char>(*(it + 0)) & 0b1110'0000) == 0b1100'0000) {
74 if ((
static_cast<unsigned char>(*(it + 1)) & 0b1100'0000) != 0b1000'0000 ||
75 (
static_cast<unsigned char>(*(it + 0)) & 0b1111'1110) == 0b1100'0000) {
79 if (
static_cast<unsigned char>(*(it + 0)) == 0b1100'0010 &&
80 static_cast<unsigned char>(*(it + 1)) >= 0b1000'0000 &&
81 static_cast<unsigned char>(*(it + 1)) <= 0b1001'1111) {
86 else if ((
static_cast<unsigned char>(*(it + 0)) & 0b1111'0000) == 0b1110'0000) {
92 if ((
static_cast<unsigned char>(*(it + 1)) & 0b1100'0000) != 0b1000'0000 ||
93 (
static_cast<unsigned char>(*(it + 2)) & 0b1100'0000) != 0b1000'0000 ||
94 (
static_cast<unsigned char>(*(it + 0)) == 0b1110'0000 &&
95 (
static_cast<unsigned char>(*(it + 1)) & 0b1110'0000) == 0b1000'0000) ||
96 (
static_cast<unsigned char>(*(it + 0)) == 0b1110'1101 &&
97 (
static_cast<unsigned char>(*(it + 1)) & 0b1110'0000) == 0b1010'0000)) {
101 if (
static_cast<unsigned char>(*(it + 0)) == 0b1110'1111 &&
102 static_cast<unsigned char>(*(it + 1)) == 0b1011'1111 &&
103 (
static_cast<unsigned char>(*(it + 2)) & 0b1111'1110) == 0b1011'1110) {
109 else if ((
static_cast<unsigned char>(*(it + 0)) & 0b1111'1000) == 0b1111'0000) {
115 if ((
static_cast<unsigned char>(*(it + 1)) & 0b1100'0000) != 0b1000'0000 ||
116 (
static_cast<unsigned char>(*(it + 2)) & 0b1100'0000) != 0b1000'0000 ||
117 (
static_cast<unsigned char>(*(it + 3)) & 0b1100'0000) != 0b1000'0000 ||
118 (
static_cast<unsigned char>(*(it + 0)) == 0b1111'0000 &&
119 (
static_cast<unsigned char>(*(it + 1)) & 0b1111'0000) == 0b1000'0000) ||
120 (
static_cast<unsigned char>(*(it + 0)) == 0b1111'0100 &&
121 static_cast<unsigned char>(*(it + 1)) > 0b1000'1111) ||
122 static_cast<unsigned char>(*(it + 0)) > 0b1111'0100) {
126 if ((
static_cast<unsigned char>(*(it + 1)) & 0b1100'1111) == 0b1000'1111 &&
127 static_cast<unsigned char>(*(it + 2)) == 0b1011'1111 &&
128 (
static_cast<unsigned char>(*(it + 3)) & 0b1111'1110) == 0b1011'1110) {
140 static_cast<void>(str);
validation
Definition: utf8encoded_strings.hpp:18
@ ill_formed
UTF-8 string is ill_formed or contains null character. See http://docs.oasis-open....
@ well_formed_with_non_charactor
UTF-8 string is well_formed and contains control character and non-character. See http://docs....
@ well_formed
UTF-8 string is well_formed. See http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3....
constexpr bool is_valid_length(string_view str)
Definition: utf8encoded_strings.hpp:42
constexpr validation validate_contents(string_view str)
Definition: utf8encoded_strings.hpp:47
boost::string_ref string_view
Definition: string_view.hpp:64