7#include "../macros.hpp"
14enum class graphic_character_t {
16 exclamation_mark = 0x01,
49[[
nodiscard]]
constexpr graphic_character_t char_to_graphic_character(
char x)
noexcept
52 case '!':
return graphic_character_t::exclamation_mark;
53 case '"':
return graphic_character_t::double_quote;
54 case '#':
return graphic_character_t::hash;
55 case '$':
return graphic_character_t::dollar;
56 case '%':
return graphic_character_t::percent;
57 case '&':
return graphic_character_t::ampersand;
58 case '\'':
return graphic_character_t::single_quote;
59 case '(':
return graphic_character_t::open_paren;
60 case ')':
return graphic_character_t::close_paren;
61 case '*':
return graphic_character_t::star;
62 case '+':
return graphic_character_t::plus;
63 case ',':
return graphic_character_t::comma;
64 case '-':
return graphic_character_t::minus;
65 case '.':
return graphic_character_t::dot;
66 case '/':
return graphic_character_t::slash;
67 case ':':
return graphic_character_t::colon;
68 case ';':
return graphic_character_t::semi_colon;
69 case '<':
return graphic_character_t::less_than;
70 case '=':
return graphic_character_t::equal;
71 case '>':
return graphic_character_t::greater_than;
72 case '?':
return graphic_character_t::question_mark;
73 case '[':
return graphic_character_t::open_bracket;
74 case '\\':
return graphic_character_t::back_slash;
75 case ']':
return graphic_character_t::close_bracket;
76 case '^':
return graphic_character_t::carret;
77 case '_':
return graphic_character_t::underscore;
78 case '`':
return graphic_character_t::back_quote;
79 case '{':
return graphic_character_t::open_brace;
80 case '|':
return graphic_character_t::pipe;
81 case '}':
return graphic_character_t::close_brace;
82 case '~':
return graphic_character_t::tilde;
83 default:
return graphic_character_t::none;
87[[
nodiscard]]
constexpr uint64_t operator_to_int(std::string_view str)
noexcept
92 r |=
static_cast<uint64_t
>(char_to_graphic_character(c));
102 switch (operator_to_int(str)) {
103 case operator_to_int(
"::"):
return {uint8_t{1},
true};
104 case operator_to_int(
"("):
return {uint8_t{2},
true};
105 case operator_to_int(
"["):
return {uint8_t{2},
true};
106 case operator_to_int(
"."):
return {uint8_t{2},
true};
107 case operator_to_int(
"->"):
return {uint8_t{2},
true};
108 case operator_to_int(
".*"):
return {uint8_t{4},
true};
109 case operator_to_int(
"->*"):
return {uint8_t{4},
true};
110 case operator_to_int(
"**"):
return {uint8_t{4},
true};
111 case operator_to_int(
"*"):
return {uint8_t{5},
true};
112 case operator_to_int(
"/"):
return {uint8_t{5},
true};
113 case operator_to_int(
"%"):
return {uint8_t{5},
true};
114 case operator_to_int(
"+"):
return {uint8_t{6},
true};
115 case operator_to_int(
"-"):
return {uint8_t{6},
true};
116 case operator_to_int(
"<<"):
return {uint8_t{7},
true};
117 case operator_to_int(
">>"):
return {uint8_t{7},
true};
118 case operator_to_int(
"<=>"):
return {uint8_t{8},
true};
119 case operator_to_int(
"<"):
return {uint8_t{9},
true};
120 case operator_to_int(
">"):
return {uint8_t{9},
true};
121 case operator_to_int(
"<="):
return {uint8_t{9},
true};
122 case operator_to_int(
">="):
return {uint8_t{9},
true};
123 case operator_to_int(
"=="):
return {uint8_t{10},
true};
124 case operator_to_int(
"!="):
return {uint8_t{10},
true};
125 case operator_to_int(
"&"):
return {uint8_t{11},
true};
126 case operator_to_int(
"^"):
return {uint8_t{12},
true};
127 case operator_to_int(
"|"):
return {uint8_t{13},
true};
128 case operator_to_int(
"&&"):
return {uint8_t{14},
true};
129 case operator_to_int(
"||"):
return {uint8_t{15},
true};
130 case operator_to_int(
"?"):
return {uint8_t{16},
false};
131 case operator_to_int(
"="):
return {uint8_t{16},
false};
132 case operator_to_int(
"+="):
return {uint8_t{16},
false};
133 case operator_to_int(
"-="):
return {uint8_t{16},
false};
134 case operator_to_int(
"*="):
return {uint8_t{16},
false};
135 case operator_to_int(
"/="):
return {uint8_t{16},
false};
136 case operator_to_int(
"%="):
return {uint8_t{16},
false};
137 case operator_to_int(
"<<="):
return {uint8_t{16},
false};
138 case operator_to_int(
">>="):
return {uint8_t{16},
false};
139 case operator_to_int(
"&="):
return {uint8_t{16},
false};
140 case operator_to_int(
"^="):
return {uint8_t{16},
false};
141 case operator_to_int(
"|="):
return {uint8_t{16},
false};
142 case operator_to_int(
","):
return {uint8_t{17},
true};
143 case operator_to_int(
"]"):
return {uint8_t{17},
true};
144 case operator_to_int(
")"):
return {uint8_t{17},
true};
145 case operator_to_int(
"!"):
return {uint8_t{18},
true};
DOXYGEN BUG.
Definition algorithm.hpp:16
constexpr std::pair< uint8_t, bool > binary_operator_precedence(std::string_view str) noexcept
Binary Operator Precedence according to C++.
Definition operator.hpp:100
constexpr Out narrow_cast(In const &rhs) noexcept
Cast numeric values without loss of precision.
Definition cast.hpp:377