Skip to content
Snippets Groups Projects
Commit a2bc6d55 authored by Martin Hanzik's avatar Martin Hanzik Committed by Jan Trávníček
Browse files

Sequential processing fixes

parent 9f0690c7
No related branches found
No related tags found
No related merge requests found
...@@ -57,7 +57,12 @@ void MainWindow::on_RunBtn_clicked() ...@@ -57,7 +57,12 @@ void MainWindow::on_RunBtn_clicked()
{ {
std::shared_ptr<abstraction::OperationAbstraction> result; std::shared_ptr<abstraction::OperationAbstraction> result;
try { try {
#if 0
this->outputBox->getModelBox()->clearResultRecursive();
result = this->outputBox->getModelBox()->run();
#else
result = ParallelExecutor::getInstance()->execute(dynamic_cast<OutputModelBox*>(this->outputBox->getModelBox())); result = ParallelExecutor::getInstance()->execute(dynamic_cast<OutputModelBox*>(this->outputBox->getModelBox()));
#endif
} }
catch (const exception::CommonException& e) { catch (const exception::CommonException& e) {
this->displayError(QString::fromStdString(e.getCause())); this->displayError(QString::fromStdString(e.getCause()));
......
...@@ -10,18 +10,17 @@ AlgorithmModelBox::AlgorithmModelBox(Algorithm* algorithm) ...@@ -10,18 +10,17 @@ AlgorithmModelBox::AlgorithmModelBox(Algorithm* algorithm)
: ModelBox(ModelType::Algorithm, algorithm->getInputCount()) : ModelBox(ModelType::Algorithm, algorithm->getInputCount())
, algorithm(algorithm) {} , algorithm(algorithm) {}
   
std::shared_ptr<abstraction::OperationAbstraction> AlgorithmModelBox::run() { std::shared_ptr<abstraction::OperationAbstraction> AlgorithmModelBox::runInternal() {
std::vector<std::shared_ptr<abstraction::OperationAbstraction>> params; std::vector<std::shared_ptr<abstraction::OperationAbstraction>> params;
for (const auto* input: this->inputs) for (auto* input: this->inputs)
{ {
if (!input) if (!input)
return nullptr; return nullptr;
params.push_back(input->getResult()); params.push_back(input->run());
if (!params.back()) if (!params.back())
return nullptr; return nullptr;
} }
this->result = this->algorithm->execute(params); return this->algorithm->execute(params);
return this->result;
} }
   
std::string AlgorithmModelBox::getName() const { std::string AlgorithmModelBox::getName() const {
......
...@@ -9,7 +9,8 @@ public: ...@@ -9,7 +9,8 @@ public:
std::string getName() const override; std::string getName() const override;
Algorithm* getAlgorithm() const { return this->algorithm; } Algorithm* getAlgorithm() const { return this->algorithm; }
   
std::shared_ptr<abstraction::OperationAbstraction> run() override; protected:
std::shared_ptr<abstraction::OperationAbstraction> runInternal() override;
   
private: private:
Algorithm* algorithm; Algorithm* algorithm;
......
...@@ -4,7 +4,7 @@ InputModelBox::InputModelBox() ...@@ -4,7 +4,7 @@ InputModelBox::InputModelBox()
: ModelBox(ModelType::Input, 0) : ModelBox(ModelType::Input, 0)
{} {}
   
std::shared_ptr<abstraction::OperationAbstraction> InputModelBox::run() { std::shared_ptr<abstraction::OperationAbstraction> InputModelBox::runInternal() {
return this->result; return this->result;
} }
   
......
...@@ -6,7 +6,9 @@ class InputModelBox : public ModelBox { ...@@ -6,7 +6,9 @@ class InputModelBox : public ModelBox {
public: public:
explicit InputModelBox(); explicit InputModelBox();
   
std::shared_ptr<abstraction::OperationAbstraction> run() override; void clearResultRecursive() override {}
std::shared_ptr<abstraction::OperationAbstraction> runInternal() override;
   
std::string getName() const override; std::string getName() const override;
   
......
...@@ -34,3 +34,18 @@ void ModelBox::removeOutput(ModelBox* model, uint8_t slot) { ...@@ -34,3 +34,18 @@ void ModelBox::removeOutput(ModelBox* model, uint8_t slot) {
Q_ASSERT(this->canHaveOutput()); Q_ASSERT(this->canHaveOutput());
this->outputs.erase({model, slot}); 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();
}
}
...@@ -34,9 +34,13 @@ public: ...@@ -34,9 +34,13 @@ public:
virtual bool canHaveOutput() const { return true; } virtual bool canHaveOutput() const { return true; }
   
std::shared_ptr<abstraction::OperationAbstraction> getResult() const { return this->result; } 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: protected:
virtual std::shared_ptr<abstraction::OperationAbstraction> runInternal() = 0;
ModelType type; ModelType type;
   
uint8_t maxInputCount = 0; uint8_t maxInputCount = 0;
......
...@@ -6,12 +6,11 @@ OutputModelBox::OutputModelBox() ...@@ -6,12 +6,11 @@ OutputModelBox::OutputModelBox()
: ModelBox(ModelType::Output, 1) : ModelBox(ModelType::Output, 1)
{} {}
   
std::shared_ptr<abstraction::OperationAbstraction> OutputModelBox::run() { std::shared_ptr<abstraction::OperationAbstraction> OutputModelBox::runInternal() {
assert(this->inputs.size() == 1); assert(this->inputs.size() == 1);
if (!this->inputs[0]) if (!this->inputs[0])
return nullptr; return nullptr;
this->result = inputs[0]->getResult(); return inputs[0]->run();
return this->result;
} }
   
std::string OutputModelBox::getName() const { std::string OutputModelBox::getName() const {
......
...@@ -9,7 +9,7 @@ public: ...@@ -9,7 +9,7 @@ public:
   
bool canHaveOutput() const override { return false; } bool canHaveOutput() const override { return false; }
   
std::shared_ptr<abstraction::OperationAbstraction> run() override; std::shared_ptr<abstraction::OperationAbstraction> runInternal() override;
}; };
   
   
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment