diff options
Diffstat (limited to 'src/libparser/node/variablenode.cpp')
| -rw-r--r-- | src/libparser/node/variablenode.cpp | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/src/libparser/node/variablenode.cpp b/src/libparser/node/variablenode.cpp new file mode 100644 index 0000000..709ab46 --- /dev/null +++ b/src/libparser/node/variablenode.cpp @@ -0,0 +1,112 @@ +#include "variablenode.h" + +#include "diceresult.h" +#include <diceparser/parsingtoolbox.h> + +VariableNode::VariableNode() {} + +void VariableNode::run(ExecutionNode* previous) +{ + m_previousNode= previous; + if((nullptr != m_data) && (m_data->size() > m_index)) + { + auto value= (*m_data)[m_index]; + value= ParsingToolBox::getLeafNode(value); + if(nullptr == value) + return; + + auto result= value->getResult(); + if(!result) + return; + + m_result= result->getCopy(); + auto diceResult= dynamic_cast<DiceResult*>(result); + if(nullptr != diceResult) + { + for(auto& die : diceResult->getResultList()) + { + die->setDisplayed(false); + } + } + + if(nullptr != m_nextNode) + { + m_nextNode->run(this); + } + } + else + { + m_errors.insert(Dice::ERROR_CODE::NO_VARIBALE, QObject::tr("No variable at index:%1").arg(m_index + 1)); + } +} + +void VariableNode::setDisplayed() +{ + if(!m_result) + return; + auto diceResult= dynamic_cast<DiceResult*>(m_result); + if(nullptr == diceResult) + return; + + for(auto& die : diceResult->getResultList()) + { + die->setDisplayed(true); + } +} + +QString VariableNode::toString(bool withLabel) const +{ + if(withLabel) + { + return QString("%1 [label=\"VariableNode index: %2\"]").arg(m_id).arg(m_index + 1); + } + else + { + return m_id; + } +} + +qint64 VariableNode::getPriority() const +{ + qint64 priority= 4; + if(nullptr != m_previousNode) + { + priority= m_previousNode->getPriority(); + } + return priority; +} + +ExecutionNode* VariableNode::getCopy() const +{ + VariableNode* node= new VariableNode(); + node->setIndex(m_index); + if(nullptr != m_data) + { + node->setData(m_data); + } + if(nullptr != m_nextNode) + { + node->setNextNode(m_nextNode->getCopy()); + } + return node; +} + +quint64 VariableNode::getIndex() const +{ + return m_index; +} + +void VariableNode::setIndex(quint64 index) +{ + m_index= index; +} + +std::vector<ExecutionNode*>* VariableNode::getData() const +{ + return m_data; +} + +void VariableNode::setData(std::vector<ExecutionNode*>* data) +{ + m_data= data; +} |