20 if (view.ends_with(
'.')) {
21 view.remove_suffix(1);
26 char last_char = view.back();
27 bool possible_ipv4 = (last_char >=
'0' && last_char <=
'9') ||
28 (last_char >=
'a' && last_char <=
'f') ||
34 size_t last_dot = view.rfind(
'.');
35 if (last_dot != std::string_view::npos) {
37 view = view.substr(last_dot + 1);
46 if (view.size() == 1) {
50 if (!view.starts_with(
"0x")) {
54 if (view.size() == 2) {
59 return std::all_of(view.begin() + 2, view.end(),
60 ada::unicode::is_lowercase_hex);
67 std::array<uint8_t, 256>
result{};
68 for (
size_t i = 0; i < 256; i++) {
69 if (i <= 0x20 || i == 0x22 || i == 0x23 || i == 0x3c || i == 0x3e ||
70 i == 0x3f || i == 0x60 || i == 0x7b || i == 0x7d || i > 0x7e) {
72 }
else if (i == 0x25) {
74 }
else if (i == 0x2e) {
76 }
else if (i == 0x5c) {
86 std::string_view input)
noexcept {
93 uint8_t accumulator{};
94 for (; i + 7 < input.size(); i += 8) {
104 for (; i < input.size(); i++) {
111 std::string_view input)
noexcept {
112 if (input.back() ==
'.') {
113 if (input.size() > 254)
return false;
114 }
else if (input.size() > 253)
118 while (start < input.size()) {
119 auto dot_location = input.find(
'.', start);
121 if (dot_location == std::string_view::npos) dot_location = input.size();
123 auto label_size = dot_location - start;
124 if (label_size > 63 || label_size == 0)
return false;
126 start = dot_location + 1;
Definitions for URL specific checkers used within Ada.
Declarations for URL specific checkers used within Ada.
Common definitions for cross-platform compiler support.
#define ada_really_inline
Includes the definitions for validation functions.
static constexpr std::array< uint8_t, 256 > path_signature_table
constexpr bool is_digit(char x) noexcept
tl::expected< result_type, ada::errors > result
Definitions for unicode operations.