From 37a9231bd5160d2efd1877df6027560ffaf001e3 Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Fri, 21 Jun 2019 12:18:59 +0200
Subject: [PATCH] cleanup

---
 .../abstraction/NaryOperationAbstraction.cpp  | 13 +++++++++
 .../ReturnValueOperationAbstraction.cpp       | 28 +++++++++++++++++++
 .../src/common/AlgorithmHelper.cpp            |  4 +--
 alib2abstraction/src/common/AlgorithmHelper.h |  2 +-
 alib2cli/src/ast/Statement.h                  |  2 --
 alib2cli/src/ast/statements/CastStatement.h   |  4 ---
 .../src/ast/statements/ContainerStatement.cpp | 14 ++--------
 .../src/ast/statements/ContainerStatement.h   |  3 --
 alib2cli/src/ast/statements/FileStatement.h   |  3 --
 .../src/ast/statements/ImmediateStatement.h   |  3 --
 .../ast/statements/PreviousResultStatement.h  |  3 --
 .../src/ast/statements/ResultFileStatement.h  |  4 ---
 .../src/ast/statements/ResultPrintStatement.h |  4 ---
 .../ast/statements/ResultVariableStatement.h  |  4 ---
 .../src/ast/statements/SingleStatement.cpp    |  9 +-----
 alib2cli/src/ast/statements/SingleStatement.h |  3 --
 alib2cli/src/ast/statements/StatementList.h   |  3 --
 alib2cli/src/ast/statements/ValueStatement.h  |  3 --
 .../src/ast/statements/VariableStatement.h    |  3 --
 .../src/InputFileTypeRegistration.cpp         |  3 ++
 .../src/OutputFileTypeRegistration.cpp        |  3 ++
 .../src/InputFileTypeRegistration.cpp         |  3 ++
 .../src/OutputFileTypeRegistration.cpp        |  3 ++
 23 files changed, 59 insertions(+), 65 deletions(-)
 create mode 100644 alib2abstraction/src/abstraction/NaryOperationAbstraction.cpp
 create mode 100644 alib2abstraction/src/abstraction/ReturnValueOperationAbstraction.cpp

