From 8e8384b27f83d0375d381a86622b0afd4c42eacb Mon Sep 17 00:00:00 2001 From: Renaud G Date: Wed, 10 Jul 2019 11:55:14 +0200 Subject: Change behaviour of occurence count node. Now it can generate a dice result. --- node/occurencecountnode.cpp | 107 +++++++++++++++++++++++++++++--------------- node/occurencecountnode.h | 6 +++ 2 files changed, 77 insertions(+), 36 deletions(-) (limited to 'node') diff --git a/node/occurencecountnode.cpp b/node/occurencecountnode.cpp index 4fdbc51..e0117ef 100644 --- a/node/occurencecountnode.cpp +++ b/node/occurencecountnode.cpp @@ -21,11 +21,7 @@ #include "result/diceresult.h" #include "result/stringresult.h" -OccurenceCountNode::OccurenceCountNode() : ExecutionNode() -{ - m_stringResult= new StringResult(); - m_result= m_stringResult; -} +OccurenceCountNode::OccurenceCountNode() : ExecutionNode() {} void OccurenceCountNode::run(ExecutionNode* previous) { @@ -35,7 +31,6 @@ void OccurenceCountNode::run(ExecutionNode* previous) return; DiceResult* previousDiceResult= dynamic_cast(m_previousNode->getResult()); - // m_diceResult->setPrevious(previousDiceResult); if(nullptr == previousDiceResult) return; @@ -55,40 +50,13 @@ void OccurenceCountNode::run(ExecutionNode* previous) } std::sort(vec.begin(), vec.end()); - - QStringList list; - for(auto key : mapOccurence) + if(nullptr == m_nextNode) { - if(nullptr != m_validator) - { - Die die; - die.insertRollValue(key.first); - if(!m_validator->hasValid(&die, true)) - continue; - } - - if(key.second < m_width) - continue; - - if(key.first >= m_height) - list << QStringLiteral("%1x%2").arg(key.second).arg(key.first); + runForStringResult(mapOccurence, vec); } - - QStringList resultList; - std::for_each(vec.begin(), vec.end(), [&resultList](qint64 val) { resultList << QString::number(val); }); - - QString result; - - if(!list.isEmpty()) - result= list.join(','); else - result= QObject::tr("No matching result"); - - m_stringResult->setText(QStringLiteral("%1 - [%2]").arg(result).arg(resultList.join(','))); - - if(nullptr != m_nextNode) { - m_nextNode->run(this); + runForDiceResult(mapOccurence); } } QString OccurenceCountNode::toString(bool label) const @@ -109,6 +77,7 @@ ExecutionNode* OccurenceCountNode::getCopy() const qint64 OccurenceCountNode::getPriority() const { qint64 priority= 0; + if(nullptr != m_previousNode) { priority= m_previousNode->getPriority(); @@ -145,3 +114,69 @@ void OccurenceCountNode::setValidator(Validator* validator) { m_validator= validator; } +void OccurenceCountNode::runForStringResult(const std::map& mapOccurence, QVector& vec) +{ + m_stringResult= new StringResult(); + m_result= m_stringResult; + QStringList list; + for(auto key : mapOccurence) + { + if(nullptr != m_validator) + { + Die die; + die.insertRollValue(key.first); + if(!m_validator->hasValid(&die, true)) + continue; + } + + if(key.second < m_width) + continue; + + if(key.first >= m_height) + list << QStringLiteral("%1x%2").arg(key.second).arg(key.first); + } + + QStringList resultList; + std::for_each(vec.begin(), vec.end(), [&resultList](qint64 val) { resultList << QString::number(val); }); + + QString result; + + if(!list.isEmpty()) + result= list.join(','); + else + result= QObject::tr("No matching result"); + + m_stringResult->setText(QStringLiteral("%1 - [%2]").arg(result).arg(resultList.join(','))); +} +void OccurenceCountNode::runForDiceResult(const std::map& mapOccurence) +{ + m_diceResult= new DiceResult(); + m_result= m_diceResult; + QStringList list; + for(auto key : mapOccurence) + { + if(nullptr != m_validator) + { + Die die; + die.insertRollValue(key.first); + if(!m_validator->hasValid(&die, true)) + continue; + } + + if(key.second < m_width) + continue; + + if(key.first >= m_height) + { + // list << QStringLiteral("%1x%2").arg(key.second).arg(key.first); + Die* die= new Die(); + die->insertRollValue(key.second * key.first); + m_diceResult->insertResult(die); + } + } + + if(nullptr != m_nextNode) + { + m_nextNode->run(this); + } +} diff --git a/node/occurencecountnode.h b/node/occurencecountnode.h index 125f340..492b295 100644 --- a/node/occurencecountnode.h +++ b/node/occurencecountnode.h @@ -24,6 +24,7 @@ #include "validator.h" class StringResult; +class DiceResult; class OccurenceCountNode : public ExecutionNode { public: @@ -44,11 +45,16 @@ public: Validator* getValidator() const; void setValidator(Validator* validator); +private: + void runForStringResult(const std::map& mapOccurence, QVector& vec); + void runForDiceResult(const std::map& mapOccurence); + private: qint64 m_width= 1; qint64 m_height= 0; Validator* m_validator= nullptr; StringResult* m_stringResult= nullptr; + DiceResult* m_diceResult= nullptr; }; #endif // OCCURENCECOUNTNODE_H -- cgit v1.2.3-70-g09d2