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 }