diff --git a/alib2abstraction/src/abstraction/NaryOperationAbstraction.cpp b/alib2abstraction/src/abstraction/NaryOperationAbstraction.cpp
new file mode 100644
index 0000000000..28824adcda
--- /dev/null
+++ b/alib2abstraction/src/abstraction/NaryOperationAbstraction.cpp
@@ -0,0 +1,13 @@
+/*
+ * NaryOperationAbstraction.hpp
+ *
+ *  Created on: 20. 8. 2017
+ *	  Author: Jan Travnicek
+ */
+
+#include "NaryOperationAbstraction.hpp"
+
+template class abstraction::NaryOperationAbstractionImpl < 0 >;
+template class abstraction::NaryOperationAbstractionImpl < 1 >;
+template class abstraction::NaryOperationAbstractionImpl < 2 >;
+template class abstraction::NaryOperationAbstractionImpl < 3 >;
diff --git a/alib2abstraction/src/abstraction/ReturnValueOperationAbstraction.cpp b/alib2abstraction/src/abstraction/ReturnValueOperationAbstraction.cpp
new file mode 100644
index 0000000000..5c1263a994
--- /dev/null
+++ b/alib2abstraction/src/abstraction/ReturnValueOperationAbstraction.cpp
@@ -0,0 +1,28 @@
+/*
+ * ValueOperationAbstraction.cpp
+ *
+ *  Created on: 11. 7. 2017
+ *	  Author: Jan Travnicek
+ */
+
+#include <abstraction/ReturnValueOperationAbstraction.hpp>
+
+namespace abstraction {
+
+ext::type_index ReturnValueOperationAbstraction < void >::getReturnTypeIndex ( ) const {
+	return ext::type_index ( typeid ( void ) );
+}
+
+ext::set < abstraction::ParamQualifiers::ParamQualifier > ReturnValueOperationAbstraction < void >::getReturnTypeQualifiers ( ) const {
+	return abstraction::ParamQualifiers::paramQualifiers < void > ( );
+}
+
+bool ReturnValueOperationAbstraction < void >::evaluated ( ) const {
+	return false;
+}
+
+std::shared_ptr < abstraction::OperationAbstraction > ReturnValueOperationAbstraction < void >::getVariableOperationAbstraction ( ) {
+	throw std::domain_error ( "Cannot create variable of void type" );
+}
+
+} /* namespace abstraction */
diff --git a/alib2abstraction/src/common/AlgorithmHelper.cpp b/alib2abstraction/src/common/AlgorithmHelper.cpp
index 5527a5440e..516bc7529a 100644
--- a/alib2abstraction/src/common/AlgorithmHelper.cpp
+++ b/alib2abstraction/src/common/AlgorithmHelper.cpp
@@ -12,7 +12,7 @@
 
 namespace abstraction {
 
-std::shared_ptr < abstraction::OperationAbstraction > AlgorithmHelper::eval ( const std::string & name, const ext::vector < std::string > & templateParams, const ext::vector < std::shared_ptr < abstraction::OperationAbstraction > > & params, std::vector < bool > & moves, AlgorithmCategories::AlgorithmCategory category ) {
+std::shared_ptr < abstraction::OperationAbstraction > AlgorithmHelper::eval ( const std::string & name, const ext::vector < std::string > & templateParams, const ext::vector < std::shared_ptr < abstraction::OperationAbstraction > > & params, const std::vector < bool > & moves, AlgorithmCategories::AlgorithmCategory category ) {
 	ext::vector < std::string > paramTypes;
 	ext::vector < ext::set < abstraction::ParamQualifiers::ParamQualifier > > paramTypeQualifiers;
 	for ( const std::shared_ptr < abstraction::OperationAbstraction > & param : params ) {
@@ -29,7 +29,6 @@ std::shared_ptr < abstraction::OperationAbstraction > AlgorithmHelper::eval ( co
 			casted_params.push_back ( param );
 		} else {
 			casted_params.push_back ( abstraction::CastHelper::eval ( param, algo->getParamType ( i ), moves [ i ] ) );
-			moves [ i ] = true;
 		}
 		++ i;
 	}
@@ -61,5 +60,4 @@ std::shared_ptr < abstraction::OperationAbstraction > AlgorithmHelper::eval ( co
 	return algo;
 }
 
-
 } /* namespace abstraction */
diff --git a/alib2abstraction/src/common/AlgorithmHelper.h b/alib2abstraction/src/common/AlgorithmHelper.h
index 59033af8e1..49cb0a7d7d 100644
--- a/alib2abstraction/src/common/AlgorithmHelper.h
+++ b/alib2abstraction/src/common/AlgorithmHelper.h
@@ -18,7 +18,7 @@ namespace abstraction {
 
 class AlgorithmHelper {
 public:
-	static std::shared_ptr < abstraction::OperationAbstraction > eval ( const std::string & name, const ext::vector < std::string > & templateParams, const ext::vector < std::shared_ptr < abstraction::OperationAbstraction > > & params, std::vector < bool > & moves, AlgorithmCategories::AlgorithmCategory category );
+	static std::shared_ptr < abstraction::OperationAbstraction > eval ( const std::string & name, const ext::vector < std::string > & templateParams, const ext::vector < std::shared_ptr < abstraction::OperationAbstraction > > & params, const std::vector < bool > & moves, AlgorithmCategories::AlgorithmCategory category );
 
 };
 
diff --git a/alib2cli/src/ast/Statement.h b/alib2cli/src/ast/Statement.h
index cffb0e994e..398fd0baa0 100644
--- a/alib2cli/src/ast/Statement.h
+++ b/alib2cli/src/ast/Statement.h
@@ -12,8 +12,6 @@ public:
 	virtual ~Statement ( ) noexcept = default;
 
 	virtual std::shared_ptr < abstraction::OperationAbstraction > translateAndEval ( const std::shared_ptr < abstraction::OperationAbstraction > & prev, Environment & environment ) const = 0;
-
-	virtual bool getImplicitMove ( ) const = 0;
 };
 
 } /* namespace cli */
diff --git a/alib2cli/src/ast/statements/CastStatement.h b/alib2cli/src/ast/statements/CastStatement.h
index 1c66b10e1b..59c913faa4 100644
--- a/alib2cli/src/ast/statements/CastStatement.h
+++ b/alib2cli/src/ast/statements/CastStatement.h
@@ -23,10 +23,6 @@ public:
 		return abstraction::CastHelper::eval ( translatedStatement, type, m_move );
 	}
 
-	bool getImplicitMove ( ) const override {
-		return true;
-	}
-
 };
 
 } /* namespace cli */
