diff options
| author | 2025-02-09 06:05:05 +0100 | |
|---|---|---|
| committer | 2025-02-09 06:05:05 +0100 | |
| commit | 6fcb5ca46927f7baab744e117af9eb1ce5b74838 (patch) | |
| tree | 803b14b1315dfed095705d0c417b19c970541535 /src/libparser/node/roundnode.cpp | |
| parent | b8486f92408afa1a0c71d3f62d93f49ac8bebc60 (diff) | |
| download | OneRoll-6fcb5ca46927f7baab744e117af9eb1ce5b74838.tar.gz OneRoll-6fcb5ca46927f7baab744e117af9eb1ce5b74838.zip | |
[Dice] add functions: floor, ceil, round
Diffstat (limited to 'src/libparser/node/roundnode.cpp')
| -rw-r--r-- | src/libparser/node/roundnode.cpp | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/libparser/node/roundnode.cpp b/src/libparser/node/roundnode.cpp new file mode 100644 index 0000000..8f825f5 --- /dev/null +++ b/src/libparser/node/roundnode.cpp @@ -0,0 +1,71 @@ +#include "roundnode.h" + +#include <diceparser/parsingtoolbox.h> + +RoundNode::RoundNode(Mode mode) : m_scalarResult(new ScalarResult), m_mode(mode) {} + +void RoundNode::run(ExecutionNode* previous) +{ + m_previousNode= previous; + + if(m_cmd == nullptr) + return; + + m_cmd->execute(this); + auto internal= ParsingToolBox::getLeafNode(m_cmd); + if(!internal) + return; + + auto endResult= internal->getResult(); + + auto scalar= endResult->getResult(Dice::RESULT_TYPE::SCALAR).toDouble(); + + int resVal; + switch(m_mode) + { + case FLOOR: + resVal= std::floor(scalar); + break; + case CEIL: + resVal= std::ceil(scalar); + break; + case ROUND: + resVal= std::round(scalar); + break; + } + + m_scalarResult->setValue(resVal); + m_result= m_scalarResult.get(); +} + +QString RoundNode::toString(bool withLabel) const +{ + + return withLabel ? QString("%1 [label=\"RoundNode\"]").arg(m_id) : m_id; +} + +qint64 RoundNode::getPriority() const +{ + qint64 priority= 0; + if(nullptr != m_nextNode) + { + priority= m_nextNode->getPriority(); + } + + return priority; +} + +ExecutionNode* RoundNode::getCopy() const +{ + RoundNode* node= new RoundNode(m_mode); + if(nullptr != m_nextNode) + { + node->setNextNode(m_nextNode->getCopy()); + } + return node; +} + +void RoundNode::setCommand(ExecutionNode* cmd) +{ + m_cmd= cmd; +} |