aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/diceparser.cpp
diff options
context:
space:
mode:
authorRenaud G <renaud@rolisteam.org>2016-11-03 17:36:21 +0100
committerRenaud G <renaud@rolisteam.org>2016-11-03 17:36:21 +0100
commit9d389e561339e4fd7a68d60f593ad233e3941d13 (patch)
tree39e98d9d3a612be9c6cf449f5a7a5dfdf4593865 /diceparser.cpp
parent120add8ca2f3a7e075b415a611bcd09034bd6200 (diff)
downloadOneRoll-9d389e561339e4fd7a68d60f593ad233e3941d13.tar.gz
OneRoll-9d389e561339e4fd7a68d60f593ad233e3941d13.zip
-Add FilterNode to dice system.
Diffstat (limited to 'diceparser.cpp')
-rw-r--r--diceparser.cpp25
1 files changed, 19 insertions, 6 deletions
diff --git a/diceparser.cpp b/diceparser.cpp
index b6081a7..87a972c 100644
--- a/diceparser.cpp
+++ b/diceparser.cpp
@@ -27,6 +27,7 @@
#include "node/startingnode.h"
#include "node/scalaroperatornode.h"
+#include "node/filternode.h"
#include "node/numbernode.h"
#include "node/keepdiceexecnode.h"
#include "node/sortresult.h"
@@ -65,6 +66,8 @@ DiceParser::DiceParser()
m_OptionOp->insert(QStringLiteral("m"),Merge);
m_OptionOp->insert(QStringLiteral("i"),ifOperator);
m_OptionOp->insert(QStringLiteral("p"),Painter);
+ m_OptionOp->insert(QStringLiteral("f"),Filter);
+
m_aliasList = new QList<DiceAlias*>();
@@ -832,15 +835,9 @@ bool DiceParser::readOption(QString& str,ExecutionNode* previous)//,
bool ascending = m_parsingToolbox->readAscending(str);
if(m_parsingToolbox->readNumber(str,myNumber))
{
- /* if(!hasDice)
- {
- previous = addRollDiceNode(DEFAULT_FACES_NUMBER,previous);
- }*/
node = m_parsingToolbox->addSort(previous,ascending);
-
KeepDiceExecNode* nodeK = new KeepDiceExecNode();
nodeK->setDiceKeepNumber(myNumber);
-
node->setNextNode(nodeK);
node = nodeK;
found = true;
@@ -875,6 +872,22 @@ bool DiceParser::readOption(QString& str,ExecutionNode* previous)//,
}
}
break;
+ case Filter:
+ {
+ Validator* validator = m_parsingToolbox->readCompositeValidator(str);
+ if(NULL!=validator)
+ {
+ m_parsingToolbox->isValidValidator(previous,validator);
+
+ FilterNode* filterNode = new FilterNode();
+ filterNode->setValidator(validator);
+
+ previous->setNextNode(filterNode);
+ node = filterNode;
+ found = true;
+ }
+ }
+ break;
case Sort:
{
bool ascending = m_parsingToolbox->readAscending(str);