diff options
| author | 2016-09-25 10:04:28 +0200 | |
|---|---|---|
| committer | 2016-09-25 10:04:28 +0200 | |
| commit | fac053c3aacc0e2ede8a85ff41e27eed1c360f6f (patch) | |
| tree | c91ff176e60f1f6e634107b4e7a7282e831975ee /node | |
| parent | dbb57d52d351e340ce69fccaedbdf758b04ed8fe (diff) | |
| parent | e225f2edfd365d1709df2cb5bb2f752ec8d82c1c (diff) | |
| download | OneRoll-fac053c3aacc0e2ede8a85ff41e27eed1c360f6f.tar.gz OneRoll-fac053c3aacc0e2ede8a85ff41e27eed1c360f6f.zip | |
Merge branch 'master' of github.com:Rolisteam/DiceParser
Diffstat (limited to 'node')
| -rw-r--r-- | node/executionnode.cpp | 16 | ||||
| -rw-r--r-- | node/ifnode.cpp | 48 | ||||
| -rw-r--r-- | node/ifnode.h | 7 | ||||
| -rw-r--r-- | node/jumpbackwardnode.cpp | 61 | ||||
| -rw-r--r-- | node/jumpbackwardnode.h | 4 | ||||
| -rw-r--r-- | node/scalaroperatornode.cpp | 2 |
6 files changed, 125 insertions, 13 deletions
diff --git a/node/executionnode.cpp b/node/executionnode.cpp index d2f291b..a419bec 100644 --- a/node/executionnode.cpp +++ b/node/executionnode.cpp @@ -62,7 +62,7 @@ void ExecutionNode::generateDotTree(QString& s) s.append(toString(false)); s.append(" -> "); s.append(m_nextNode->toString(false)); - s.append(";\n"); + s.append("[label=\"next\"];\n"); // s.append(" [label=\"nextNode\"];\n"); m_nextNode->generateDotTree(s); } @@ -71,13 +71,17 @@ void ExecutionNode::generateDotTree(QString& s) s.append(toString(false)); s.append(" -> "); s.append("NULL;\n"); + if(NULL!=m_result) + { + s.append(toString(false)); + s.append(" ->"); + s.append(m_result->toString(false)); + s.append(" [label=\"Result\"];\n"); - s.append(toString(false)); - s.append(" ->"); - s.append(m_result->toString(false)); - s.append(" [label=\"Result\"];\n"); - m_result->generateDotTree(s); + m_result->generateDotTree(s); + } } + } diff --git a/node/ifnode.cpp b/node/ifnode.cpp index bf07776..8605dcf 100644 --- a/node/ifnode.cpp +++ b/node/ifnode.cpp @@ -105,6 +105,54 @@ void IfNode::setInstructionFalse(ExecutionNode* node) { m_false = node; } +void IfNode::generateDotTree(QString& s) +{ + s.append(toString(true)); + s.append(";\n"); + + if((NULL!=m_true)&&(m_true != m_nextNode)) + { + s.append(toString(false)); + s.append(" -> "); + s.append(m_true->toString(false)); + s.append("[label=\"true\"];\n"); +// s.append(" [label=\"nextNode\"];\n"); + m_true->generateDotTree(s); + } + if((NULL!=m_false)&&(m_false != m_nextNode)) + { + s.append(toString(false)); + s.append(" -> "); + s.append(m_false->toString(false)); + s.append("[label=\"false\"];\n"); + m_false->generateDotTree(s); + } + + if(NULL!=m_nextNode) + { + s.append(toString(false)); + s.append(" -> "); + s.append(m_nextNode->toString(false)); + s.append("[label=\"next\"];\n"); + m_nextNode->generateDotTree(s); + } + else + { + s.append(toString(false)); + s.append(" -> "); + s.append("NULL;\n"); + + if(NULL!=m_result) + { + + s.append(toString(false)); + s.append(" ->"); + s.append(m_result->toString(false)); + s.append(" [label=\"Result\"];\n"); + m_result->generateDotTree(s); + } + } +} QString IfNode::toString(bool wl) const { diff --git a/node/ifnode.h b/node/ifnode.h index 5872f79..ed9e8de 100644 --- a/node/ifnode.h +++ b/node/ifnode.h @@ -40,6 +40,13 @@ public: virtual QString toString(bool )const; virtual qint64 getPriority() const; + + /** + * @brief generateDotTree + */ + virtual void generateDotTree(QString&); + + protected: ExecutionNode *getLeafNode(ExecutionNode *node); diff --git a/node/jumpbackwardnode.cpp b/node/jumpbackwardnode.cpp index 25056b1..0b2cbf6 100644 --- a/node/jumpbackwardnode.cpp +++ b/node/jumpbackwardnode.cpp @@ -24,6 +24,7 @@ JumpBackwardNode::JumpBackwardNode() { m_previousNode=NULL; + m_backwardNode = NULL; m_diceResult =new DiceResult(); m_result = m_diceResult; } @@ -45,24 +46,74 @@ QString JumpBackwardNode::toString(bool wl) const return m_id; } } +void JumpBackwardNode::generateDotTree(QString& s) +{ + s.append(toString(true)); + s.append(";\n"); + + if(NULL!=m_backwardNode) + { + s.append(toString(false)); + s.append(" -> "); + s.append(m_backwardNode->toString(false)); + s.append("[label=\"backward\"];\n"); + //m_backwardNode->generateDotTree(s); + } + + if(NULL!=m_nextNode) + { + s.append(toString(false)); + s.append(" -> "); + s.append(m_nextNode->toString(false)); + s.append("[label=\"next\"];\n"); + m_nextNode->generateDotTree(s); + } + else + { + s.append(toString(false)); + s.append(" -> "); + s.append("NULL;\n"); + + if(NULL!=m_result) + { + s.append(toString(false)); + s.append(" ->"); + s.append(m_result->toString(false)); + s.append(" [label=\"Result\"];\n"); + m_result->generateDotTree(s); + } + } + +} + void JumpBackwardNode::run(ExecutionNode* previous) { m_previousNode = previous; ExecutionNode* parent = previous; bool found=false; - int i = 3; + //int i = 3; Result* result=NULL; while((NULL!=parent)&&(!found)) { result = parent->getResult(); - if((NULL!=result)) + if(NULL!=result) { - --i; - if((i==0)&&(result->hasResultOfType(Result::DICE_LIST))) + //--i; + if(/*(i==0)&&*/(result->hasResultOfType(Result::DICE_LIST))) { found =true; + m_backwardNode = parent; } + else + { + JumpBackwardNode* jpNode = dynamic_cast<JumpBackwardNode*>(parent); + if(NULL!=jpNode) + { + found = true; + m_backwardNode = parent; + } + } } if(!found) { @@ -88,7 +139,7 @@ void JumpBackwardNode::run(ExecutionNode* previous) } } - m_result->setPrevious(parent->getResult()); + m_result->setPrevious(previous->getResult()); if(NULL!=m_nextNode) { diff --git a/node/jumpbackwardnode.h b/node/jumpbackwardnode.h index a89d0d3..dd70b11 100644 --- a/node/jumpbackwardnode.h +++ b/node/jumpbackwardnode.h @@ -48,9 +48,11 @@ public: * @brief getPriority * @return */ - virtual qint64 getPriority() const; + virtual qint64 getPriority() const; + virtual void generateDotTree(QString &s); private: DiceResult* m_diceResult; + ExecutionNode* m_backwardNode; }; diff --git a/node/scalaroperatornode.cpp b/node/scalaroperatornode.cpp index 0dcb9b9..692b09f 100644 --- a/node/scalaroperatornode.cpp +++ b/node/scalaroperatornode.cpp @@ -47,7 +47,7 @@ ScalarOperatorNode::~ScalarOperatorNode() void ScalarOperatorNode::run(ExecutionNode* previous) { - m_previousNode = previous; + m_previousNode = previous; if(NULL!=m_internalNode) { m_internalNode->run(this); |