From 22d71d0032e2f44a8f267895aea3bd87864791b3 Mon Sep 17 00:00:00 2001 From: Renaud G Date: Thu, 30 Jan 2020 01:27:07 +0100 Subject: add unicity and repeat function part1 --- diceparser/node/repeaternode.cpp | 116 --------------------------------------- diceparser/node/repeaternode.h | 48 ---------------- node/repeaternode.cpp | 116 +++++++++++++++++++++++++++++++++++++++ node/repeaternode.h | 48 ++++++++++++++++ 4 files changed, 164 insertions(+), 164 deletions(-) delete mode 100644 diceparser/node/repeaternode.cpp delete mode 100644 diceparser/node/repeaternode.h create mode 100644 node/repeaternode.cpp create mode 100644 node/repeaternode.h diff --git a/diceparser/node/repeaternode.cpp b/diceparser/node/repeaternode.cpp deleted file mode 100644 index 09e88bd..0000000 --- a/diceparser/node/repeaternode.cpp +++ /dev/null @@ -1,116 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2019 by Renaud Guezennec * - * http://www.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 "node/repeaternode.h" - -#include "diceparserhelper.h" -#include "executionnode.h" -#include "parsingtoolbox.h" -#include "result/stringresult.h" - -RepeaterNode::RepeaterNode() {} - -void RepeaterNode::run(ExecutionNode* previousNode) -{ - m_previousNode= previousNode; - m_times->run(this); - m_times= ParsingToolBox::getLeafNode(m_times); - auto times= m_times->getResult(); - auto timeCount= times->getResult(Dice::RESULT_TYPE::SCALAR).toInt(); - auto cmd= m_cmd->getCopy(); - for(int i= 0; i < timeCount; ++i) - { - m_cmd->run(this); - auto end= ParsingToolBox::getLeafNode(cmd); - auto result= end->getResult(); - - if(nullptr == result) - continue; - - if(result->hasResultOfType(Dice::RESULT_TYPE::SCALAR)) - { - if(m_sumAll) - { - auto res= new ScalarResult(); - - m_result= res; - } - else - { - auto res= new StringResult(); - m_result= res; - } - } - else if(result->hasResultOfType(Dice::RESULT_TYPE::STRING)) - { - auto res= new StringResult(); - - m_result= res; - } - else if(result->hasResultOfType(Dice::RESULT_TYPE::DICE_LIST)) - { - if(m_sumAll) - { - auto res= new ScalarResult(); - - m_result= res; - } - else - { - auto res= new StringResult(); - - m_result= res; - } - } - - cmd= m_cmd->getCopy(); - } -} - -QString RepeaterNode::toString(bool withLabel) const -{ - return withLabel ? QStringLiteral("") : QStringLiteral(""); -} - -qint64 RepeaterNode::getPriority() const -{ - return 4; -} - -ExecutionNode* RepeaterNode::getCopy() const -{ - return nullptr; -} - -void RepeaterNode::setCommand(ExecutionNode* cmd) -{ - m_cmd.reset(cmd); -} - -void RepeaterNode::setTimeNode(ExecutionNode* time) -{ - m_times= time; -} - -void RepeaterNode::setSumAll(bool b) -{ - m_sumAll= b; -} diff --git a/diceparser/node/repeaternode.h b/diceparser/node/repeaternode.h deleted file mode 100644 index 847db17..0000000 --- a/diceparser/node/repeaternode.h +++ /dev/null @@ -1,48 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2019 by Renaud Guezennec * - * http://www.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. * - ***************************************************************************/ -#ifndef REPEATER_NODE_H -#define REPEATER_NODE_H - -#include "node/executionnode.h" -#include - -class RepeaterNode : public ExecutionNode -{ -public: - RepeaterNode(); - void run(ExecutionNode* previous) override; - virtual QString toString(bool withLabel) const override; - virtual qint64 getPriority() const override; - - virtual ExecutionNode* getCopy() const override; - - void setCommand(ExecutionNode* node); - void setTimeNode(ExecutionNode* times); - void setSumAll(bool b); - -private: - std::unique_ptr m_cmd; - ExecutionNode* m_times= nullptr; - bool m_sumAll= false; -}; - -#endif // REPEATER_NODE_H diff --git a/node/repeaternode.cpp b/node/repeaternode.cpp new file mode 100644 index 0000000..09e88bd --- /dev/null +++ b/node/repeaternode.cpp @@ -0,0 +1,116 @@ +/*************************************************************************** + * Copyright (C) 2019 by Renaud Guezennec * + * http://www.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 "node/repeaternode.h" + +#include "diceparserhelper.h" +#include "executionnode.h" +#include "parsingtoolbox.h" +#include "result/stringresult.h" + +RepeaterNode::RepeaterNode() {} + +void RepeaterNode::run(ExecutionNode* previousNode) +{ + m_previousNode= previousNode; + m_times->run(this); + m_times= ParsingToolBox::getLeafNode(m_times); + auto times= m_times->getResult(); + auto timeCount= times->getResult(Dice::RESULT_TYPE::SCALAR).toInt(); + auto cmd= m_cmd->getCopy(); + for(int i= 0; i < timeCount; ++i) + { + m_cmd->run(this); + auto end= ParsingToolBox::getLeafNode(cmd); + auto result= end->getResult(); + + if(nullptr == result) + continue; + + if(result->hasResultOfType(Dice::RESULT_TYPE::SCALAR)) + { + if(m_sumAll) + { + auto res= new ScalarResult(); + + m_result= res; + } + else + { + auto res= new StringResult(); + m_result= res; + } + } + else if(result->hasResultOfType(Dice::RESULT_TYPE::STRING)) + { + auto res= new StringResult(); + + m_result= res; + } + else if(result->hasResultOfType(Dice::RESULT_TYPE::DICE_LIST)) + { + if(m_sumAll) + { + auto res= new ScalarResult(); + + m_result= res; + } + else + { + auto res= new StringResult(); + + m_result= res; + } + } + + cmd= m_cmd->getCopy(); + } +} + +QString RepeaterNode::toString(bool withLabel) const +{ + return withLabel ? QStringLiteral("") : QStringLiteral(""); +} + +qint64 RepeaterNode::getPriority() const +{ + return 4; +} + +ExecutionNode* RepeaterNode::getCopy() const +{ + return nullptr; +} + +void RepeaterNode::setCommand(ExecutionNode* cmd) +{ + m_cmd.reset(cmd); +} + +void RepeaterNode::setTimeNode(ExecutionNode* time) +{ + m_times= time; +} + +void RepeaterNode::setSumAll(bool b) +{ + m_sumAll= b; +} diff --git a/node/repeaternode.h b/node/repeaternode.h new file mode 100644 index 0000000..847db17 --- /dev/null +++ b/node/repeaternode.h @@ -0,0 +1,48 @@ +/*************************************************************************** + * Copyright (C) 2019 by Renaud Guezennec * + * http://www.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. * + ***************************************************************************/ +#ifndef REPEATER_NODE_H +#define REPEATER_NODE_H + +#include "node/executionnode.h" +#include + +class RepeaterNode : public ExecutionNode +{ +public: + RepeaterNode(); + void run(ExecutionNode* previous) override; + virtual QString toString(bool withLabel) const override; + virtual qint64 getPriority() const override; + + virtual ExecutionNode* getCopy() const override; + + void setCommand(ExecutionNode* node); + void setTimeNode(ExecutionNode* times); + void setSumAll(bool b); + +private: + std::unique_ptr m_cmd; + ExecutionNode* m_times= nullptr; + bool m_sumAll= false; +}; + +#endif // REPEATER_NODE_H -- cgit v1.2.3-70-g09d2