File indexing completed on 2024-05-12 05:39:27

0001 #include "executionnode.h"
0002 
0003 #include <QUuid>
0004 
0005 ExecutionNode::ExecutionNode()
0006     : m_previousNode(nullptr)
0007     , m_result(nullptr)
0008     , m_nextNode(nullptr)
0009     , m_errors(QMap<Dice::ERROR_CODE, QString>())
0010     , m_id(QString("\"%1\"").arg(QUuid::createUuid().toString()))
0011 {
0012 }
0013 ExecutionNode::~ExecutionNode()
0014 {
0015     if(nullptr != m_result)
0016     {
0017         delete m_result;
0018         m_result= nullptr;
0019     }
0020     if(nullptr != m_nextNode)
0021     {
0022         delete m_nextNode;
0023         m_nextNode= nullptr;
0024     }
0025 }
0026 
0027 Result* ExecutionNode::getResult()
0028 {
0029     return m_result;
0030 }
0031 void ExecutionNode::setNextNode(ExecutionNode* node)
0032 {
0033     m_nextNode= node;
0034 }
0035 void ExecutionNode::setPreviousNode(ExecutionNode* node)
0036 {
0037     m_previousNode= node;
0038 }
0039 ExecutionNode* ExecutionNode::getNextNode()
0040 {
0041     return m_nextNode;
0042 }
0043 QMap<Dice::ERROR_CODE, QString> ExecutionNode::getExecutionErrorMap()
0044 {
0045     if(nullptr != m_nextNode)
0046     {
0047         auto const& keys= m_nextNode->getExecutionErrorMap().keys();
0048         for(auto& key : keys)
0049         {
0050             m_errors.insert(key, m_nextNode->getExecutionErrorMap().value(key));
0051         }
0052     }
0053     return m_errors;
0054 }
0055 QString ExecutionNode::getHelp()
0056 {
0057     return QString();
0058 }
0059 ExecutionNode* ExecutionNode::getPreviousNode() const
0060 {
0061     return m_previousNode;
0062 }
0063 void ExecutionNode::generateDotTree(QString& s)
0064 {
0065     auto str= toString(true);
0066     if(s.contains(str))
0067         return;
0068     s.append(toString(true));
0069     s.append(";\n");
0070 
0071     if(nullptr != m_nextNode)
0072     {
0073         s.append(toString(false));
0074         s.append(" -> ");
0075         s.append(m_nextNode->toString(false));
0076         s.append("[label=\"next\"];\n");
0077         //        s.append(" [label=\"nextNode\"];\n");
0078         m_nextNode->generateDotTree(s);
0079     }
0080     else
0081     {
0082         s.append(toString(false));
0083         s.append(" -> ");
0084         s.append("nullptr;\n");
0085     }
0086     if(nullptr != m_result)
0087     {
0088         s.append(toString(false));
0089         s.append(" ->");
0090         s.append(m_result->toString(false));
0091         s.append(" [label=\"Result\", style=\"dashed\"];\n");
0092         if(nullptr == m_nextNode)
0093             m_result->generateDotTree(s);
0094     }
0095 }
0096 qint64 ExecutionNode::getScalarResult()
0097 {
0098     if(m_result == nullptr)
0099         return 0;
0100     return m_result->getResult(Dice::RESULT_TYPE::SCALAR).toInt();
0101 }