aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/libparser/node/groupnode.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libparser/node/groupnode.cpp')
-rw-r--r--src/libparser/node/groupnode.cpp104
1 files changed, 53 insertions, 51 deletions
diff --git a/src/libparser/node/groupnode.cpp b/src/libparser/node/groupnode.cpp
index 860d758..8dab236 100644
--- a/src/libparser/node/groupnode.cpp
+++ b/src/libparser/node/groupnode.cpp
@@ -40,6 +40,11 @@ void DieGroup::removeValue(DieGroup i)
}
}
+void DieGroup::sort()
+{
+ std::sort(std::begin(*this), std::end(*this), std::greater<qint64>());
+}
+
int DieGroup::getLost() const
{
return getSum() - m_exceptedValue;
@@ -69,63 +74,60 @@ void GroupNode::run(ExecutionNode* previous)
m_result= m_scalarResult;
m_previousNode= previous;
- if(nullptr != previous)
+ if(isValid(!m_previousNode, Dice::ERROR_CODE::NO_PREVIOUS_ERROR, tr("No Previous node")))
+ return;
+
+ m_result->setPrevious(previous->getResult());
+ Result* tmpResult= previous->getResult();
+
+ if(isValid(!tmpResult, Dice::ERROR_CODE::NO_VALID_RESULT, tr("No Valid result")))
+ return;
+
+ DiceResult* dice= dynamic_cast<DiceResult*>(tmpResult);
+
+ if(isValid(!dice, Dice::ERROR_CODE::NO_VALID_RESULT, tr("No Valid Dice result")))
+ return;
+
+ auto allDicelist= dice->getResultList();
+ DieGroup allResult;
+ for(auto& die : allDicelist)
{
- m_result->setPrevious(previous->getResult());
- Result* tmpResult= previous->getResult();
- if(nullptr != tmpResult)
- {
- DiceResult* dice= dynamic_cast<DiceResult*>(tmpResult);
- if(nullptr != dice)
- {
- auto list= dice->getResultList();
- DieGroup allResult;
- for(auto& die : list)
- {
- allResult << die->getListValue();
- }
- std::sort(allResult.begin(), allResult.end(), std::greater<qint64>());
- if(allResult.getSum() > m_groupValue)
- {
- auto copy= allResult;
- auto const die= getGroup(allResult);
+ allResult << die->getListValue();
+ }
+ std::sort(allResult.begin(), allResult.end(), std::greater<qint64>());
+ if(allResult.getSum() <= m_groupValue)
+ {
+ m_scalarResult->setValue(0);
+ return;
+ }
- for(auto list : die)
- {
- for(auto val : list)
- {
- copy.removeOne(val);
- }
- }
- m_scalarResult->setValue(die.size());
- QStringList list;
- for(auto group : die)
- {
- QStringList values;
- std::transform(group.begin(), group.end(), std::back_inserter(values),
- [](qint64 val) { return QString::number(val); });
- list << QStringLiteral("{%1}").arg(values.join(","));
- }
- QStringList unused;
- std::transform(copy.begin(), copy.end(), std::back_inserter(unused),
- [](qint64 val) { return QString::number(val); });
- if(!unused.isEmpty())
- m_stringResult->addText(
- QStringLiteral("%1 (%2 - [%3])").arg(die.size()).arg(list.join(",")).arg(unused.join(",")));
- else
- m_stringResult->addText(QStringLiteral("%1 (%2)").arg(die.size()).arg(list.join(",")));
- }
- else
- {
- m_scalarResult->setValue(0);
- }
- }
+ auto copy= allResult;
+ auto const die= getGroup(allResult);
+
+ for(auto& list : die)
+ {
+ for(auto& val : list)
+ {
+ copy.removeOne(val);
}
}
- if(nullptr != m_nextNode)
+ m_scalarResult->setValue(die.size());
+ QStringList list;
+ for(auto group : die)
{
- m_nextNode->run(this);
+ QStringList values;
+ std::transform(group.begin(), group.end(), std::back_inserter(values),
+ [](qint64 val) { return QString::number(val); });
+ list << QStringLiteral("{%1}").arg(values.join(","));
}
+ QStringList unused;
+ std::transform(copy.begin(), copy.end(), std::back_inserter(unused),
+ [](qint64 val) { return QString::number(val); });
+ if(!unused.isEmpty())
+ m_stringResult->addText(
+ QStringLiteral("%1 (%2 - [%3])").arg(die.size()).arg(list.join(",")).arg(unused.join(",")));
+ else
+ m_stringResult->addText(QStringLiteral("%1 (%2)").arg(die.size()).arg(list.join(",")));
}
QString GroupNode::toString(bool withLabel) const