1 #include <framework/core/ModuleCondition.h>
2 #include <framework/core/Path.h>
3 #include <framework/utilities/Conversion.h>
5 #include <boost/algorithm/string/erase.hpp>
7 #include <boost/python/class.hpp>
8 #include <boost/python/docstring_options.hpp>
14 using namespace boost::python;
17 m_conditionPath(std::move(conditionPath)),
18 m_afterConditionPath(afterConditionPath)
21 std::map<std::string, EConditionOperators> m_conditionOperatorMap;
22 m_conditionOperatorMap[
">"] = c_GT;
23 m_conditionOperatorMap[
"<"] = c_ST;
24 m_conditionOperatorMap[
">="] = c_GE;
25 m_conditionOperatorMap[
"<="] = c_SE;
26 m_conditionOperatorMap[
"="] = c_EQ;
27 m_conditionOperatorMap[
"=="] = c_EQ;
28 m_conditionOperatorMap[
"!="] = c_NE;
31 boost::erase_all(expression,
" ");
34 unsigned int iOperator = 0;
35 while ((iOperator < expression.length()) && (!isdigit(expression[iOperator]) && (expression[iOperator] !=
'-'))) iOperator++;
37 throw std::runtime_error(
"Invalid condition: could not parse condition: '" + expression +
"'!");
38 std::string opString = expression.substr(0, iOperator);
41 auto foundIter = m_conditionOperatorMap.find(opString);
42 if (foundIter == m_conditionOperatorMap.end())
43 throw std::runtime_error(
"Invalid condition: could not parse condition: '" + expression +
"'!");
45 m_conditionOperator = foundIter->second;
47 m_conditionValue = convertString<int>(expression.substr(iOperator, expression.length() - 1));
52 switch (m_conditionOperator) {
53 case c_GT :
return value > m_conditionValue;
54 case c_ST :
return value < m_conditionValue;
55 case c_GE :
return value >= m_conditionValue;
56 case c_SE :
return value <= m_conditionValue;
57 case c_EQ :
return value == m_conditionValue;
58 case c_NE :
return value != m_conditionValue;
65 std::string output =
"(? ";
66 switch (m_conditionOperator) {
67 case c_GT: output +=
">";
break;
68 case c_ST: output +=
"<";
break;
69 case c_GE: output +=
">=";
break;
70 case c_SE: output +=
"<=";
break;
71 case c_NE: output +=
"!=";
break;
72 case c_EQ: output +=
"==";
break;
73 default: output +=
"???";
75 output += std::to_string(m_conditionValue);
76 output += m_conditionPath->getPathString();
83 std::shared_ptr<Path> _getPathPython(
ModuleCondition* m) {
return m->getPath(); };
88 docstring_options options(
true,
true,
false);
91 class_<ModuleCondition, boost::noncopyable>(
"ModuleCondition", no_init)
96 .def(
"get_path", &_getPathPython)