From 97c28e1f223075bf9633c8f907e24bc7422406ae Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Wed, 29 May 2019 22:17:05 +0200
Subject: [PATCH] make m_data in ValueOperationAbstraction private

---
 .../src/abstraction/CastAbstraction.hpp       |  2 +-
 .../abstraction/ImmediateValueAbstraction.hpp |  2 +-
 .../src/abstraction/NormalizeAbstraction.hpp  |  4 +-
 .../src/abstraction/ReferenceAbstraction.hpp  |  2 +-
 .../src/abstraction/SetAbstraction.hpp        |  2 +-
 .../abstraction/ValueOperationAbstraction.hpp | 56 +++++++++++++------
 .../src/registry/AlgorithmRegistry.hpp        |  4 +-
 .../src/abstraction/RawReaderAbstraction.hpp  |  3 +-
 .../src/abstraction/RawWriterAbstraction.hpp  |  2 +-
 .../abstraction/StringReaderAbstraction.hpp   |  3 +-
 .../abstraction/StringWriterAbstraction.hpp   |  2 +-
 .../abstraction/XmlComposerAbstraction.hpp    |  2 +-
 .../src/abstraction/XmlParserAbstraction.hpp  |  3 +-
 .../XmlTokensParserAbstraction.hpp            |  2 +-
 14 files changed, 52 insertions(+), 37 deletions(-)

diff --git a/alib2abstraction/src/abstraction/CastAbstraction.hpp b/alib2abstraction/src/abstraction/CastAbstraction.hpp
index 63a1675d75..a4602833cc 100644
--- a/alib2abstraction/src/abstraction/CastAbstraction.hpp
+++ b/alib2abstraction/src/abstraction/CastAbstraction.hpp
@@ -17,7 +17,7 @@ class CastAbstraction : public UnaryOperationAbstraction < ReturnType, const Par
 public:
 	bool run ( ) override {
 		std::pair < std::shared_ptr < OperationAbstraction >, bool > & param = std::get < 0 > ( this->getParams ( ) );
-		this->m_data = ReturnType ( retrieveValue < const ParamType & > ( param.first, param.second ) );
+		this->setData ( ReturnType ( retrieveValue < const ParamType & > ( param.first, param.second ) ) );
 
 		return true;
 	}
diff --git a/alib2abstraction/src/abstraction/ImmediateValueAbstraction.hpp b/alib2abstraction/src/abstraction/ImmediateValueAbstraction.hpp
index 919a5388a4..b14b7d6b49 100644
--- a/alib2abstraction/src/abstraction/ImmediateValueAbstraction.hpp
+++ b/alib2abstraction/src/abstraction/ImmediateValueAbstraction.hpp
@@ -16,7 +16,7 @@ template < class ReturnType >
 class ImmediateValueAbstraction : public NullaryOperationAbstraction < ReturnType > {
 public:
 	ImmediateValueAbstraction ( ReturnType result ) {
-		this->m_data = ReturnType ( result );
+		this->setData ( ReturnType ( result ) );
 	}
 
 	bool run ( ) override {
diff --git a/alib2abstraction/src/abstraction/NormalizeAbstraction.hpp b/alib2abstraction/src/abstraction/NormalizeAbstraction.hpp
index c75bdf2dfa..55b22ff3bd 100644
--- a/alib2abstraction/src/abstraction/NormalizeAbstraction.hpp
+++ b/alib2abstraction/src/abstraction/NormalizeAbstraction.hpp
@@ -20,9 +20,7 @@ public:
 	bool run ( ) override {
 		std::pair < std::shared_ptr < OperationAbstraction >, bool > & rawParam = std::get < 0 > ( this->getParams ( ) );
 		ParamType && param = retrieveValue < ParamType && > ( rawParam.first, rawParam.second );
-		ReturnType res = factory::NormalizeFactory::normalize ( std::move ( param ) );
-
-		this->m_data = std::move ( res );
+		this->setData ( factory::NormalizeFactory::normalize ( std::move ( param ) ) );
 
 		return true;
 	}
diff --git a/alib2abstraction/src/abstraction/ReferenceAbstraction.hpp b/alib2abstraction/src/abstraction/ReferenceAbstraction.hpp
index a186d25cd6..9c4064a141 100644
--- a/alib2abstraction/src/abstraction/ReferenceAbstraction.hpp
+++ b/alib2abstraction/src/abstraction/ReferenceAbstraction.hpp
@@ -17,7 +17,7 @@ class ReferenceAbstraction : public UnaryOperationAbstraction < Type *, Type & >
 public:
 	bool run ( ) override {
 		std::pair < std::shared_ptr < OperationAbstraction >, bool > & param = std::get < 0 > ( this->getParams ( ) );
-		this->m_data = & retrieveValue < Type & > ( param.first, param.second );
+		this->setData ( & retrieveValue < Type & > ( param.first, param.second ) );
 
 		return true;
 	}
diff --git a/alib2abstraction/src/abstraction/SetAbstraction.hpp b/alib2abstraction/src/abstraction/SetAbstraction.hpp
index 7ac4b65875..70293c46c9 100644
--- a/alib2abstraction/src/abstraction/SetAbstraction.hpp
+++ b/alib2abstraction/src/abstraction/SetAbstraction.hpp
@@ -23,7 +23,7 @@ public:
 			theSet.insert ( abstraction::retrieveValue < ParamType > ( param.first, param.second ) );
 		}
 
-		this->m_data = theSet;
+		this->setData ( std::move ( theSet ) );
 
 		return true;
 	}