diff --git a/alib2cli/src/ast/statements/ContainerStatement.cpp b/alib2cli/src/ast/statements/ContainerStatement.cpp
index 976d2c0f2b..0d514e1757 100644
--- a/alib2cli/src/ast/statements/ContainerStatement.cpp
+++ b/alib2cli/src/ast/statements/ContainerStatement.cpp
@@ -18,28 +18,20 @@ std::shared_ptr < abstraction::OperationAbstraction > ContainerStatement::transl
 
 	std::shared_ptr < abstraction::OperationAbstraction > algo = abstraction::Registry::getContainerAbstraction ( m_container, m_type->getType ( ) );
 
-	ext::vector < bool > moves ( m_moves.size ( ) );
-	unsigned i = 0;
-	for ( const std::shared_ptr < Statement > & param : m_params ) {
-		moves [ i ] = m_moves [ i ] | param->getImplicitMove ( );
-		++ i;
-	}
-
-	i = 0;
+	int i = 0;
 	ext::vector < std::shared_ptr < abstraction::OperationAbstraction > > casted_params;
 	for ( const std::shared_ptr < abstraction::OperationAbstraction > & param : params ) {
 		if ( abstraction::Registry::isCastNoOp ( algo->getParamType ( i ), param->getReturnType ( ) ) ) {
 			casted_params.push_back ( param );
 		} else {
-			casted_params.push_back ( abstraction::CastHelper::eval ( param, algo->getParamType ( i ), moves [ i ] ) );
-			moves [ i ] = true;
+			casted_params.push_back ( abstraction::CastHelper::eval ( param, algo->getParamType ( i ), m_moves [ i ] ) );
 		}
 		++ i;
 	}
 
 	i = 0;
 	for ( const std::shared_ptr < abstraction::OperationAbstraction > & param : casted_params ) {
-		if ( ! algo->attachInput ( param, i, moves [ i ], true ) )
+		if ( ! algo->attachInput ( param, i, m_moves [ i ], true ) )
 			throw std::invalid_argument ( "Can't connect param at " + ext::to_string ( i ) + " of algorithm " + m_container + " with result of type " + param->getReturnType ( ) + "." );
 		++ i;
 	}
diff --git a/alib2cli/src/ast/statements/ContainerStatement.h b/alib2cli/src/ast/statements/ContainerStatement.h
index fdca5a9358..15afd19278 100644
--- a/alib2cli/src/ast/statements/ContainerStatement.h
+++ b/alib2cli/src/ast/statements/ContainerStatement.h
@@ -17,9 +17,6 @@ public:
 
 	std::shared_ptr < abstraction::OperationAbstraction > translateAndEval ( const std::shared_ptr < abstraction::OperationAbstraction > & prev, Environment & environment ) const override;
 
-	bool getImplicitMove ( ) const override {
-		return true;
-	}
 };
 
 } /* namespace cli */
diff --git a/alib2cli/src/ast/statements/FileStatement.h b/alib2cli/src/ast/statements/FileStatement.h
index 80e492823d..ceaeff0540 100644
--- a/alib2cli/src/ast/statements/FileStatement.h
+++ b/alib2cli/src/ast/statements/FileStatement.h
@@ -17,9 +17,6 @@ public:
 
 	std::shared_ptr < abstraction::OperationAbstraction > translateAndEval ( const std::shared_ptr < abstraction::OperationAbstraction > &, Environment & environment ) const override;
 
-	bool getImplicitMove ( ) const override {
-		return true;
-	}
 };
 
 } /* namespace cli */
diff --git a/alib2cli/src/ast/statements/ImmediateStatement.h b/alib2cli/src/ast/statements/ImmediateStatement.h
index 75f910acfc..96f04b0b85 100644
--- a/alib2cli/src/ast/statements/ImmediateStatement.h
+++ b/alib2cli/src/ast/statements/ImmediateStatement.h
@@ -18,9 +18,6 @@ public:
 		return std::make_shared < abstraction::ImmediateValueAbstraction < Type > > ( m_data );
 	}
 
-	bool getImplicitMove ( ) const override {
-		return true;
-	}
 };
 
 } /* namespace cli */
diff --git a/alib2cli/src/ast/statements/PreviousResultStatement.h b/alib2cli/src/ast/statements/PreviousResultStatement.h
index 5dd56bcea0..fd7855fb23 100644
--- a/alib2cli/src/ast/statements/PreviousResultStatement.h
+++ b/alib2cli/src/ast/statements/PreviousResultStatement.h
@@ -14,9 +14,6 @@ public:
 		return prev;
 	}
 
