aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/diceparser.cpp
diff options
context:
space:
mode:
authorRenaud G <renaud@rolisteam.org>2018-03-18 17:46:31 +0100
committerRenaud G <renaud@rolisteam.org>2018-03-18 17:46:31 +0100
commitf47c0c0a6f151d7f74d41e551fccadd8b12b003c (patch)
tree98f22d38ede4663fbb49422e236a531160affc0d /diceparser.cpp
parente76025eb4d0c5b5ae70ea4b51c4691fddf79c8ab (diff)
downloadOneRoll-f47c0c0a6f151d7f74d41e551fccadd8b12b003c.tar.gz
OneRoll-f47c0c0a6f151d7f74d41e551fccadd8b12b003c.zip
-Read operand in condition
Diffstat (limited to 'diceparser.cpp')
-rw-r--r--diceparser.cpp56
1 files changed, 17 insertions, 39 deletions
diff --git a/diceparser.cpp b/diceparser.cpp
index d73404d..d76c474 100644
--- a/diceparser.cpp
+++ b/diceparser.cpp
@@ -55,6 +55,8 @@ DiceParser::DiceParser()
{
m_currentTreeHasSeparator =false;
m_parsingToolbox = new ParsingToolBox();
+ ParsingToolBox::setStartNodes(&m_startNodes);
+
m_mapDiceOp = new QMap<QString,DiceOperator>();
m_mapDiceOp->insert(QStringLiteral("D"),D);
@@ -200,7 +202,7 @@ bool DiceParser::readExpression(QString& str,ExecutionNode* & node)
}
}
}
- else if(readOperand(str,operandNode))
+ else if(m_parsingToolbox->readOperand(str,operandNode))
{
ExecutionNode* diceNode=nullptr;
if(readDice(str,diceNode))
@@ -682,10 +684,8 @@ bool DiceParser::readDice(QString& str,ExecutionNode* & node)
}
return true;
}
- else if(m_parsingToolbox->readDiceRange(str,min,max))
+ else if(m_parsingToolbox->readDiceRange(str,max,min))
{
- // qint64 face = abs(num - end);
- //qDebug() << face << end;
DiceRollerNode* drNode = new DiceRollerNode(max,min);
drNode->setUnique(unique);
if(hasOp)
@@ -927,8 +927,10 @@ DiceRollerNode* DiceParser::addRollDiceNode(qint64 faces,ExecutionNode* previous
ExploseDiceNode* DiceParser::addExploseDiceNode(qint64 value,ExecutionNode* previous)
{
ExploseDiceNode* exploseDiceNode= new ExploseDiceNode();
+ NumberNode* node = new NumberNode();
+ node->setNumber(value);
BooleanCondition* condition = new BooleanCondition();
- condition->setValue(value);
+ condition->setValueNode(node);
condition->setOperator(BooleanCondition::Equal);
m_parsingToolbox->isValidValidator(previous,condition);
exploseDiceNode->setValidator(condition);
@@ -1260,48 +1262,24 @@ QString DiceParser::humanReadableError()
return str;
}
-bool DiceParser::readOperand(QString& str,ExecutionNode* & node)
-{
- qint64 intValue=1;
- QString resultStr;
- if(m_parsingToolbox->readDynamicVariable(str,intValue))
- {
- VariableNode* variableNode = new VariableNode();
- variableNode->setIndex(intValue-1);
- variableNode->setData(&m_startNodes);
- node = variableNode;
- return true;
- }
- else if(m_parsingToolbox->readNumber(str,intValue))
- {
- NumberNode* numberNode = new NumberNode();
- numberNode->setNumber(intValue);
- node = numberNode;
- return true;
- }
- else if(m_parsingToolbox->readString(str,resultStr))
- {
- StringNode* strNode = new StringNode();
- strNode->setString(resultStr);
- node = strNode;
- return true;
- }
- return false;
-}
+
void DiceParser::writeDownDotTree(QString filepath)
{
+ if(m_startNodes.empty())
+ return;
+
+ QString str(QStringLiteral("digraph ExecutionTree {\n"));
for(auto start : m_startNodes)
{
- QString str(QStringLiteral("digraph ExecutionTree {\n"));
start->generateDotTree(str);
- str.append(QStringLiteral("}\n"));
+ }
+ str.append(QStringLiteral("}\n"));
- QFile file(filepath);
- if(file.open(QIODevice::WriteOnly))
- {
+ QFile file(filepath);
+ if(file.open(QIODevice::WriteOnly))
+ {
QTextStream in(&file);
in << str;
- }
}
}
void DiceParser::setPathToHelp(QString l)