aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/booleancondition.cpp
diff options
context:
space:
mode:
authorRenaud G <renaud@rolisteam.org>2019-07-28 00:54:44 +0200
committerRenaud G <renaud@rolisteam.org>2019-07-28 00:54:44 +0200
commit72741802a92c1420a7b709ef0c8b0cad1897c302 (patch)
treef67fae62a13dda0db811996d3f6611c5361103f5 /booleancondition.cpp
parentc707c48c5b809827a2b5b63489be65efe71506e3 (diff)
downloadOneRoll-72741802a92c1420a7b709ef0c8b0cad1897c302.tar.gz
OneRoll-72741802a92c1420a7b709ef0c8b0cad1897c302.zip
fix timeouts about valid range
Diffstat (limited to 'booleancondition.cpp')
-rw-r--r--booleancondition.cpp81
1 files changed, 71 insertions, 10 deletions
diff --git a/booleancondition.cpp b/booleancondition.cpp
index 6747727..7fc71bc 100644
--- a/booleancondition.cpp
+++ b/booleancondition.cpp
@@ -20,7 +20,66 @@
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#include "booleancondition.h"
-#include <QDebug>
+
+Dice::CONDITION_STATE testEqual(bool insideRange, const std::pair<qint64, qint64>& range)
+{
+ if(!insideRange)
+ return Dice::CONDITION_STATE::UNREACHABLE;
+ else if(insideRange && (range.first == range.second))
+ return Dice::CONDITION_STATE::ALWAYSTRUE;
+ else
+ return Dice::CONDITION_STATE::REACHABLE;
+}
+
+Dice::CONDITION_STATE testGreatherThan(qint64 value, const std::pair<qint64, qint64>& range)
+{
+ if(value >= std::max(range.first, range.second))
+ return Dice::CONDITION_STATE::UNREACHABLE;
+ else if(value < std::min(range.first, range.second))
+ return Dice::CONDITION_STATE::ALWAYSTRUE;
+ else
+ return Dice::CONDITION_STATE::REACHABLE;
+}
+
+Dice::CONDITION_STATE testLesserThan(qint64 value, const std::pair<qint64, qint64>& range)
+{
+ if(value <= std::min(range.first, range.second))
+ return Dice::CONDITION_STATE::UNREACHABLE;
+ else if(value > std::max(range.first, range.second))
+ return Dice::CONDITION_STATE::ALWAYSTRUE;
+ else
+ return Dice::CONDITION_STATE::REACHABLE;
+}
+
+Dice::CONDITION_STATE testGreaterOrEqual(qint64 value, const std::pair<qint64, qint64>& range)
+{
+ if(value > std::max(range.first, range.second))
+ return Dice::CONDITION_STATE::UNREACHABLE;
+ else if(value <= std::min(range.first, range.second))
+ return Dice::CONDITION_STATE::ALWAYSTRUE;
+ else
+ return Dice::CONDITION_STATE::REACHABLE;
+}
+
+Dice::CONDITION_STATE testLesserOrEqual(qint64 value, const std::pair<qint64, qint64>& range)
+{
+ if(value < std::min(range.first, range.second))
+ return Dice::CONDITION_STATE::UNREACHABLE;
+ else if(value >= std::max(range.first, range.second))
+ return Dice::CONDITION_STATE::ALWAYSTRUE;
+ else
+ return Dice::CONDITION_STATE::REACHABLE;
+}
+
+Dice::CONDITION_STATE testDifferent(bool inside, const std::pair<qint64, qint64>& range)
+{
+ if(inside && (range.first == range.second))
+ return Dice::CONDITION_STATE::UNREACHABLE;
+ else if(!inside)
+ return Dice::CONDITION_STATE::ALWAYSTRUE;
+ else
+ return Dice::CONDITION_STATE::REACHABLE;
+}
BooleanCondition::BooleanCondition() : m_operator(Equal) {}
@@ -117,33 +176,35 @@ QString BooleanCondition::toString()
}
return QStringLiteral("[%1%2]").arg(str).arg(valueToScalar());
}
-bool BooleanCondition::isValidRangeSize(std::pair<qint64, qint64> range) const
+
+Dice::CONDITION_STATE BooleanCondition::isValidRangeSize(const std::pair<qint64, qint64>& range) const
{
- bool isValid= false;
+ Dice::CONDITION_STATE state;
auto valueScalar= valueToScalar();
qint64 boundValue= qBound(range.first, valueScalar, range.second);
+ bool isInsideRange= (boundValue == valueScalar);
switch(m_operator)
{
case Equal:
- isValid= (boundValue == valueScalar);
+ state= testEqual(isInsideRange, range); //(isInsideRange && (range.first != range.second)) ? ;
break;
case GreaterThan:
- isValid= range.first <= valueScalar;
+ state= testGreatherThan(valueScalar, range);
break;
case LesserThan:
- isValid= range.second >= valueScalar;
+ state= testLesserThan(valueScalar, range);
break;
case GreaterOrEqual:
- isValid= range.first < valueScalar;
+ state= testGreaterOrEqual(valueScalar, range);
break;
case LesserOrEqual:
- isValid= range.second > valueScalar;
+ state= testLesserOrEqual(valueScalar, range);
break;
case Different:
- isValid= (boundValue == valueScalar);
+ state= testDifferent(isInsideRange, range);
break;
}
- return isValid;
+ return state;
}
Validator* BooleanCondition::getCopy() const
{