diff --git a/alib2str/src/abstraction/StringReaderAbstraction.hpp b/alib2str/src/abstraction/StringReaderAbstraction.hpp index ab07251e71b365900116c1fe5ac47eed75a741c6..46af4599613decf87f5217aa5ed530c73b9788d9 100644 --- a/alib2str/src/abstraction/StringReaderAbstraction.hpp +++ b/alib2str/src/abstraction/StringReaderAbstraction.hpp @@ -8,26 +8,21 @@ #ifndef _STRING_READER_ABSTRACTION_HPP_ #define _STRING_READER_ABSTRACTION_HPP_ -#include <abstraction/NullaryOperationAbstraction.hpp> -#include <tuple> -#include <exception/CommonException.h> +#include <abstraction/UnaryOperationAbstraction.hpp> #include <factory/StringDataFactory.hpp> namespace abstraction { template < class ReturnType > -class StringReaderAbstraction : public NullaryOperationAbstraction < ReturnType > { +class StringReaderAbstraction : public UnaryOperationAbstraction < ReturnType, std::string && > { std::string m_string; public: - StringReaderAbstraction ( std::string str ) : m_string ( std::move ( str ) ) { - } - virtual bool run ( ) override { if ( this->isReady ( ) ) return true; - ReturnType res = alib::StringDataFactory::fromString ( std::move ( m_string ) ); + ReturnType res = alib::StringDataFactory::fromString ( std::get < 0 > ( this->m_params )->getRValueReference ( ) ); this->m_data = std::move ( res ); return true; } diff --git a/alib2str/src/abstraction/StringReaderRegistry.cpp b/alib2str/src/abstraction/StringReaderRegistry.cpp index 1046d296def135599cd11e4dbb8269e762052907..cd00e8baf7c155871282411e1b8a7c091020f436 100644 --- a/alib2str/src/abstraction/StringReaderRegistry.cpp +++ b/alib2str/src/abstraction/StringReaderRegistry.cpp @@ -9,9 +9,10 @@ namespace abstraction { -std::shared_ptr < abstraction::OperationAbstraction > StringReaderRegistry::getAbstraction ( std::string str ) { +std::shared_ptr < abstraction::OperationAbstraction > StringReaderRegistry::getAbstraction ( const std::string & str ) { + std::stringstream ss ( str ); + auto lambda = [ & ] ( const std::pair < std::function < bool ( std::istream & ) >, std::unique_ptr < Entry > > & entry ) { - std::stringstream ss ( str ); return entry.first ( ss ); }; @@ -19,7 +20,7 @@ std::shared_ptr < abstraction::OperationAbstraction > StringReaderRegistry::getA if ( callback == getEntries ( ).end ( ) ) throw exception::CommonException ( "Entry not available." ); - return callback->second->getAbstraction ( std::move ( str ) ); + return callback->second->getAbstraction ( ); } } /* namespace abstraction */ diff --git a/alib2str/src/abstraction/StringReaderRegistry.hpp b/alib2str/src/abstraction/StringReaderRegistry.hpp index f4a4833e1294c0b7fea945f2044ff591daf69ea9..2b91d8539f66aca7e535e6d32b8ebd0e87dd977f 100644 --- a/alib2str/src/abstraction/StringReaderRegistry.hpp +++ b/alib2str/src/abstraction/StringReaderRegistry.hpp @@ -21,7 +21,7 @@ namespace abstraction { class StringReaderRegistry { class Entry { public: - virtual std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( std::string data ) const = 0; + virtual std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( ) const = 0; }; @@ -31,7 +31,7 @@ class StringReaderRegistry { EntryImpl ( ) { } - virtual std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( std::string data ) const override; + virtual std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( ) const override; }; static ext::deque < std::pair < std::function < bool ( std::istream & ) >, std::unique_ptr < Entry > > > & getEntries ( ) { @@ -45,7 +45,7 @@ public: getEntries ( ).push_back ( std::make_pair ( alib::stringApi < ReturnType >::first, std::unique_ptr < Entry > ( new EntryImpl < ReturnType > ( ) ) ) ); } - static std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( std::string data ); + static std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( const std::string & data ); }; } /* namespace abstraction */ @@ -55,8 +55,8 @@ public: namespace abstraction { template < class Return > -std::shared_ptr < abstraction::OperationAbstraction > StringReaderRegistry::EntryImpl < Return >::getAbstraction ( std::string data ) const { - return std::make_shared < abstraction::StringReaderAbstraction < Return > > ( std::move ( data ) ); +std::shared_ptr < abstraction::OperationAbstraction > StringReaderRegistry::EntryImpl < Return >::getAbstraction ( ) const { + return std::make_shared < abstraction::StringReaderAbstraction < Return > > ( ); } } /* namespace abstraction */ diff --git a/alib2str/src/abstraction/StringWriterAbstraction.hpp b/alib2str/src/abstraction/StringWriterAbstraction.hpp index 788b02afcc495aada12218c67323cc24ee229356..1ae64f805232ffef7621d3a9731e7f89c7c2da0b 100644 --- a/alib2str/src/abstraction/StringWriterAbstraction.hpp +++ b/alib2str/src/abstraction/StringWriterAbstraction.hpp @@ -9,13 +9,12 @@ #define _STRING_WRITER_ABSTRACTION_HPP_ #include <abstraction/UnaryOperationAbstraction.hpp> -#include <tuple> #include <factory/StringDataFactory.hpp> namespace abstraction { template < class ParamType > -class StringWriterAbstraction : public UnaryOperationAbstraction < std::string, ParamType > { +class StringWriterAbstraction : public UnaryOperationAbstraction < std::string, const ParamType & > { public: virtual bool run ( ) override { if ( ! this->inputsReady ( ) ) diff --git a/alib2xml/src/abstraction/XmlComposerAbstraction.hpp b/alib2xml/src/abstraction/XmlComposerAbstraction.hpp index 604af3be511b7fc0c4629dfcc0012269aa909513..e308e8fba0f67deeba5b5755af38864be6c0cd93 100644 --- a/alib2xml/src/abstraction/XmlComposerAbstraction.hpp +++ b/alib2xml/src/abstraction/XmlComposerAbstraction.hpp @@ -14,7 +14,7 @@ namespace abstraction { template < class ParamType > -class XmlComposerAbstraction : public UnaryOperationAbstraction < ext::deque < sax::Token >, ParamType > { +class XmlComposerAbstraction : public UnaryOperationAbstraction < ext::deque < sax::Token >, const ParamType & > { public: virtual bool run ( ) override { if ( ! this->inputsReady ( ) )