diff options
| author | 2016-01-10 14:40:06 +0100 | |
|---|---|---|
| committer | 2016-01-10 14:40:06 +0100 | |
| commit | d3b925e690b56ef4dce68246661f5c55a93564cf (patch) | |
| tree | 6b6b00bc89b43d2cdc2761f8951c32555f037b7d /parsingtoolbox.cpp | |
| parent | db15e41502743d1124062eddb8d2bb3617e2593c (diff) | |
| download | OneRoll-d3b925e690b56ef4dce68246661f5c55a93564cf.tar.gz OneRoll-d3b925e690b56ef4dce68246661f5c55a93564cf.zip | |
-Add management of operationCondition : modulo operator.
Diffstat (limited to 'parsingtoolbox.cpp')
| -rw-r--r-- | parsingtoolbox.cpp | 48 |
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("-")) { |