From a2bc6d55d3b14832bab5f4ccc3ef8f69f42942f9 Mon Sep 17 00:00:00 2001 From: Martin Hanzik <martin@hanzik.com> Date: Wed, 9 May 2018 18:18:43 +0200 Subject: [PATCH] Sequential processing fixes --- agui2/src/MainWindow.cpp | 5 +++++ agui2/src/Models/AlgorithmModelBox.cpp | 9 ++++----- agui2/src/Models/AlgorithmModelBox.hpp | 3 ++- agui2/src/Models/InputModelBox.cpp | 2 +- agui2/src/Models/InputModelBox.hpp | 4 +++- agui2/src/Models/ModelBox.cpp | 15 +++++++++++++++ agui2/src/Models/ModelBox.hpp | 6 +++++- agui2/src/Models/OutputModelBox.cpp | 5 ++--- agui2/src/Models/OutputModelBox.hpp | 2 +- 9 files changed, 38 insertions(+), 13 deletions(-) diff --git a/agui2/src/MainWindow.cpp b/agui2/src/MainWindow.cpp index cbaa1c4460..53c956c88a 100644 --- a/agui2/src/MainWindow.cpp +++ b/agui2/src/MainWindow.cpp @@ -57,7 +57,12 @@ void MainWindow::on_RunBtn_clicked() { std::shared_ptr<abstraction::OperationAbstraction> result; try { +#if 0 + this->outputBox->getModelBox()->clearResultRecursive(); + result = this->outputBox->getModelBox()->run(); +#else result = ParallelExecutor::getInstance()->execute(dynamic_cast<OutputModelBox*>(this->outputBox->getModelBox())); +#endif } catch (const exception::CommonException& e) { this->displayError(QString::fromStdString(e.getCause())); diff --git a/agui2/src/Models/AlgorithmModelBox.cpp b/agui2/src/Models/AlgorithmModelBox.cpp index 2b7ff128ce..261ad6a481 100644 --- a/agui2/src/Models/AlgorithmModelBox.cpp +++ b/agui2/src/Models/AlgorithmModelBox.cpp @@ -10,18 +10,17 @@ AlgorithmModelBox::AlgorithmModelBox(Algorithm* algorithm) : ModelBox(ModelType::Algorithm, algorithm->getInputCount()) , algorithm(algorithm) {} -std::shared_ptr<abstraction::OperationAbstraction> AlgorithmModelBox::run() { +std::shared_ptr<abstraction::OperationAbstraction> AlgorithmModelBox::runInternal() { std::vector<std::shared_ptr<abstraction::OperationAbstraction>> params; - for (const auto* input: this->inputs) + for (auto* input: this->inputs) { if (!input) return nullptr; - params.push_back(input->getResult()); + params.push_back(input->run()); if (!params.back()) return nullptr; } - this->result = this->algorithm->execute(params); - return this->result; + return this->algorithm->execute(params); } std::string AlgorithmModelBox::getName() const { diff --git a/agui2/src/Models/AlgorithmModelBox.hpp b/agui2/src/Models/AlgorithmModelBox.hpp index b5f5ba172d..6aa0293628 100644 --- a/agui2/src/Models/AlgorithmModelBox.hpp +++ b/agui2/src/Models/AlgorithmModelBox.hpp @@ -9,7 +9,8 @@ public: std::string getName() const override; Algorithm* getAlgorithm() const { return this->algorithm; } - std::shared_ptr<abstraction::OperationAbstraction> run() override; +protected: + std::shared_ptr<abstraction::OperationAbstraction> runInternal() override; private: Algorithm* algorithm; diff --git a/agui2/src/Models/InputModelBox.cpp b/agui2/src/Models/InputModelBox.cpp index 68886f469f..0456e740c8 100644 --- a/agui2/src/Models/InputModelBox.cpp +++ b/agui2/src/Models/InputModelBox.cpp @@ -4,7 +4,7 @@ InputModelBox::InputModelBox() : ModelBox(ModelType::Input, 0) {} -std::shared_ptr<abstraction::OperationAbstraction> InputModelBox::run() { +std::shared_ptr<abstraction::OperationAbstraction> InputModelBox::runInternal() { return this->result; } diff --git a/agui2/src/Models/InputModelBox.hpp b/agui2/src/Models/InputModelBox.hpp index 0f64c44bb1..8e4a01105f 100644 --- a/agui2/src/Models/InputModelBox.hpp +++ b/agui2/src/Models/InputModelBox.hpp @@ -6,7 +6,9 @@ class InputModelBox : public ModelBox { public: explicit InputModelBox(); - std::shared_ptr<abstraction::OperationAbstraction> run() override; + void clearResultRecursive() override {} + + std::shared_ptr<abstraction::OperationAbstraction> runInternal() override; std::string getName() const override; diff --git a/agui2/src/Models/ModelBox.cpp b/agui2/src/Models/ModelBox.cpp index d4df67e28e..89ef621d54 100644 --- a/agui2/src/Models/ModelBox.cpp +++ b/agui2/src/Models/ModelBox.cpp @@ -34,3 +34,18 @@ void ModelBox::removeOutput(ModelBox* model, uint8_t slot) { Q_ASSERT(this->canHaveOutput()); this->outputs.erase({model, slot}); } + +std::shared_ptr<abstraction::OperationAbstraction> ModelBox::run() { + if (!this->result) + this->result = this->runInternal(); + + return this->result; +} + +void ModelBox::clearResultRecursive() { + this->result.reset(); + for (auto* input: this->inputs) { + input->clearResultRecursive(); + } + +} diff --git a/agui2/src/Models/ModelBox.hpp b/agui2/src/Models/ModelBox.hpp index 5227ff4fc3..747c27d970 100644 --- a/agui2/src/Models/ModelBox.hpp +++ b/agui2/src/Models/ModelBox.hpp @@ -34,9 +34,13 @@ public: virtual bool canHaveOutput() const { return true; } std::shared_ptr<abstraction::OperationAbstraction> getResult() const { return this->result; } + virtual void clearResultRecursive(); + + std::shared_ptr<abstraction::OperationAbstraction> run(); - virtual std::shared_ptr<abstraction::OperationAbstraction> run() = 0; protected: + virtual std::shared_ptr<abstraction::OperationAbstraction> runInternal() = 0; + ModelType type; uint8_t maxInputCount = 0; diff --git a/agui2/src/Models/OutputModelBox.cpp b/agui2/src/Models/OutputModelBox.cpp index c33a92d082..b7a54af9f4 100644 --- a/agui2/src/Models/OutputModelBox.cpp +++ b/agui2/src/Models/OutputModelBox.cpp @@ -6,12 +6,11 @@ OutputModelBox::OutputModelBox() : ModelBox(ModelType::Output, 1) {} -std::shared_ptr<abstraction::OperationAbstraction> OutputModelBox::run() { +std::shared_ptr<abstraction::OperationAbstraction> OutputModelBox::runInternal() { assert(this->inputs.size() == 1); if (!this->inputs[0]) return nullptr; - this->result = inputs[0]->getResult(); - return this->result; + return inputs[0]->run(); } std::string OutputModelBox::getName() const { diff --git a/agui2/src/Models/OutputModelBox.hpp b/agui2/src/Models/OutputModelBox.hpp index ef4d513766..3bfb8545b2 100644 --- a/agui2/src/Models/OutputModelBox.hpp +++ b/agui2/src/Models/OutputModelBox.hpp @@ -9,7 +9,7 @@ public: bool canHaveOutput() const override { return false; } - std::shared_ptr<abstraction::OperationAbstraction> run() override; + std::shared_ptr<abstraction::OperationAbstraction> runInternal() override; }; -- GitLab