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 }