24 namespace Antares::Expressions::Visitors
29 enum class LinearStatus : char
44 constexpr
char pair(LinearStatus a, LinearStatus b)
46 return static_cast<char>(a) << 4 |
static_cast<char>(b);
57 constexpr LinearStatus operator*(LinearStatus a, LinearStatus b)
61 case pair(LinearStatus::CONSTANT, LinearStatus::CONSTANT):
62 return LinearStatus::CONSTANT;
63 case pair(LinearStatus::CONSTANT, LinearStatus::LINEAR):
64 return LinearStatus::LINEAR;
65 case pair(LinearStatus::CONSTANT, LinearStatus::NON_LINEAR):
66 return LinearStatus::NON_LINEAR;
68 case pair(LinearStatus::LINEAR, LinearStatus::CONSTANT):
69 return LinearStatus::LINEAR;
70 case pair(LinearStatus::LINEAR, LinearStatus::LINEAR):
71 case pair(LinearStatus::LINEAR, LinearStatus::NON_LINEAR):
72 return LinearStatus::NON_LINEAR;
74 case pair(LinearStatus::NON_LINEAR, LinearStatus::CONSTANT):
75 case pair(LinearStatus::NON_LINEAR, LinearStatus::LINEAR):
76 case pair(LinearStatus::NON_LINEAR, LinearStatus::NON_LINEAR):
77 return LinearStatus::NON_LINEAR;
80 return LinearStatus::NON_LINEAR;
92 constexpr LinearStatus operator/(LinearStatus a, LinearStatus b)
96 case pair(LinearStatus::CONSTANT, LinearStatus::CONSTANT):
97 return LinearStatus::CONSTANT;
98 case pair(LinearStatus::CONSTANT, LinearStatus::LINEAR):
99 return LinearStatus::NON_LINEAR;
100 case pair(LinearStatus::CONSTANT, LinearStatus::NON_LINEAR):
101 return LinearStatus::NON_LINEAR;
103 case pair(LinearStatus::LINEAR, LinearStatus::CONSTANT):
104 return LinearStatus::LINEAR;
105 case pair(LinearStatus::LINEAR, LinearStatus::LINEAR):
106 case pair(LinearStatus::LINEAR, LinearStatus::NON_LINEAR):
107 return LinearStatus::NON_LINEAR;
109 case pair(LinearStatus::NON_LINEAR, LinearStatus::CONSTANT):
110 case pair(LinearStatus::NON_LINEAR, LinearStatus::LINEAR):
111 case pair(LinearStatus::NON_LINEAR, LinearStatus::NON_LINEAR):
112 return LinearStatus::NON_LINEAR;
115 return LinearStatus::NON_LINEAR;
127 constexpr LinearStatus operator+(LinearStatus a, LinearStatus b)
131 case pair(LinearStatus::CONSTANT, LinearStatus::CONSTANT):
132 return LinearStatus::CONSTANT;
133 case pair(LinearStatus::CONSTANT, LinearStatus::LINEAR):
134 return LinearStatus::LINEAR;
135 case pair(LinearStatus::CONSTANT, LinearStatus::NON_LINEAR):
136 return LinearStatus::NON_LINEAR;
138 case pair(LinearStatus::LINEAR, LinearStatus::CONSTANT):
139 return LinearStatus::LINEAR;
140 case pair(LinearStatus::LINEAR, LinearStatus::LINEAR):
141 return LinearStatus::LINEAR;
142 case pair(LinearStatus::LINEAR, LinearStatus::NON_LINEAR):
143 return LinearStatus::NON_LINEAR;
145 case pair(LinearStatus::NON_LINEAR, LinearStatus::CONSTANT):
146 case pair(LinearStatus::NON_LINEAR, LinearStatus::LINEAR):
147 case pair(LinearStatus::NON_LINEAR, LinearStatus::NON_LINEAR):
148 return LinearStatus::NON_LINEAR;
151 return LinearStatus::NON_LINEAR;
163 constexpr LinearStatus operator-(LinearStatus a, LinearStatus b)
165 return operator+(a, b);
175 constexpr LinearStatus operator-(LinearStatus a)
180 constexpr
bool operator<(LinearStatus a, LinearStatus b)
182 return static_cast<char>(a) <
static_cast<char>(b);
185 template<
class Operation>
186 LinearStatus applyOperation(
const std::vector<LinearStatus>& in, Operation op)