File indexing completed on 2024-05-12 05:39:27
0001 #include "filternode.h" 0002 #include "validatorlist.h" 0003 0004 FilterNode::FilterNode() : m_diceResult(new DiceResult()), m_eachValue(false) 0005 { 0006 m_result= m_diceResult; 0007 } 0008 0009 FilterNode::~FilterNode() 0010 { 0011 if(nullptr != m_validatorList) 0012 { 0013 delete m_validatorList; 0014 } 0015 } 0016 void FilterNode::setValidatorList(ValidatorList* validatorlist) 0017 { 0018 m_validatorList= validatorlist; 0019 } 0020 void FilterNode::run(ExecutionNode* previous) 0021 { 0022 m_previousNode= previous; 0023 if(nullptr == previous) 0024 { 0025 return; 0026 } 0027 DiceResult* previousDiceResult= dynamic_cast<DiceResult*>(previous->getResult()); 0028 m_result->setPrevious(previousDiceResult); 0029 0030 if(nullptr != previousDiceResult) 0031 { 0032 QList<Die*> diceList2; 0033 std::function<void(Die*, qint64)> f= [&diceList2](Die* die, qint64) { 0034 if(die == nullptr) 0035 return; 0036 Die* tmpdie= new Die(*die); 0037 diceList2.append(tmpdie); 0038 die->displayed(); 0039 }; 0040 m_validatorList->validResult(previousDiceResult, true, true, f); 0041 0042 QList<Die*> diceList= previousDiceResult->getResultList(); 0043 0044 diceList.erase(std::remove_if(diceList.begin(), diceList.end(), 0045 [&diceList2](Die* die) { return diceList2.contains(die); }), 0046 diceList.end()); 0047 for(Die* tmp : diceList) 0048 { 0049 tmp->setHighlighted(false); 0050 tmp->setDisplayed(true); 0051 } 0052 0053 m_diceResult->setResultList(diceList2); 0054 if(nullptr != m_nextNode) 0055 { 0056 m_nextNode->run(this); 0057 } 0058 } 0059 } 0060 0061 QString FilterNode::toString(bool wl) const 0062 { 0063 if(wl) 0064 { 0065 return QString("%1 [label=\"FilterNode\"]").arg(m_id); 0066 } 0067 else 0068 { 0069 return m_id; 0070 } 0071 } 0072 qint64 FilterNode::getPriority() const 0073 { 0074 qint64 priority= 0; 0075 if(nullptr != m_nextNode) 0076 { 0077 priority= m_nextNode->getPriority(); 0078 } 0079 0080 return priority; 0081 } 0082 ExecutionNode* FilterNode::getCopy() const 0083 { 0084 FilterNode* node= new FilterNode(); 0085 if(nullptr != m_validatorList) 0086 { 0087 node->setValidatorList(m_validatorList->getCopy()); 0088 } 0089 if(nullptr != m_nextNode) 0090 { 0091 node->setNextNode(m_nextNode->getCopy()); 0092 } 0093 return node; 0094 }