From c3c363d09ff2c57f40cf2d3266bffb7950c4767c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Tr=C3=A1vn=C3=AD=C4=8Dek?= <jan.travnicek@fit.cvut.cz> Date: Tue, 22 Feb 2022 09:07:56 +0100 Subject: [PATCH] abstraction: use unique_ptr only to manipulate operation::Abstraction --- alib2abstraction/src/common/CastHelper.cpp | 5 +++-- alib2abstraction/src/common/EvalHelper.cpp | 4 ++-- alib2abstraction/src/common/EvalHelper.h | 2 +- alib2cli/src/ast/command/PrintCommand.cpp | 2 +- alib2cli/src/ast/statements/ContainerStatement.cpp | 2 +- alib2cli/src/ast/statements/FileStatement.cpp | 2 +- alib2cli/src/ast/statements/ResultFileStatement.h | 2 +- alib2gui/src/Converter.cpp | 2 +- 8 files changed, 11 insertions(+), 10 deletions(-) diff --git a/alib2abstraction/src/common/CastHelper.cpp b/alib2abstraction/src/common/CastHelper.cpp index 997f4a4ac0..2b7a87c058 100644 --- a/alib2abstraction/src/common/CastHelper.cpp +++ b/alib2abstraction/src/common/CastHelper.cpp @@ -10,7 +10,8 @@ std::shared_ptr < abstraction::Value > CastHelper::eval ( abstraction::Temporari return param; } - std::shared_ptr < abstraction::OperationAbstraction > res = abstraction::Registry::getCastAbstraction ( type, param->getType ( ) ); + std::unique_ptr < abstraction::OperationAbstraction > res = abstraction::Registry::getCastAbstraction ( type, param->getType ( ) ); + res->attachInput ( param, 0 ); std::shared_ptr < abstraction::Value > result = res->eval ( ); @@ -18,7 +19,7 @@ std::shared_ptr < abstraction::Value > CastHelper::eval ( abstraction::Temporari throw std::invalid_argument ( "Eval of cast to " + type + " failed." ); if ( abstraction::Registry::hasNormalize ( result->getType ( ) ) ) { - std::shared_ptr < abstraction::OperationAbstraction > normalize = abstraction::Registry::getNormalizeAbstraction ( result->getType ( ) ); + std::unique_ptr < abstraction::OperationAbstraction > normalize = abstraction::Registry::getNormalizeAbstraction ( result->getType ( ) ); normalize->attachInput ( result, 0 ); result = normalize->eval ( ); if ( ! result ) diff --git a/alib2abstraction/src/common/EvalHelper.cpp b/alib2abstraction/src/common/EvalHelper.cpp index b64517d993..f12b2ff2e9 100644 --- a/alib2abstraction/src/common/EvalHelper.cpp +++ b/alib2abstraction/src/common/EvalHelper.cpp @@ -66,7 +66,7 @@ std::shared_ptr < abstraction::Value > EvalHelper::evalOperator ( abstraction::T } } -std::shared_ptr < abstraction::Value > EvalHelper::evalAbstraction ( abstraction::TemporariesHolder & environment, std::shared_ptr < abstraction::OperationAbstraction > abstraction, const ext::vector < std::shared_ptr < abstraction::Value > > & params ) { +std::shared_ptr < abstraction::Value > EvalHelper::evalAbstraction ( abstraction::TemporariesHolder & environment, std::unique_ptr < abstraction::OperationAbstraction > abstraction, const ext::vector < std::shared_ptr < abstraction::Value > > & params ) { unsigned i = 0; ext::vector < std::shared_ptr < abstraction::Value > > casted_params; for ( const std::shared_ptr < abstraction::Value > & param : params ) { @@ -90,7 +90,7 @@ std::shared_ptr < abstraction::Value > EvalHelper::evalAbstraction ( abstraction throw std::invalid_argument ( "Internal error in abstraction evaluation." ); if ( abstraction::Registry::hasNormalize ( result->getType ( ) ) ) { - std::shared_ptr < abstraction::OperationAbstraction > normalize = abstraction::Registry::getNormalizeAbstraction ( result->getType ( ) ); + std::unique_ptr < abstraction::OperationAbstraction > normalize = abstraction::Registry::getNormalizeAbstraction ( result->getType ( ) ); normalize->attachInput ( result, 0 ); result = normalize->eval ( ); if ( ! result ) diff --git a/alib2abstraction/src/common/EvalHelper.h b/alib2abstraction/src/common/EvalHelper.h index aaffe52d30..1718686e30 100644 --- a/alib2abstraction/src/common/EvalHelper.h +++ b/alib2abstraction/src/common/EvalHelper.h @@ -11,7 +11,7 @@ namespace abstraction { class EvalHelper { - static std::shared_ptr < abstraction::Value > evalAbstraction ( abstraction::TemporariesHolder & environment, std::shared_ptr < abstraction::OperationAbstraction > abstraction, const ext::vector < std::shared_ptr < abstraction::Value > > & params ); + static std::shared_ptr < abstraction::Value > evalAbstraction ( abstraction::TemporariesHolder & environment, std::unique_ptr < abstraction::OperationAbstraction > abstraction, const ext::vector < std::shared_ptr < abstraction::Value > > & params ); public: static std::shared_ptr < abstraction::Value > evalAlgorithm ( abstraction::TemporariesHolder & environment, const std::string & name, const ext::vector < std::string > & templateParams, const ext::vector < std::shared_ptr < abstraction::Value > > & params, abstraction::AlgorithmCategories::AlgorithmCategory category ); diff --git a/alib2cli/src/ast/command/PrintCommand.cpp b/alib2cli/src/ast/command/PrintCommand.cpp index 0e88a5c291..ec8bff0176 100644 --- a/alib2cli/src/ast/command/PrintCommand.cpp +++ b/alib2cli/src/ast/command/PrintCommand.cpp @@ -11,7 +11,7 @@ CommandResult PrintCommand::run ( Environment & environment ) const { if ( value->getType ( ) == ext::to_string < void > ( ) ) throw std::invalid_argument ( "Printing void is not allowed." ); - std::shared_ptr < abstraction::OperationAbstraction > res = abstraction::Registry::getValuePrinterAbstraction ( value->getType ( ) ); + std::unique_ptr < abstraction::OperationAbstraction > res = abstraction::Registry::getValuePrinterAbstraction ( value->getType ( ) ); res->attachInput ( value, 0 ); res->attachInput ( std::make_shared < abstraction::ValueHolder < ext::ostream & > > ( common::Streams::out, false ), 1 ); diff --git a/alib2cli/src/ast/statements/ContainerStatement.cpp b/alib2cli/src/ast/statements/ContainerStatement.cpp index e5baff0878..404464dad9 100644 --- a/alib2cli/src/ast/statements/ContainerStatement.cpp +++ b/alib2cli/src/ast/statements/ContainerStatement.cpp @@ -19,7 +19,7 @@ std::shared_ptr < abstraction::Value > ContainerStatement::translateAndEval ( co params.push_back ( param->translateAndEval ( prev, environment ) ); } - std::shared_ptr < abstraction::OperationAbstraction > algo = abstraction::Registry::getContainerAbstraction ( m_container, m_type->getType ( ) ); + std::unique_ptr < abstraction::OperationAbstraction > algo = abstraction::Registry::getContainerAbstraction ( m_container, m_type->getType ( ) ); int i = 0; ext::vector < std::shared_ptr < abstraction::Value > > casted_params; diff --git a/alib2cli/src/ast/statements/FileStatement.cpp b/alib2cli/src/ast/statements/FileStatement.cpp index 49fbfeddfb..b4935322ba 100644 --- a/alib2cli/src/ast/statements/FileStatement.cpp +++ b/alib2cli/src/ast/statements/FileStatement.cpp @@ -24,7 +24,7 @@ std::shared_ptr < abstraction::Value > FileStatement::translateAndEval ( const s templateParams.push_back ( param->eval ( environment ) ); } - std::shared_ptr < abstraction::OperationAbstraction > res = abstraction::InputFileRegistry::getAbstraction ( filetype, type, templateParams ); + std::unique_ptr < abstraction::OperationAbstraction > res = abstraction::InputFileRegistry::getAbstraction ( filetype, type, templateParams ); std::shared_ptr < abstraction::ValueHolder < std::string > > file = std::make_shared < abstraction::ValueHolder < std::string > > ( m_file->eval ( environment ), true ); res->attachInput ( file, 0 ); diff --git a/alib2cli/src/ast/statements/ResultFileStatement.h b/alib2cli/src/ast/statements/ResultFileStatement.h index 9e7d4e013d..e0dcae08a9 100644 --- a/alib2cli/src/ast/statements/ResultFileStatement.h +++ b/alib2cli/src/ast/statements/ResultFileStatement.h @@ -19,7 +19,7 @@ public: if ( m_fileType ) filetype = m_fileType->eval ( environment ); - std::shared_ptr < abstraction::OperationAbstraction > res = abstraction::OutputFileRegistry::getAbstraction ( filetype, prev->getType ( ) ); + std::unique_ptr < abstraction::OperationAbstraction > res = abstraction::OutputFileRegistry::getAbstraction ( filetype, prev->getType ( ) ); std::shared_ptr < abstraction::ValueHolder < std::string > > file = std::make_shared < abstraction::ValueHolder < std::string > > ( m_file->eval ( environment ), true ); res->attachInput ( file, 0 ); diff --git a/alib2gui/src/Converter.cpp b/alib2gui/src/Converter.cpp index e57f24386e..71acaa5ea7 100644 --- a/alib2gui/src/Converter.cpp +++ b/alib2gui/src/Converter.cpp @@ -93,7 +93,7 @@ namespace Converter { ext::deque<sax::Token> tokens; sax::SaxParseInterface::parseMemory(xml.toStdString(), tokens); std::string type = tokens[0].getData(); - std::shared_ptr<abstraction::OperationAbstraction> automaton = abstraction::XmlRegistry::getXmlParserAbstraction( + std::unique_ptr<abstraction::OperationAbstraction> automaton = abstraction::XmlRegistry::getXmlParserAbstraction( type); auto tokensAbstraction = std::make_shared<abstraction::ValueHolder<ext::deque<sax::Token>>>(std::move ( tokens ), true); -- GitLab