aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/node
diff options
context:
space:
mode:
authorRenaud G <renaud@rolisteam.org>2016-09-25 10:04:28 +0200
committerRenaud G <renaud@rolisteam.org>2016-09-25 10:04:28 +0200
commitfac053c3aacc0e2ede8a85ff41e27eed1c360f6f (patch)
treec91ff176e60f1f6e634107b4e7a7282e831975ee /node
parentdbb57d52d351e340ce69fccaedbdf758b04ed8fe (diff)
parente225f2edfd365d1709df2cb5bb2f752ec8d82c1c (diff)
downloadOneRoll-fac053c3aacc0e2ede8a85ff41e27eed1c360f6f.tar.gz
OneRoll-fac053c3aacc0e2ede8a85ff41e27eed1c360f6f.zip
Merge branch 'master' of github.com:Rolisteam/DiceParser
Diffstat (limited to 'node')
-rw-r--r--node/executionnode.cpp16
-rw-r--r--node/ifnode.cpp48
-rw-r--r--node/ifnode.h7
-rw-r--r--node/jumpbackwardnode.cpp61
-rw-r--r--node/jumpbackwardnode.h4
-rw-r--r--node/scalaroperatornode.cpp2
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);