Ada 2.9.2
Fast spec-compliant URL parser
Loading...
Searching...
No Matches
checkers-inl.h
Go to the documentation of this file.
1
5#ifndef ADA_CHECKERS_INL_H
6#define ADA_CHECKERS_INL_H
7
8#include <bit>
9#include <string_view>
10
11namespace ada::checkers {
12
13constexpr bool has_hex_prefix_unsafe(std::string_view input) {
14 // This is actually efficient code, see has_hex_prefix for the assembly.
15 constexpr bool is_little_endian = std::endian::native == std::endian::little;
16 constexpr auto word0x =
17 std::bit_cast<uint16_t>(static_cast<uint16_t>(0x7830));
18 uint16_t two_first_bytes =
19 static_cast<uint16_t>(input[0]) |
20 static_cast<uint16_t>((static_cast<uint16_t>(input[1]) << 8));
21 if constexpr (is_little_endian) {
22 two_first_bytes |= 0x2000;
23 } else {
24 two_first_bytes |= 0x020;
25 }
26 return two_first_bytes == word0x;
27}
28
29constexpr bool has_hex_prefix(std::string_view input) {
30 return input.size() >= 2 && has_hex_prefix_unsafe(input);
31}
32
33constexpr bool is_digit(char x) noexcept { return (x >= '0') & (x <= '9'); }
34
35constexpr char to_lower(char x) noexcept { return (x | 0x20); }
36
37constexpr bool is_alpha(char x) noexcept {
38 return (to_lower(x) >= 'a') && (to_lower(x) <= 'z');
39}
40
41constexpr bool is_windows_drive_letter(std::string_view input) noexcept {
42 return input.size() >= 2 &&
43 (is_alpha(input[0]) && ((input[1] == ':') || (input[1] == '|'))) &&
44 ((input.size() == 2) || (input[2] == '/' || input[2] == '\\' ||
45 input[2] == '?' || input[2] == '#'));
46}
47
49 std::string_view input) noexcept {
50 return input.size() >= 2 && (is_alpha(input[0]) && (input[1] == ':'));
51}
52
53} // namespace ada::checkers
54
55#endif // ADA_CHECKERS_INL_H
Includes the definitions for validation functions.
constexpr bool has_hex_prefix_unsafe(std::string_view input)
constexpr bool has_hex_prefix(std::string_view input)
constexpr bool is_normalized_windows_drive_letter(std::string_view input) noexcept
constexpr bool is_windows_drive_letter(std::string_view input) noexcept
constexpr char to_lower(char x) noexcept
constexpr bool is_alpha(char x) noexcept
constexpr bool is_digit(char x) noexcept