diff --git a/alib2abstraction/src/abstraction/ValueOperationAbstraction.hpp b/alib2abstraction/src/abstraction/ValueOperationAbstraction.hpp
index 24895c5823..a6d17f47f1 100644
--- a/alib2abstraction/src/abstraction/ValueOperationAbstraction.hpp
+++ b/alib2abstraction/src/abstraction/ValueOperationAbstraction.hpp
@@ -25,6 +25,8 @@ class UnspecifiedType {
 
 template < class ReturnType >
 class ValueOperationAbstraction : public OperationAbstraction, public ValueProvider < ReturnType >, public ValueProvider < ReturnType & >, public ValueProvider < const ReturnType & >, public ValueProvider < ReturnType && >, public ValueProvider < const ReturnType && > {
+	mutable std::optional < ReturnType > m_data;
+
 protected:
 	bool isConst ( ) const override {
 		return false;
@@ -46,13 +48,15 @@ protected:
 		return m_data.value ( );
 	}
 
-	mutable std::optional < ReturnType > m_data;
+	void setData ( ReturnType data ) {
+		m_data = std::move ( data );
+	}
 
 public:
 	template < typename ... ParamTypes, typename Callable >
 	inline void run_helper ( Callable callback, const ext::array < std::pair < std::shared_ptr < OperationAbstraction >, bool >, sizeof ... ( ParamTypes ) > & inputs ) {
 		if ( ! cached ( ) )
-			m_data = abstraction::apply < ParamTypes ... > ( callback, inputs );
+			setData ( abstraction::apply < ParamTypes ... > ( callback, inputs ) );
 	}
 
 	ext::type_index getReturnTypeIndex ( ) const override {
@@ -74,6 +78,8 @@ public:
 
 template < class ReturnType >
 class ValueOperationAbstraction < const ReturnType > : public OperationAbstraction, public ValueProvider < ReturnType >, public ValueProvider < const ReturnType & >, public ValueProvider < const ReturnType && > {
+	mutable std::optional < ReturnType > m_data;
+
 protected:
 	bool isConst ( ) const override {
 		return true;
@@ -95,13 +101,15 @@ protected:
 		return m_data.value ( );
 	}
 
-	mutable std::optional < ReturnType > m_data;
+	void setData ( ReturnType data ) {
+		m_data = std::move ( data );
+	}
 
 public:
 	template < typename ... ParamTypes, typename Callable >
 	inline void run_helper ( Callable callback, const ext::array < std::pair < std::shared_ptr < OperationAbstraction >, bool >, sizeof ... ( ParamTypes ) > & inputs ) {
 		if ( ! cached ( ) )
-			m_data = abstraction::apply < ParamTypes ... > ( callback, inputs );
+			setData ( abstraction::apply < ParamTypes ... > ( callback, inputs ) );
 	}
 
 	ext::type_index getReturnTypeIndex ( ) const override {
@@ -123,6 +131,8 @@ public:
 
 template < class ReturnType >
 class ValueOperationAbstraction < ReturnType & > : public OperationAbstraction, public ValueProvider < ReturnType >, public ValueProvider < ReturnType & >, public ValueProvider < const ReturnType & >, public ValueProvider < ReturnType && >, public ValueProvider < const ReturnType && > {
+	mutable std::optional < std::reference_wrapper < ReturnType > > m_data;
+
 protected:
 	bool isConst ( ) const override {
 		return false;
@@ -144,13 +154,15 @@ protected:
 		return m_data->get ( );
 	}
 
-	mutable std::optional < std::reference_wrapper < ReturnType > > m_data;
+	void setData ( ReturnType & data ) {
+		m_data = std::reference_wrapper < ReturnType > ( data );
+	}
 
 public:
 	template < typename ... ParamTypes, typename Callable >
 	inline void run_helper ( Callable callback, const ext::array < std::pair < std::shared_ptr < OperationAbstraction >, bool >, sizeof ... ( ParamTypes ) > & inputs ) {
 		if ( ! cached ( ) )
-			m_data = std::reference_wrapper < ReturnType > ( abstraction::apply < ParamTypes ... > ( callback, inputs ) );
+			setData ( abstraction::apply < ParamTypes ... > ( callback, inputs ) );
 	}
 
 	ext::type_index getReturnTypeIndex ( ) const override {
@@ -172,6 +184,8 @@ public:
 
 template < class ReturnType >
 class ValueOperationAbstraction < const ReturnType & > : public OperationAbstraction, public ValueProvider < ReturnType >, public ValueProvider < const ReturnType & >, public ValueProvider < const ReturnType && > {
+	mutable std::optional < std::reference_wrapper < const ReturnType > > m_data;
+
 protected:
 	bool isConst ( ) const override {
 		return true;
@@ -193,13 +207,15 @@ protected:
 		return m_data->get ( );
 	}
 
-	mutable std::optional < std::reference_wrapper < const ReturnType > > m_data;
+	void setData ( const ReturnType & data ) {
+		m_data = std::reference_wrapper < const ReturnType > ( data );
+	}
 
 public:
 	template < typename ... ParamTypes, typename Callable >
 	inline void run_helper ( Callable callback, const ext::array < std::pair < std::shared_ptr < OperationAbstraction >, bool >, sizeof ... ( ParamTypes ) > & inputs ) {
 		if ( ! cached ( ) )
-			m_data = std::reference_wrapper < const ReturnType > ( abstraction::apply < ParamTypes ... > ( callback, inputs ) );
+			setData ( abstraction::apply < ParamTypes ... > ( callback, inputs ) );
 	}
 
 	ext::type_index getReturnTypeIndex ( ) const override {
@@ -221,6 +237,8 @@ public:
 
 template < class ReturnType >
 class ValueOperationAbstraction < ReturnType && > : public OperationAbstraction, public ValueProvider < ReturnType >, public ValueProvider < const ReturnType & >, public ValueProvider < ReturnType && >, public ValueProvider < const ReturnType && > {
+	mutable std::optional < std::reference_wrapper < ReturnType > > m_data;
+
 protected:
 	bool isConst ( ) const override {
 		return false;
@@ -242,15 +260,15 @@ protected:
 		return m_data->get ( );
 	}
 
-	mutable std::optional < std::reference_wrapper < ReturnType > > m_data;
+	void setData ( ReturnType && data ) {
+		m_data = std::reference_wrapper < ReturnType > ( data );
+	}
 
 public:
 	template < typename ... ParamTypes, typename Callable >
 	inline void run_helper ( Callable callback, const ext::array < std::pair < std::shared_ptr < OperationAbstraction >, bool >, sizeof ... ( ParamTypes ) > & inputs ) {
-		if ( ! cached ( ) ) {
-			ReturnType && res = abstraction::apply < ParamTypes ... > ( callback, inputs );
-			m_data = std::reference_wrapper < ReturnType > ( res );
-		}
+		if ( ! cached ( ) )
+			setData ( abstraction::apply < ParamTypes ... > ( callback, inputs ) );
 	}
 
 	ext::type_index getReturnTypeIndex ( ) const override {
@@ -272,6 +290,8 @@ public:
 
 template < class ReturnType >
 class ValueOperationAbstraction < const ReturnType && > : public OperationAbstraction, public ValueProvider < ReturnType >, public ValueProvider < const ReturnType & >, public ValueProvider < const ReturnType && > {
+	mutable std::optional < std::reference_wrapper < const ReturnType > > m_data;
+
 protected:
 	bool isConst ( ) const override {
 		return true;
@@ -293,15 +313,15 @@ protected:
 		return m_data->get ( );
 	}
 
-	mutable std::optional < std::reference_wrapper < const ReturnType > > m_data;
+	void setData ( const ReturnType && data ) {
+		m_data = std::reference_wrapper < const ReturnType > ( data );
+	}
 
 public:
 	template < typename ... ParamTypes, typename Callable >
 	inline void run_helper ( Callable callback, const ext::array < std::pair < std::shared_ptr < OperationAbstraction >, bool >, sizeof ... ( ParamTypes ) > & inputs ) {
-		if ( ! cached ( ) ) {
-			const ReturnType && res = abstraction::apply < ParamTypes ... > ( callback, inputs );
-			m_data = std::reference_wrapper < const ReturnType > ( res );
-		}
+		if ( ! cached ( ) )
+			setData ( abstraction::apply < ParamTypes ... > ( callback, inputs ) );
 	}
 
 	ext::type_index getReturnTypeIndex ( ) const override {
diff --git a/alib2abstraction/src/registry/AlgorithmRegistry.hpp b/alib2abstraction/src/registry/AlgorithmRegistry.hpp
index 416913d2b4..414ef798f8 100644
--- a/alib2abstraction/src/registry/AlgorithmRegistry.hpp
+++ b/alib2abstraction/src/registry/AlgorithmRegistry.hpp
@@ -168,7 +168,7 @@ public:
 	}
 
 	template < class Algo, class ObjectType, class ReturnType, class ... ParamTypes >
-	static void registerMethod ( ReturnType ( ObjectType:: * callback ) ( ParamTypes ... ), std::string methodName, std::array < std::string, sizeof ... ( ParamTypes ) > paramNames ) {
+	static void registerMethod ( ReturnType ( ObjectType:: * callback ) ( ParamTypes ... ), const std::string & methodName, std::array < std::string, sizeof ... ( ParamTypes ) > paramNames ) {
 		std::string algorithm = ext::to_string < Algo > ( ) + "::" + methodName;
 		ext::vector < std::string > templateParams;
 
@@ -176,7 +176,7 @@ public:
 	}
 
 	template < class Algo, class ObjectType, class ReturnType, class ... ParamTypes >
-	static void registerMethod ( ReturnType ( ObjectType:: * callback ) ( ParamTypes ... ) const, std::string methodName, std::array < std::string, sizeof ... ( ParamTypes ) > paramNames ) {
+	static void registerMethod ( ReturnType ( ObjectType:: * callback ) ( ParamTypes ... ) const, const std::string & methodName, std::array < std::string, sizeof ... ( ParamTypes ) > paramNames ) {
 		std::string algorithm = ext::to_string < Algo > ( ) + "::" + methodName;
 		ext::vector < std::string > templateParams;
 
diff --git a/alib2raw/src/abstraction/RawReaderAbstraction.hpp b/alib2raw/src/abstraction/RawReaderAbstraction.hpp
index 7c23b37e3d..a0960151e5 100644
--- a/alib2raw/src/abstraction/RawReaderAbstraction.hpp
+++ b/alib2raw/src/abstraction/RawReaderAbstraction.hpp
@@ -18,8 +18,7 @@ class RawReaderAbstraction : public UnaryOperationAbstraction < ReturnType, std:
 public:
 	bool run ( ) override {
 		std::pair < std::shared_ptr < OperationAbstraction >, bool > & param = std::get < 0 > ( this->getParams ( ) );
-		ReturnType res = factory::RawDataFactory::fromString ( abstraction::retrieveValue < std::string && > ( param.first, param.second ) );
-		this->m_data = std::move ( res );
+		this->setData ( factory::RawDataFactory::fromString ( abstraction::retrieveValue < std::string && > ( param.first, param.second ) ) );
 		return true;
 	}
 };
diff --git a/alib2raw/src/abstraction/RawWriterAbstraction.hpp b/alib2raw/src/abstraction/RawWriterAbstraction.hpp
index 50128d233c..3e786c549a 100644
--- a/alib2raw/src/abstraction/RawWriterAbstraction.hpp
+++ b/alib2raw/src/abstraction/RawWriterAbstraction.hpp
@@ -18,7 +18,7 @@ class RawWriterAbstraction : public UnaryOperationAbstraction < std::string, con
 public:
 	bool run ( ) override {
 		std::pair < std::shared_ptr < OperationAbstraction >, bool > & param = std::get < 0 > ( this->getParams ( ) );
-		this->m_data = factory::RawDataFactory::toString ( abstraction::retrieveValue < const ParamType & > ( param.first, param.second ) );
+		this->setData ( factory::RawDataFactory::toString ( abstraction::retrieveValue < const ParamType & > ( param.first, param.second ) ) );
 		return true;
 	}
 };
diff --git a/alib2str/src/abstraction/StringReaderAbstraction.hpp b/alib2str/src/abstraction/StringReaderAbstraction.hpp
index 4faed98d06..6827665adc 100644
--- a/alib2str/src/abstraction/StringReaderAbstraction.hpp
+++ b/alib2str/src/abstraction/StringReaderAbstraction.hpp
@@ -18,8 +18,7 @@ class StringReaderAbstraction : public UnaryOperationAbstraction < ReturnType, s
 public:
 	bool run ( ) override {
 		std::pair < std::shared_ptr < OperationAbstraction >, bool > & param = std::get < 0 > ( this->getParams ( ) );
-		ReturnType res = factory::StringDataFactory::fromString ( abstraction::retrieveValue < std::string && > ( param.first, param.second ) );
-		this->m_data = std::move ( res );
+		this->setData ( factory::StringDataFactory::fromString ( abstraction::retrieveValue < std::string && > ( param.first, param.second ) ) );
 		return true;
 	}
 };
diff --git a/alib2str/src/abstraction/StringWriterAbstraction.hpp b/alib2str/src/abstraction/StringWriterAbstraction.hpp
index 15cb587202..9bfd322807 100644
--- a/alib2str/src/abstraction/StringWriterAbstraction.hpp
+++ b/alib2str/src/abstraction/StringWriterAbstraction.hpp
@@ -18,7 +18,7 @@ class StringWriterAbstraction : public UnaryOperationAbstraction < std::string,
 public:
 	bool run ( ) override {
 		std::pair < std::shared_ptr < OperationAbstraction >, bool > & param = std::get < 0 > ( this->getParams ( ) );
-		this->m_data = factory::StringDataFactory::toString ( abstraction::retrieveValue < const ParamType & > ( param.first, param.second ) );
+		this->setData ( factory::StringDataFactory::toString ( abstraction::retrieveValue < const ParamType & > ( param.first, param.second ) ) );
 		return true;
 	}
 };
diff --git a/alib2xml/src/abstraction/XmlComposerAbstraction.hpp b/alib2xml/src/abstraction/XmlComposerAbstraction.hpp
index 0a50924bdb..5da461dc92 100644
--- a/alib2xml/src/abstraction/XmlComposerAbstraction.hpp
+++ b/alib2xml/src/abstraction/XmlComposerAbstraction.hpp
@@ -18,7 +18,7 @@ class XmlComposerAbstraction : public UnaryOperationAbstraction < ext::deque < s
 public:
 	bool run ( ) override {
 		std::pair < std::shared_ptr < OperationAbstraction >, bool > & param = std::get < 0 > ( this->getParams ( ) );
-		this->m_data = factory::XmlDataFactory::toTokens ( abstraction::retrieveValue < const ParamType & > ( param.first, param.second ) );
+		this->setData ( factory::XmlDataFactory::toTokens ( abstraction::retrieveValue < const ParamType & > ( param.first, param.second ) ) );
 		return true;
 	}
 };
diff --git a/alib2xml/src/abstraction/XmlParserAbstraction.hpp b/alib2xml/src/abstraction/XmlParserAbstraction.hpp
index 2e5e1ab3fc..ddea4287ac 100644
--- a/alib2xml/src/abstraction/XmlParserAbstraction.hpp
+++ b/alib2xml/src/abstraction/XmlParserAbstraction.hpp
@@ -20,8 +20,7 @@ class XmlParserAbstraction : public UnaryOperationAbstraction < ReturnType, ext:
 public:
 	bool run ( ) override {
 		std::pair < std::shared_ptr < OperationAbstraction >, bool > & param = std::get < 0 > ( this->getParams ( ) );
-		ReturnType res = factory::XmlDataFactory::fromTokens ( abstraction::retrieveValue < ext::deque < sax::Token > && > ( param.first, param.second ) );
-		this->m_data = std::move ( res );
+		this->setData ( factory::XmlDataFactory::fromTokens ( abstraction::retrieveValue < ext::deque < sax::Token > && > ( param.first, param.second ) ) );
 		return true;
 	}
 };
diff --git a/alib2xml/src/abstraction/XmlTokensParserAbstraction.hpp b/alib2xml/src/abstraction/XmlTokensParserAbstraction.hpp
index c1f194f144..d6b2cae41f 100644
--- a/alib2xml/src/abstraction/XmlTokensParserAbstraction.hpp
+++ b/alib2xml/src/abstraction/XmlTokensParserAbstraction.hpp
@@ -17,7 +17,7 @@ class XmlTokensParserAbstraction : public UnaryOperationAbstraction < ext::deque
 public:
 	bool run ( ) override {
 		std::pair < std::shared_ptr < OperationAbstraction >, bool > & param = std::get < 0 > ( this->getParams ( ) );
-		this->m_data = sax::SaxParseInterface::parseFile ( abstraction::retrieveValue < const std::string & > ( param.first, param.second ) );
+		this->setData ( sax::SaxParseInterface::parseFile ( abstraction::retrieveValue < const std::string & > ( param.first, param.second ) ) );
 		return true;
 	}
 };
-- 
GitLab