Introduce convenience functions to convert int <-> Actionx OR/AND

This commit is contained in:
Joakim Hove
2021-09-05 13:42:45 +02:00
parent e3685eeb34
commit b35e78df9f
3 changed files with 28 additions and 17 deletions

View File

@@ -90,6 +90,8 @@ enum class Comparator {
std::string cmp_string;
static Logical logic_from_int(int);
int logic_as_int() const;
bool open_paren() const;
bool close_paren() const;
bool operator==(const Condition& data) const;

View File

@@ -103,11 +103,6 @@ const std::map<std::string, int> rhsQuantityToIndex = {
};
using logic_enum = Opm::Action::Condition::Logical;
const std::map<logic_enum, int> logicalToIndex_13 = {
{logic_enum::AND, 1},
{logic_enum::OR, 2},
{logic_enum::END, 0},
};
const std::map<logic_enum, int> logicalToIndex_17 = {
{logic_enum::AND, 1},
@@ -406,18 +401,7 @@ const std::map<cmp_enum, int> cmpToIndex = {
iAcn[ind + 12] = it_lhs_it->second;
}
/*item [13] - relates to operator
OR is 2
AND is 1
*/
const auto it_logic_13 = logicalToIndex_13.find(cond.logic);
if (it_logic_13 != logicalToIndex_13.end()) {
iAcn[ind + 13] = it_logic_13->second;
}
else {
std::cout << "Unknown Boolean operator type for condition: " << cond.lhs.quantity << std::endl;
throw std::invalid_argument("Actionx: " + actx.name());
}
iAcn[ind + 13] = cond.logic_as_int();
/* item[15] is a parameter that indicates whether left_paren or right_paren is used in an expression
* = 0 : no open_paren or left_paren, or both open_paren and right_paren

View File

@@ -170,6 +170,31 @@ bool Condition::close_paren() const {
return !this->left_paren && this->right_paren;
}
Condition::Logical Condition::logic_from_int(int int_logic) {
if (int_logic == 0)
return Logical::END;
if (int_logic == 1)
return Logical::AND;
if (int_logic == 2)
return Logical::OR;
throw std::logic_error("Unknown integer value");
}
int Condition::logic_as_int() const {
switch (this->logic) {
case Logical::END:
return 0;
case Logical::AND:
return 1;
case Logical::OR:
return 2;
default:
throw std::logic_error("What the f...?");
}
}
}
}