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 }