aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/parsingtoolbox.cpp
diff options
context:
space:
mode:
authorRenaud G <renaud@rolisteam.org>2016-01-10 14:40:06 +0100
committerRenaud G <renaud@rolisteam.org>2016-01-10 14:40:06 +0100
commitd3b925e690b56ef4dce68246661f5c55a93564cf (patch)
tree6b6b00bc89b43d2cdc2761f8951c32555f037b7d /parsingtoolbox.cpp
parentdb15e41502743d1124062eddb8d2bb3617e2593c (diff)
downloadOneRoll-d3b925e690b56ef4dce68246661f5c55a93564cf.tar.gz
OneRoll-d3b925e690b56ef4dce68246661f5c55a93564cf.zip
-Add management of operationCondition : modulo operator.
Diffstat (limited to 'parsingtoolbox.cpp')
-rw-r--r--parsingtoolbox.cpp48
1 files changed, 47 insertions, 1 deletions
diff --git a/parsingtoolbox.cpp b/parsingtoolbox.cpp
index 495ae6e..7646970 100644
--- a/parsingtoolbox.cpp
+++ b/parsingtoolbox.cpp
@@ -39,6 +39,9 @@ ParsingToolBox::ParsingToolBox()
m_logicOperation->insert("|",CompositeValidator::OR);
m_logicOperation->insert("^",CompositeValidator::EXCLUSIVE_OR);
m_logicOperation->insert("&",CompositeValidator::AND);
+
+ m_conditionOperation = new QMap<QString,OperationCondition::ConditionOperator>();
+ m_conditionOperation->insert("%",OperationCondition::Modulo);
}
ExecutionNode* ParsingToolBox::addSort(ExecutionNode* e,bool b)
{
@@ -47,6 +50,29 @@ ExecutionNode* ParsingToolBox::addSort(ExecutionNode* e,bool b)
e->setNextNode(nodeSort);
return nodeSort;
}
+bool ParsingToolBox::readDiceLogicOperator(QString& str,OperationCondition::ConditionOperator& op)
+{
+ QString longKey;
+ foreach(QString tmp, m_conditionOperation->keys())
+ {
+ if(str.startsWith(tmp))
+ {
+ if(longKey.size()<tmp.size())
+ {
+ longKey = tmp;
+ }
+ }
+ }
+ if(longKey.size()>0)
+ {
+ str=str.remove(0,longKey.size());
+ op = m_conditionOperation->value(longKey);
+ return true;
+ }
+
+ return false;
+}
+
bool ParsingToolBox::readLogicOperator(QString& str,BooleanCondition::LogicOperator& op)
{
QString longKey;
@@ -82,9 +108,29 @@ Validator* ParsingToolBox::readValidator(QString& str)
Validator* returnVal=NULL;
BooleanCondition::LogicOperator myLogicOp = BooleanCondition::Equal;
bool hasReadLogicOperator = readLogicOperator(str,myLogicOp);
+
+
+ OperationCondition::ConditionOperator condiOp = OperationCondition::Modulo;
+ bool hasDiceLogicOperator = readDiceLogicOperator(str,condiOp);
qint64 value=0;
- if(readNumber(str,value))
+ if(hasDiceLogicOperator)
+ {
+ if(readNumber(str,value))
+ {
+ OperationCondition* condition = new OperationCondition();
+ condition->setValue(value);
+ Validator* valid = readValidator(str);
+ BooleanCondition* boolC = dynamic_cast<BooleanCondition*>(valid);
+ if(NULL!=boolC)
+ {
+ condition->setBoolean(boolC);
+ }
+ returnVal = condition;
+ }
+
+ }
+ else if(readNumber(str,value))
{
if(str.startsWith("-"))
{