diff --git a/agui2/src/MainWindow.cpp b/agui2/src/MainWindow.cpp index cbaa1c446015f93bfbc4a25e8360049c30cad007..53c956c88a4bd6bea63043a1a48e9e84859c728d 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 2b7ff128cea4395b01f73237a78052f6a7bad157..261ad6a481a1467a66867002ea13237f8b1e5a90 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 b5f5ba172d7948606a10df480a20d1523f4a63cb..6aa0293628917c25af5eb40f35a07fc6af0c330d 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 68886f469f85eaee3df635e362a7d9c9bb66a886..0456e740c80680b0dd60e5a823b68b39274049ed 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 0f64c44bb11f18efb315be198f5934864ae81ad2..8e4a01105fde3260d5c01b0dc0db50a30632b53b 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 d4df67e28e5bb68f449dc6bc42bf5479295dd887..89ef621d549504b9d2c454a23e6c3f3e9f43a735 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 5227ff4fc3ad137adbde7e80f6d2ee043398a91c..747c27d97072096df4117ee50b543ba5584c014e 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 c33a92d08287900c05874a4720edc12f6289cc9e..b7a54af9f471ae0a608f7d264d6c86f800444813 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 ef4d513766d66df2f10c13f4a8d0a1a23011e046..3bfb8545b20d6c33077e163cdfcd835a6d8a77e1 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; };