aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/libparser/node/allsamenode.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libparser/node/allsamenode.cpp')
-rw-r--r--src/libparser/node/allsamenode.cpp82
1 files changed, 38 insertions, 44 deletions
diff --git a/src/libparser/node/allsamenode.cpp b/src/libparser/node/allsamenode.cpp
index 3b2f10f..2303b78 100644
--- a/src/libparser/node/allsamenode.cpp
+++ b/src/libparser/node/allsamenode.cpp
@@ -8,53 +8,47 @@ AllSameNode::AllSameNode() : m_diceResult(new DiceResult())
void AllSameNode::run(ExecutionNode* previous)
{
m_previousNode= previous;
- if(nullptr != previous)
- {
- DiceResult* previous_result= dynamic_cast<DiceResult*>(previous->getResult());
- if(nullptr != previous_result)
- {
- m_result->setPrevious(previous_result);
- bool allSame= true;
- int i= 0;
- qint64 previousValue= 0;
- if(previous_result->getResultList().size() < 2)
- {
- m_errors.insert(Dice::ERROR_CODE::ENDLESS_LOOP_ERROR,
- QStringLiteral("T operator must operate on more than 1 die"));
- return;
- }
- for(auto& die : previous_result->getResultList())
- {
- if(i == 0)
- previousValue= die->getValue();
- Die* tmpdie= new Die(*die);
- m_diceResult->insertResult(tmpdie);
- die->displayed();
- if(previousValue != die->getValue())
- allSame= false;
- ++i;
- }
+ if(isValid(!m_previousNode, Dice::ERROR_CODE::NO_PREVIOUS_ERROR, tr("No valid previous node")))
+ return;
- while(allSame)
- {
- QList<Die*> list= m_diceResult->getResultList();
- qint64 pValue= 0;
- int i= 0;
- for(auto& die : list)
- {
- die->roll(true);
- if(i == 0)
- pValue= die->getValue();
- if(pValue != die->getValue())
- allSame= false;
- ++i;
- }
- }
- }
+ DiceResult* previous_result= dynamic_cast<DiceResult*>(previous->getResult());
+ if(isValid(!previous_result, Dice::ERROR_CODE::NO_VALID_RESULT, tr("No dice result")))
+ return;
+
+ m_result->setPrevious(previous_result);
+ bool allSame= true;
+ int i= 0;
+ qint64 previousValue= 0;
+ if(isValid(previous_result->getResultList().size() < 2, Dice::ERROR_CODE::ENDLESS_LOOP_ERROR,
+ QStringLiteral("T operator must operate on more than 1 die")))
+ return;
+
+ for(auto& die : previous_result->getResultList())
+ {
+ if(i == 0)
+ previousValue= die->getValue();
+ Die* tmpdie= new Die(*die);
+ m_diceResult->insertResult(tmpdie);
+ die->displayed();
+ if(previousValue != die->getValue())
+ allSame= false;
+ ++i;
}
- if(nullptr != m_nextNode)
+
+ while(allSame)
{
- m_nextNode->run(this);
+ QList<Die*> list= m_diceResult->getResultList();
+ qint64 pValue= 0;
+ int i= 0;
+ for(auto& die : list)
+ {
+ die->roll(true);
+ if(i == 0)
+ pValue= die->getValue();
+ if(pValue != die->getValue())
+ allSame= false;
+ ++i;
+ }
}
}