aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/node
diff options
context:
space:
mode:
authorRenaud G <renaud@rolisteam.org>2015-03-05 14:30:18 +0100
committerRenaud G <renaud@rolisteam.org>2015-03-05 14:30:18 +0100
commit606001e99593372d0a71c566a5efdefd48175305 (patch)
tree28f1fdee4a0afd5a8b425eebdb8a8d9e73a255d6 /node
parent30aaf7a35bc6e8224ad683148af28cedf81f03fd (diff)
downloadOneRoll-606001e99593372d0a71c566a5efdefd48175305.tar.gz
OneRoll-606001e99593372d0a71c566a5efdefd48175305.zip
add generateTree
add jumpbackward node
Diffstat (limited to 'node')
-rw-r--r--node/countexecutenode.cpp4
-rw-r--r--node/executionnode.cpp17
-rw-r--r--node/executionnode.h5
-rw-r--r--node/helpnode.cpp2
-rw-r--r--node/jumpbackwardnode.cpp33
-rw-r--r--node/jumpbackwardnode.h5
-rw-r--r--node/numbernode.cpp2
-rw-r--r--node/rerolldicenode.cpp2
-rw-r--r--node/scalaroperatornode.cpp33
-rw-r--r--node/scalaroperatornode.h1
-rw-r--r--node/startingnode.cpp2
11 files changed, 90 insertions, 16 deletions
diff --git a/node/countexecutenode.cpp b/node/countexecutenode.cpp
index a663544..d0084a3 100644
--- a/node/countexecutenode.cpp
+++ b/node/countexecutenode.cpp
@@ -20,7 +20,7 @@ void CountExecuteNode::run(ExecutionNode *previous)
{
return;
}
- DiceResult* previous_result = static_cast<DiceResult*>(previous->getResult());
+ DiceResult* previous_result = dynamic_cast<DiceResult*>(previous->getResult());
if(NULL!=previous_result)
{
m_result->setPrevious(previous_result);
@@ -41,7 +41,7 @@ void CountExecuteNode::run(ExecutionNode *previous)
}
QString CountExecuteNode::toString() const
{
- return "CountExecuteNode";
+ return "CountExecuteNode"+m_validator->toString();
}
qint64 CountExecuteNode::getPriority() const
{
diff --git a/node/executionnode.cpp b/node/executionnode.cpp
index e1b71b0..bc002ce 100644
--- a/node/executionnode.cpp
+++ b/node/executionnode.cpp
@@ -34,3 +34,20 @@ ExecutionNode* ExecutionNode::getPreviousNode() const
{
return m_previousNode;
}
+void ExecutionNode::generateDotTree(QString& s)
+{
+ s.append(toString());
+ if(NULL!=m_nextNode)
+ {
+ s.append(" -> ");
+ s.append(m_nextNode->toString());
+ s.append(" [label=\"nextNode\"];\n");
+ m_nextNode->generateDotTree(s);
+ }
+ else
+ {
+ s.append(" -> ");
+ s.append("NULL");
+ s.append(" [label=\"nextNode\"];\n");
+ }
+}
diff --git a/node/executionnode.h b/node/executionnode.h
index e10ccb6..2a82470 100644
--- a/node/executionnode.h
+++ b/node/executionnode.h
@@ -59,6 +59,11 @@ public:
virtual QList<ExecutionNode::ERROR_CODE> getErrorList();
/**
+ * @brief generateDotTree
+ */
+ virtual void generateDotTree(QString&);
+
+ /**
* @brief getHelp
* @return
*/
diff --git a/node/helpnode.cpp b/node/helpnode.cpp
index 9a0504e..bae4b21 100644
--- a/node/helpnode.cpp
+++ b/node/helpnode.cpp
@@ -31,7 +31,7 @@ void HelpNode::run(ExecutionNode* previous)
}
QString HelpNode::toString()const
{
- return QObject::tr("Rolisteam Dice Parser: Full documentation at: https://github.com/obiwankennedy/DiceParser/blob/master/HelpMe.md");
+ return QObject::tr("Rolisteam Dice Parser: Full documentation at: https://github.com/obiwankennedy/DiceParser/blob/master/HelpMe.md\n");
}
qint64 HelpNode::getPriority() const
diff --git a/node/jumpbackwardnode.cpp b/node/jumpbackwardnode.cpp
index c311ed2..c8b392b 100644
--- a/node/jumpbackwardnode.cpp
+++ b/node/jumpbackwardnode.cpp
@@ -1,32 +1,37 @@
#include "jumpbackwardnode.h"
+
JumpBackwardNode::JumpBackwardNode()
{
+ m_diceResult =new DiceResult();
+ m_result = m_diceResult;
}
qint64 JumpBackwardNode::getPriority() const
{
- return 1;
+ return 4;
}
QString JumpBackwardNode::toString() const
{
- return QString();
+ return QString("JumpBackwardNode");
}
void JumpBackwardNode::run(ExecutionNode* previous)
{
+ m_previousNode = previous;
ExecutionNode* parent = previous;
bool found=false;
- int i = 1;
+ int i = 3;
Result* result=NULL;
- while((NULL!=parent)&&(found))
+ while((NULL!=parent)&&(!found))
{
+
result = parent->getResult();
- if(NULL!=result)
+ if((NULL!=result))
{
--i;
- if(i==0)
+ if((i==0)&&(parent->getResult()->hasResultOfType(Result::DICE_LIST)))
{
found =true;
}
@@ -34,5 +39,19 @@ void JumpBackwardNode::run(ExecutionNode* previous)
parent = parent->getPreviousNode();
}
- m_result = result;
+ DiceResult* diceResult = dynamic_cast<DiceResult*>(result);
+ foreach(Die* die,diceResult->getResultList())
+ {
+ Die* tmpdie = new Die();
+ *tmpdie=*die;
+ m_diceResult->insertResult(tmpdie);
+ }
+
+ //*m_result = *result;
+ m_result->setPrevious(parent->getResult());
+
+ if(NULL!=m_nextNode)
+ {
+ m_nextNode->run(this);
+ }
}
diff --git a/node/jumpbackwardnode.h b/node/jumpbackwardnode.h
index d211385..ba25c7b 100644
--- a/node/jumpbackwardnode.h
+++ b/node/jumpbackwardnode.h
@@ -2,7 +2,7 @@
#define JUMPBACKWARDNODE_H
#include "executionnode.h"
-
+#include "diceresult.h"
class JumpBackwardNode : public ExecutionNode
{
public:
@@ -20,7 +20,8 @@ public:
* @return
*/
virtual qint64 getPriority() const;
-
+private:
+ DiceResult* m_diceResult;
};
diff --git a/node/numbernode.cpp b/node/numbernode.cpp
index 4e9d9a3..51a859f 100644
--- a/node/numbernode.cpp
+++ b/node/numbernode.cpp
@@ -25,7 +25,7 @@ void NumberNode::setNumber(qint64 a)
}
QString NumberNode::toString() const
{
- return QString("NumberNode:%1").arg(m_number);
+ return QString("NumberNode_%1").arg(m_number);
}
qint64 NumberNode::getPriority() const
{
diff --git a/node/rerolldicenode.cpp b/node/rerolldicenode.cpp
index 56bef61..81b5e01 100644
--- a/node/rerolldicenode.cpp
+++ b/node/rerolldicenode.cpp
@@ -8,7 +8,7 @@ RerollDiceNode::RerollDiceNode()
}
void RerollDiceNode::run(ExecutionNode* previous)
{
-m_previousNode = previous;
+ m_previousNode = previous;
if((NULL!=previous)&&(NULL!=previous->getResult()))
{
DiceResult* previous_result = static_cast<DiceResult*>(previous->getResult());
diff --git a/node/scalaroperatornode.cpp b/node/scalaroperatornode.cpp
index 6cef1a9..67fc344 100644
--- a/node/scalaroperatornode.cpp
+++ b/node/scalaroperatornode.cpp
@@ -38,7 +38,10 @@ void ScalarOperatorNode::run(ExecutionNode* previous)
Result* internalResult = internal->getResult();
m_result->setPrevious(internalResult);
- m_internalNode->getResult()->setPrevious(previousResult);
+ if(NULL!=m_internalNode->getResult())
+ {
+ m_internalNode->getResult()->setPrevious(previousResult);
+ }
switch(m_myOperator)
{
@@ -112,3 +115,31 @@ qint64 ScalarOperatorNode::getPriority() const
else
return 2;
}
+void ScalarOperatorNode::generateDotTree(QString& s)
+{
+ s.append(toString());
+ if(NULL!=m_nextNode)
+ {
+ s.append(" -> ");
+ s.append(m_nextNode->toString());
+ s.append(" [label=\"nextNode\"];\n");
+ m_nextNode->generateDotTree(s);
+ }
+ else
+ {
+ s.append(" -> ");
+ s.append("NULL");
+ s.append(" [label=\"nextNode\"];\n");
+ }
+ QString str;
+ str.append("\n");
+ if(NULL!=m_internalNode)
+ {
+ str.append(toString());
+ str.append(" -> ");
+ str.append(m_internalNode->toString());
+ str.append(" [label=\"internalNode\"];\n");
+ m_internalNode->generateDotTree(str);
+ }
+ s.append(str);
+}
diff --git a/node/scalaroperatornode.h b/node/scalaroperatornode.h
index 14f759b..2b4f68a 100644
--- a/node/scalaroperatornode.h
+++ b/node/scalaroperatornode.h
@@ -19,6 +19,7 @@ public:
virtual QString toString()const;
virtual qint64 getPriority() const;
+ void generateDotTree(QString& s);
private:
qint64 add(qint64,qint64);
diff --git a/node/startingnode.cpp b/node/startingnode.cpp
index 7ce1e38..48ac4a4 100644
--- a/node/startingnode.cpp
+++ b/node/startingnode.cpp
@@ -15,7 +15,7 @@ void StartingNode::run(ExecutionNode*)
}
QString StartingNode::toString() const
{
- return "Starting node";
+ return "StartingNode";
}
qint64 StartingNode::getPriority() const
{