-	bool getImplicitMove ( ) const override {
-		return false;
-	}
 };
 
 } /* namespace cli */
diff --git a/alib2cli/src/ast/statements/ResultFileStatement.h b/alib2cli/src/ast/statements/ResultFileStatement.h
index 97a7e2a536..72678e62b0 100644
--- a/alib2cli/src/ast/statements/ResultFileStatement.h
+++ b/alib2cli/src/ast/statements/ResultFileStatement.h
@@ -30,10 +30,6 @@ public:
 		return res;
 	}
 
-	bool getImplicitMove ( ) const override {
-		return false;
-	}
-
 };
 
 } /* namespace cli */
diff --git a/alib2cli/src/ast/statements/ResultPrintStatement.h b/alib2cli/src/ast/statements/ResultPrintStatement.h
index 54a3fe4f57..e43e3b4f76 100644
--- a/alib2cli/src/ast/statements/ResultPrintStatement.h
+++ b/alib2cli/src/ast/statements/ResultPrintStatement.h
@@ -24,10 +24,6 @@ public:
 		return res;
 	}
 
-	bool getImplicitMove ( ) const override {
-		return false;
-	}
-
 };
 
 } /* namespace cli */
diff --git a/alib2cli/src/ast/statements/ResultVariableStatement.h b/alib2cli/src/ast/statements/ResultVariableStatement.h
index bc98979183..f3bda09aa8 100644
--- a/alib2cli/src/ast/statements/ResultVariableStatement.h
+++ b/alib2cli/src/ast/statements/ResultVariableStatement.h
@@ -19,10 +19,6 @@ public:
 		return res;
 	}
 
-	bool getImplicitMove ( ) const override {
-		return false;
-	}
-
 };
 
 } /* namespace cli */
diff --git a/alib2cli/src/ast/statements/SingleStatement.cpp b/alib2cli/src/ast/statements/SingleStatement.cpp
index bd77d7b1fd..5c249ca512 100644
--- a/alib2cli/src/ast/statements/SingleStatement.cpp
+++ b/alib2cli/src/ast/statements/SingleStatement.cpp
@@ -14,13 +14,6 @@ std::shared_ptr < abstraction::OperationAbstraction > SingleStatement::translate
 		params.push_back ( param->translateAndEval ( prev, environment ) );
 	}
 
-	ext::vector < bool > moves ( m_moves.size ( ) );
-	unsigned i = 0;
-	for ( const std::shared_ptr < Statement > & param : m_params ) {
-		moves [ i ] = m_moves [ i ] | param->getImplicitMove ( );
-		++ i;
-	}
-
 	std::string name = m_name->eval ( environment );
 
 	ext::vector < std::string > templateParams;
@@ -31,7 +24,7 @@ std::shared_ptr < abstraction::OperationAbstraction > SingleStatement::translate
 	if ( m_category )
 		category = m_category->getCategory ( );
 
-	return abstraction::AlgorithmHelper::eval ( name, templateParams, params, moves, category );
+	return abstraction::AlgorithmHelper::eval ( name, templateParams, params, m_moves, category );
 }
 
 } /* namespace cli */
diff --git a/alib2cli/src/ast/statements/SingleStatement.h b/alib2cli/src/ast/statements/SingleStatement.h
index 8502a5b031..2f6265f5b0 100644
--- a/alib2cli/src/ast/statements/SingleStatement.h
+++ b/alib2cli/src/ast/statements/SingleStatement.h
@@ -19,9 +19,6 @@ public:
 
 	std::shared_ptr < abstraction::OperationAbstraction > translateAndEval ( const std::shared_ptr < abstraction::OperationAbstraction > & prev, Environment & environment ) const override;
 
-	bool getImplicitMove ( ) const override {
-		return false;
-	}
 };
 
 } /* namespace cli */
diff --git a/alib2cli/src/ast/statements/StatementList.h b/alib2cli/src/ast/statements/StatementList.h
index 842bc9f163..3fbe8c7144 100644
--- a/alib2cli/src/ast/statements/StatementList.h
+++ b/alib2cli/src/ast/statements/StatementList.h
@@ -27,9 +27,6 @@ public:
 		m_statements.emplace_back ( std::move ( statement ) );
 	}
 
