File indexing completed on 2024-05-12 05:39:26
0001 #include "countexecutenode.h" 0002 #include "result/diceresult.h" 0003 #include "validatorlist.h" 0004 0005 CountExecuteNode::CountExecuteNode() : m_scalarResult(new ScalarResult()), m_validatorList(nullptr) 0006 { 0007 m_result= m_scalarResult; 0008 } 0009 void CountExecuteNode::setValidatorList(ValidatorList* validatorlist) 0010 { 0011 m_validatorList= validatorlist; 0012 } 0013 CountExecuteNode::~CountExecuteNode() 0014 { 0015 if(nullptr != m_validatorList) 0016 { 0017 delete m_validatorList; 0018 } 0019 } 0020 0021 void CountExecuteNode::run(ExecutionNode* previous) 0022 { 0023 m_previousNode= previous; 0024 if(nullptr == previous) 0025 { 0026 m_errors.insert(Dice::ERROR_CODE::NO_PREVIOUS_ERROR, QStringLiteral("No scalar result before Swith/Case operator")); 0027 return; 0028 } 0029 DiceResult* previousResult= dynamic_cast<DiceResult*>(previous->getResult()); 0030 if(nullptr != previousResult) 0031 { 0032 m_result->setPrevious(previousResult); 0033 qint64 sum= 0; 0034 std::function<void(Die*, qint64)> f= [&sum](const Die*, qint64 score) { sum+= score; }; 0035 m_validatorList->validResult(previousResult, true, true, f); 0036 m_scalarResult->setValue(sum); 0037 if(nullptr != m_nextNode) 0038 { 0039 m_nextNode->run(this); 0040 } 0041 } 0042 } 0043 QString CountExecuteNode::toString(bool withlabel) const 0044 { 0045 if(withlabel) 0046 { 0047 return QString("%1 [label=\"CountExecuteNode %2\"]").arg(m_id, m_validatorList->toString()); 0048 } 0049 else 0050 { 0051 return m_id; 0052 } 0053 } 0054 qint64 CountExecuteNode::getPriority() const 0055 { 0056 qint64 priority= 0; 0057 if(nullptr != m_previousNode) 0058 { 0059 priority= m_previousNode->getPriority(); 0060 } 0061 return priority; 0062 } 0063 0064 ExecutionNode* CountExecuteNode::getCopy() const 0065 { 0066 CountExecuteNode* node= new CountExecuteNode(); 0067 if(nullptr != m_validatorList) 0068 { 0069 node->setValidatorList(m_validatorList->getCopy()); 0070 } 0071 if(nullptr != m_nextNode) 0072 { 0073 node->setNextNode(m_nextNode->getCopy()); 0074 } 0075 return node; 0076 }