aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/node/scalaroperatornode.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'node/scalaroperatornode.cpp')
-rw-r--r--node/scalaroperatornode.cpp286
1 files changed, 0 insertions, 286 deletions
diff --git a/node/scalaroperatornode.cpp b/node/scalaroperatornode.cpp
deleted file mode 100644
index c1c4dc5..0000000
--- a/node/scalaroperatornode.cpp
+++ /dev/null
@@ -1,286 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2014 by Renaud Guezennec *
- * https://rolisteam.org/contact *
- * *
- * This file is part of DiceParser *
- * *
- * DiceParser is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
- ***************************************************************************/
-#include "scalaroperatornode.h"
-
-#include "result/diceresult.h"
-#include <QDebug>
-
-ScalarOperatorNode::ScalarOperatorNode()
- : m_internalNode(nullptr), m_scalarResult(new ScalarResult()), m_arithmeticOperator(Dice::ArithmeticOperator::PLUS)
-{
- m_result= m_scalarResult;
-}
-ScalarOperatorNode::~ScalarOperatorNode()
-{
- if(nullptr != m_internalNode)
- {
- delete m_internalNode;
- m_internalNode= nullptr;
- }
-}
-
-void ScalarOperatorNode::run(ExecutionNode* previous)
-{
- m_previousNode= previous;
- if(nullptr != m_internalNode)
- {
- m_internalNode->run(this);
- }
- if(nullptr != previous)
- {
- auto previousResult= previous->getResult();
-
- if(nullptr != previousResult)
- {
- ExecutionNode* internal= m_internalNode;
- if(nullptr != internal)
- {
- while(nullptr != internal->getNextNode())
- {
- internal= internal->getNextNode();
- }
-
- Result* internalResult= internal->getResult();
- m_result->setPrevious(internalResult);
- if(nullptr != m_internalNode->getResult())
- {
- m_internalNode->getResult()->setPrevious(previousResult);
- }
-
- if(internalResult == nullptr)
- {
- m_errors.insert(Dice::ERROR_CODE::NO_VALID_RESULT,
- QObject::tr("No Valid result in arithmetic operation: %1").arg(toString(true)));
- return;
- }
-
- switch(m_arithmeticOperator)
- {
- case Dice::ArithmeticOperator::PLUS:
- m_scalarResult->setValue(add(previousResult->getResult(Dice::RESULT_TYPE::SCALAR).toReal(),
- internalResult->getResult(Dice::RESULT_TYPE::SCALAR).toReal()));
- break;
- case Dice::ArithmeticOperator::MINUS:
- m_scalarResult->setValue(substract(previousResult->getResult(Dice::RESULT_TYPE::SCALAR).toReal(),
- internalResult->getResult(Dice::RESULT_TYPE::SCALAR).toReal()));
- break;
- case Dice::ArithmeticOperator::MULTIPLICATION:
- m_scalarResult->setValue(multiple(previousResult->getResult(Dice::RESULT_TYPE::SCALAR).toReal(),
- internalResult->getResult(Dice::RESULT_TYPE::SCALAR).toReal()));
- break;
- case Dice::ArithmeticOperator::DIVIDE:
- m_scalarResult->setValue(divide(previousResult->getResult(Dice::RESULT_TYPE::SCALAR).toReal(),
- internalResult->getResult(Dice::RESULT_TYPE::SCALAR).toReal()));
- break;
- case Dice::ArithmeticOperator::INTEGER_DIVIDE:
- m_scalarResult->setValue(
- static_cast<int>(divide(previousResult->getResult(Dice::RESULT_TYPE::SCALAR).toReal(),
- internalResult->getResult(Dice::RESULT_TYPE::SCALAR).toReal())));
- break;
- case Dice::ArithmeticOperator::POW:
- m_scalarResult->setValue(pow(previousResult->getResult(Dice::RESULT_TYPE::SCALAR).toReal(),
- internalResult->getResult(Dice::RESULT_TYPE::SCALAR).toReal()));
- break;
- }
- }
-
- if(nullptr != m_nextNode)
- {
- m_nextNode->run(this);
- }
- }
- }
-}
-/*bool ScalarOperatorNode::setOperatorChar(QChar c)
-{
- if(m_scalarOperationList.contains(c))
- {
- m_operator = m_scalarOperationList.value(c);
- return true;
- }
- return false;
-}*/
-
-void ScalarOperatorNode::setInternalNode(ExecutionNode* node)
-{
- m_internalNode= node;
-}
-qint64 ScalarOperatorNode::add(qreal a, qreal b)
-{
- return static_cast<qint64>(a + b);
-}
-qint64 ScalarOperatorNode::substract(qreal a, qreal b)
-{
- return static_cast<qint64>(a - b);
-}
-qreal ScalarOperatorNode::divide(qreal a, qreal b)
-{
- if(qFuzzyCompare(b, 0))
- {
- m_errors.insert(Dice::ERROR_CODE::DIVIDE_BY_ZERO, QObject::tr("Division by zero"));
- return 0;
- }
- return static_cast<qreal>(a / b);
-}
-qint64 ScalarOperatorNode::multiple(qreal a, qreal b)
-{
- return static_cast<qint64>(a * b);
-}
-qint64 ScalarOperatorNode::pow(qreal a, qreal b)
-{
- return static_cast<qint64>(std::pow(a, b));
-}
-Dice::ArithmeticOperator ScalarOperatorNode::getArithmeticOperator() const
-{
- return m_arithmeticOperator;
-}
-
-void ScalarOperatorNode::setArithmeticOperator(const Dice::ArithmeticOperator& arithmeticOperator)
-{
- m_arithmeticOperator= arithmeticOperator;
-}
-
-QString ScalarOperatorNode::toString(bool wl) const
-{
- QString op= "";
- switch(m_arithmeticOperator)
- {
- case Dice::ArithmeticOperator::PLUS:
- op= "+";
- break;
- case Dice::ArithmeticOperator::MINUS:
- op= "-";
- break;
- case Dice::ArithmeticOperator::MULTIPLICATION:
- op= "*";
- break;
- case Dice::ArithmeticOperator::DIVIDE:
- op= "/";
- break;
- case Dice::ArithmeticOperator::INTEGER_DIVIDE:
- op= "|";
- break;
- case Dice::ArithmeticOperator::POW:
- op= "^";
- break;
- }
- if(wl)
- {
- return QString("%1 [label=\"ScalarOperatorNode %2\"]").arg(m_id, op);
- }
- else
- {
- return m_id;
- }
-}
-qint64 ScalarOperatorNode::getPriority() const
-{
- if((m_arithmeticOperator == Dice::ArithmeticOperator::PLUS)
- || (m_arithmeticOperator == Dice::ArithmeticOperator::MINUS))
- {
- return 1;
- }
- else if(m_arithmeticOperator == Dice::ArithmeticOperator::POW)
- {
- return 3;
- }
- else
- {
- return 2;
- }
-}
-void ScalarOperatorNode::generateDotTree(QString& s)
-{
- auto id= toString(true);
- if(s.contains(id))
- return;
- s.append(id);
- s.append(";\n");
-
- if(nullptr != m_nextNode)
- {
- s.append(toString(false));
- s.append(" -> ");
- s.append(m_nextNode->toString(false));
- s.append("[label=\"nextNode\"];\n");
- m_nextNode->generateDotTree(s);
- }
- else
- {
- s.append(toString(false));
- s.append(" -> ");
- s.append("nullptr");
- s.append(" [label=\"nextNode\"];\n");
- }
-
- if(nullptr != m_result)
- {
- s.append(toString(false));
- s.append(" ->");
- s.append(m_result->toString(false));
- s.append(" [label=\"Result\", style=\"dashed\"];\n");
- if(nullptr == m_nextNode)
- m_result->generateDotTree(s);
- }
- QString str;
- str.append("\n");
- if(nullptr != m_internalNode)
- {
- str.append(toString(false));
- str.append(" -> ");
- str.append(m_internalNode->toString(false));
- str.append(" [label=\"internalNode\"];\n");
- m_internalNode->generateDotTree(str);
- }
- s.append(str);
-}
-QMap<Dice::ERROR_CODE, QString> ScalarOperatorNode::getExecutionErrorMap()
-{
- if(nullptr != m_internalNode)
- {
- auto keys= m_internalNode->getExecutionErrorMap().keys();
- for(const auto& key : keys)
- {
- m_errors.insert(key, m_internalNode->getExecutionErrorMap().value(key));
- }
- }
- if(nullptr != m_nextNode)
- {
- auto keys= m_nextNode->getExecutionErrorMap().keys();
- for(auto const& key : keys)
- {
- m_errors.insert(key, m_nextNode->getExecutionErrorMap().value(key));
- }
- }
- return m_errors;
-}
-ExecutionNode* ScalarOperatorNode::getCopy() const
-{
- ScalarOperatorNode* node= new ScalarOperatorNode();
- node->setInternalNode(m_internalNode->getCopy());
- node->setArithmeticOperator(m_arithmeticOperator);
- if(nullptr != m_nextNode)
- {
- node->setNextNode(m_nextNode->getCopy());
- }
- return node;
-}