-	bool getImplicitMove ( ) const override {
-		return false;
-	}
 };
 
 } /* namespace cli */
diff --git a/alib2cli/src/ast/statements/ValueStatement.h b/alib2cli/src/ast/statements/ValueStatement.h
index ec526380ad..94f8d52fb7 100644
--- a/alib2cli/src/ast/statements/ValueStatement.h
+++ b/alib2cli/src/ast/statements/ValueStatement.h
@@ -17,9 +17,6 @@ public:
 		return std::make_shared < abstraction::ImmediateValueAbstraction < std::string > > ( m_arg->eval ( environment ) );
 	}
 
-	bool getImplicitMove ( ) const override {
-		return true;
-	}
 };
 
 } /* namespace cli */
diff --git a/alib2cli/src/ast/statements/VariableStatement.h b/alib2cli/src/ast/statements/VariableStatement.h
index f3a655e30c..7a9c9851dd 100644
--- a/alib2cli/src/ast/statements/VariableStatement.h
+++ b/alib2cli/src/ast/statements/VariableStatement.h
@@ -17,9 +17,6 @@ public:
 		return environment.getVariable ( m_name->eval ( environment ) );
 	}
 
-	bool getImplicitMove ( ) const override {
-		return false;
-	}
 };
 
 } /* namespace cli */
diff --git a/alib2raw_cli_integration/src/InputFileTypeRegistration.cpp b/alib2raw_cli_integration/src/InputFileTypeRegistration.cpp
index cbd4faf4c9..1e7f823f73 100644
--- a/alib2raw_cli_integration/src/InputFileTypeRegistration.cpp
+++ b/alib2raw_cli_integration/src/InputFileTypeRegistration.cpp
@@ -7,6 +7,9 @@
 #include <abstraction/WrapperAbstraction.hpp>
 #include <abstraction/PackingAbstraction.hpp>
 
+#include <registry/Registry.h>
+#include <common/AlgorithmCategories.hpp>
+
 namespace {
 
 	std::shared_ptr < abstraction::OperationAbstraction > dummy4 ( const std::string & typehint, const ext::vector < std::string > & ) {
diff --git a/alib2raw_cli_integration/src/OutputFileTypeRegistration.cpp b/alib2raw_cli_integration/src/OutputFileTypeRegistration.cpp
index 668c59300a..cbbd101832 100644
--- a/alib2raw_cli_integration/src/OutputFileTypeRegistration.cpp
+++ b/alib2raw_cli_integration/src/OutputFileTypeRegistration.cpp
@@ -8,6 +8,9 @@
 
 #include <abstraction/PackingAbstraction.hpp>
 
+#include <registry/Registry.h>
+#include <common/AlgorithmCategories.hpp>
+
 namespace {
 
 	std::shared_ptr < abstraction::OperationAbstraction > dummy4 ( const std::string & typehint ) {
diff --git a/alib2str_cli_integration/src/InputFileTypeRegistration.cpp b/alib2str_cli_integration/src/InputFileTypeRegistration.cpp
index b6eed2f023..2ed435e197 100644
--- a/alib2str_cli_integration/src/InputFileTypeRegistration.cpp
+++ b/alib2str_cli_integration/src/InputFileTypeRegistration.cpp
@@ -7,6 +7,9 @@
 #include <abstraction/WrapperAbstraction.hpp>
 #include <abstraction/PackingAbstraction.hpp>
 
+#include <registry/Registry.h>
+#include <common/AlgorithmCategories.hpp>
+
 namespace {
 
 	std::shared_ptr < abstraction::OperationAbstraction > dummy3 ( const std::string & typehint, const ext::vector < std::string > & ) {
diff --git a/alib2str_cli_integration/src/OutputFileTypeRegistration.cpp b/alib2str_cli_integration/src/OutputFileTypeRegistration.cpp
index 1b32d89648..22c682adb6 100644
--- a/alib2str_cli_integration/src/OutputFileTypeRegistration.cpp
+++ b/alib2str_cli_integration/src/OutputFileTypeRegistration.cpp
@@ -8,6 +8,9 @@
 
 #include <abstraction/PackingAbstraction.hpp>
 
+#include <registry/Registry.h>
+#include <common/AlgorithmCategories.hpp>
+
 namespace {
 
 	std::shared_ptr < abstraction::OperationAbstraction > dummy3 ( const std::string & typehint ) {
-- 
GitLab