diff options
Diffstat (limited to 'node')
| -rw-r--r-- | node/countexecutenode.cpp | 4 | ||||
| -rw-r--r-- | node/executionnode.cpp | 17 | ||||
| -rw-r--r-- | node/executionnode.h | 5 | ||||
| -rw-r--r-- | node/helpnode.cpp | 2 | ||||
| -rw-r--r-- | node/jumpbackwardnode.cpp | 33 | ||||
| -rw-r--r-- | node/jumpbackwardnode.h | 5 | ||||
| -rw-r--r-- | node/numbernode.cpp | 2 | ||||
| -rw-r--r-- | node/rerolldicenode.cpp | 2 | ||||
| -rw-r--r-- | node/scalaroperatornode.cpp | 33 | ||||
| -rw-r--r-- | node/scalaroperatornode.h | 1 | ||||
| -rw-r--r-- | node/startingnode.cpp | 2 |
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 { |