From 26fd045ddca822d9886911eab2a3a3afae8a617e Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Tue, 29 Jan 2019 23:45:00 +0100 Subject: [PATCH] move registered entries data objects from headers to cpp files --- .../src/registry/AlgorithmRegistry.cpp | 5 +++++ .../src/registry/AlgorithmRegistry.hpp | 5 +---- .../src/registry/CastRegistry.cpp | 5 +++++ .../src/registry/CastRegistry.hpp | 5 +---- .../src/registry/ContainerRegistry.cpp | 5 +++++ .../src/registry/ContainerRegistry.hpp | 5 +---- .../src/registry/ImmediateRegistry.cpp | 5 +++++ .../src/registry/ImmediateRegistry.hpp | 5 +---- .../src/registry/NormalizeRegistry.cpp | 5 +++++ .../src/registry/NormalizeRegistry.hpp | 5 +---- .../src/registry/ValuePrinterRegistry.cpp | 5 +++++ .../src/registry/ValuePrinterRegistry.hpp | 5 +---- alib2raw/src/registry/RawReaderRegistry.cpp | 5 +++++ alib2raw/src/registry/RawReaderRegistry.hpp | 5 +---- alib2raw/src/registry/RawWriterRegistry.cpp | 5 +++++ alib2raw/src/registry/RawWriterRegistry.hpp | 5 +---- alib2str/src/core/stringApi.cpp | 17 ++++++++++++++++ alib2str/src/core/stringApi.hpp | 19 +++++++----------- .../src/registry/StringReaderRegistry.cpp | 13 ++++++++---- .../src/registry/StringReaderRegistry.hpp | 20 +++++++++---------- .../src/registry/StringWriterRegistry.cpp | 5 +++++ .../src/registry/StringWriterRegistry.hpp | 5 +---- alib2xml/src/core/xmlApi.cpp | 17 ++++++++++++++++ alib2xml/src/core/xmlApi.hpp | 12 ++--------- alib2xml/src/registry/XmlComposerRegistry.cpp | 5 +++++ alib2xml/src/registry/XmlComposerRegistry.hpp | 5 +---- .../registry/XmlContainerParserRegistry.cpp | 5 +++++ .../registry/XmlContainerParserRegistry.hpp | 5 +---- alib2xml/src/registry/XmlParserRegistry.cpp | 5 +++++ alib2xml/src/registry/XmlParserRegistry.hpp | 5 +---- 30 files changed, 133 insertions(+), 85 deletions(-) create mode 100644 alib2str/src/core/stringApi.cpp create mode 100644 alib2xml/src/core/xmlApi.cpp diff --git a/alib2abstraction/src/registry/AlgorithmRegistry.cpp b/alib2abstraction/src/registry/AlgorithmRegistry.cpp index bbed267255..605930c7fc 100644 --- a/alib2abstraction/src/registry/AlgorithmRegistry.cpp +++ b/alib2abstraction/src/registry/AlgorithmRegistry.cpp @@ -12,6 +12,11 @@ namespace abstraction { +ext::map < ext::pair < std::string, ext::vector < std::string > >, ext::list < ext::tuple < AlgorithmCategories::AlgorithmCategory, ext::vector < ext::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > >, ext::pair < ext::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, std::shared_ptr < AlgorithmRegistry::Entry > > > > > & AlgorithmRegistry::getEntries ( ) { + static ext::map < ext::pair < std::string, ext::vector < std::string > >, ext::list < ext::tuple < AlgorithmCategories::AlgorithmCategory, ext::vector < ext::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > >, ext::pair < ext::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, std::shared_ptr < Entry > > > > > algorithmGroups; + return algorithmGroups; +} + bool AlgorithmRegistry::isRegistered ( const std::string & algorithm, const ext::vector < std::string > & templateParams, AlgorithmCategories::AlgorithmCategory category, const ext::vector < ext::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > > & params ) { auto & group = getEntries ( ) [ ext::make_pair ( algorithm, templateParams ) ]; diff --git a/alib2abstraction/src/registry/AlgorithmRegistry.hpp b/alib2abstraction/src/registry/AlgorithmRegistry.hpp index 2c3f453930..18683a0de2 100644 --- a/alib2abstraction/src/registry/AlgorithmRegistry.hpp +++ b/alib2abstraction/src/registry/AlgorithmRegistry.hpp @@ -78,10 +78,7 @@ class AlgorithmRegistry { virtual std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( ) const override; }; - static ext::map < ext::pair < std::string, ext::vector < std::string > >, ext::list < ext::tuple < AlgorithmCategories::AlgorithmCategory, ext::vector < ext::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > >, ext::pair < ext::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, std::shared_ptr < Entry > > > > > & getEntries ( ) { - static ext::map < ext::pair < std::string, ext::vector < std::string > >, ext::list < ext::tuple < AlgorithmCategories::AlgorithmCategory, ext::vector < ext::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > >, ext::pair < ext::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, std::shared_ptr < Entry > > > > > algorithmGroups; - return algorithmGroups; - }; + static ext::map < ext::pair < std::string, ext::vector < std::string > >, ext::list < ext::tuple < AlgorithmCategories::AlgorithmCategory, ext::vector < ext::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > >, ext::pair < ext::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, std::shared_ptr < Entry > > > > > & getEntries ( ); enum class MatchType { EXACT, diff --git a/alib2abstraction/src/registry/CastRegistry.cpp b/alib2abstraction/src/registry/CastRegistry.cpp index 53c19198cc..47f670ccd8 100644 --- a/alib2abstraction/src/registry/CastRegistry.cpp +++ b/alib2abstraction/src/registry/CastRegistry.cpp @@ -11,6 +11,11 @@ namespace abstraction { +ext::map < std::pair < std::string, std::string >, std::unique_ptr < CastRegistry::Entry > > & CastRegistry::getEntries ( ) { + static ext::map < std::pair < std::string, std::string >, std::unique_ptr < Entry > > casts; + return casts; +} + std::shared_ptr < abstraction::OperationAbstraction > CastRegistry::getAbstraction ( const std::string & target, const std::string & param ) { auto entry = getEntries ( ).end ( ); for ( auto iter = getEntries ( ).begin ( ); iter != getEntries ( ).end ( ); ++ iter ) diff --git a/alib2abstraction/src/registry/CastRegistry.hpp b/alib2abstraction/src/registry/CastRegistry.hpp index c99e8e0e03..40bc9ccd60 100644 --- a/alib2abstraction/src/registry/CastRegistry.hpp +++ b/alib2abstraction/src/registry/CastRegistry.hpp @@ -47,10 +47,7 @@ class CastRegistry { virtual std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( ) const override; }; - static ext::map < std::pair < std::string, std::string >, std::unique_ptr < Entry > > & getEntries ( ) { - static ext::map < std::pair < std::string, std::string >, std::unique_ptr < Entry > > casts; - return casts; - }; + static ext::map < std::pair < std::string, std::string >, std::unique_ptr < Entry > > & getEntries ( ); public: static void unregisterCast ( std::string target, std::string param ) { diff --git a/alib2abstraction/src/registry/ContainerRegistry.cpp b/alib2abstraction/src/registry/ContainerRegistry.cpp index e5f0b55cac..3afccd87ca 100644 --- a/alib2abstraction/src/registry/ContainerRegistry.cpp +++ b/alib2abstraction/src/registry/ContainerRegistry.cpp @@ -11,6 +11,11 @@ namespace abstraction { +ext::map < std::string, ext::list < ext::pair < std::string, std::shared_ptr < ContainerRegistry::Entry > > > > & ContainerRegistry::getEntries ( ) { + static ext::map < std::string, ext::list < ext::pair < std::string, std::shared_ptr < Entry > > > > containerGroups; + return containerGroups; +} + bool ContainerRegistry::hasAbstraction ( const std::string & container ) { return getEntries ( ).count ( container ); } diff --git a/alib2abstraction/src/registry/ContainerRegistry.hpp b/alib2abstraction/src/registry/ContainerRegistry.hpp index c923a329db..b49fc5510d 100644 --- a/alib2abstraction/src/registry/ContainerRegistry.hpp +++ b/alib2abstraction/src/registry/ContainerRegistry.hpp @@ -39,10 +39,7 @@ class ContainerRegistry { } }; - static ext::map < std::string, ext::list < ext::pair < std::string, std::shared_ptr < Entry > > > > & getEntries ( ) { - static ext::map < std::string, ext::list < ext::pair < std::string, std::shared_ptr < Entry > > > > containerGroups; - return containerGroups; - }; + static ext::map < std::string, ext::list < ext::pair < std::string, std::shared_ptr < Entry > > > > & getEntries ( ); public: static void unregisterSet ( std::string param ) { diff --git a/alib2abstraction/src/registry/ImmediateRegistry.cpp b/alib2abstraction/src/registry/ImmediateRegistry.cpp index 94426babbd..ad26da2e80 100644 --- a/alib2abstraction/src/registry/ImmediateRegistry.cpp +++ b/alib2abstraction/src/registry/ImmediateRegistry.cpp @@ -9,6 +9,11 @@ namespace abstraction { +ext::map < std::string, std::unique_ptr < ImmediateRegistry::Entry > > & ImmediateRegistry::getEntries ( ) { + static ext::map < std::string, std::unique_ptr < Entry > > fileWriters; + return fileWriters; +} + std::shared_ptr < abstraction::OperationAbstraction > ImmediateRegistry::getAbstraction ( const std::string & result, std::string value ) { auto res = getEntries ( ).find ( result ); if ( res == getEntries ( ).end ( ) ) diff --git a/alib2abstraction/src/registry/ImmediateRegistry.hpp b/alib2abstraction/src/registry/ImmediateRegistry.hpp index d20e413796..63b0ab4f4e 100644 --- a/alib2abstraction/src/registry/ImmediateRegistry.hpp +++ b/alib2abstraction/src/registry/ImmediateRegistry.hpp @@ -39,10 +39,7 @@ class ImmediateRegistry { virtual std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( std::string value ) const override; }; - static ext::map < std::string, std::unique_ptr < Entry > > & getEntries ( ) { - static ext::map < std::string, std::unique_ptr < Entry > > fileWriters; - return fileWriters; - } + static ext::map < std::string, std::unique_ptr < Entry > > & getEntries ( ); public: static void unregisterImmediate ( std::string result ) { diff --git a/alib2abstraction/src/registry/NormalizeRegistry.cpp b/alib2abstraction/src/registry/NormalizeRegistry.cpp index 048fda2d42..dd8353d588 100644 --- a/alib2abstraction/src/registry/NormalizeRegistry.cpp +++ b/alib2abstraction/src/registry/NormalizeRegistry.cpp @@ -9,6 +9,11 @@ namespace abstraction { +ext::map < std::string, std::list < std::unique_ptr < NormalizeRegistry::Entry > > > & NormalizeRegistry::getEntries ( ) { + static ext::map < std::string, std::list < std::unique_ptr < Entry > > > entries; + return entries; +} + std::shared_ptr < abstraction::OperationAbstraction > NormalizeRegistry::getAbstraction ( const std::string & param ) { auto res = getEntries ( ).find ( param ); if ( res == getEntries ( ).end ( ) || res->second.size ( ) == 0 ) diff --git a/alib2abstraction/src/registry/NormalizeRegistry.hpp b/alib2abstraction/src/registry/NormalizeRegistry.hpp index 7d8365e4eb..782d357ed3 100644 --- a/alib2abstraction/src/registry/NormalizeRegistry.hpp +++ b/alib2abstraction/src/registry/NormalizeRegistry.hpp @@ -42,10 +42,7 @@ class NormalizeRegistry { virtual std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( ) const override; }; - static ext::map < std::string, std::list < std::unique_ptr < Entry > > > & getEntries ( ) { - static ext::map < std::string, std::list < std::unique_ptr < Entry > > > entries; - return entries; - } + static ext::map < std::string, std::list < std::unique_ptr < Entry > > > & getEntries ( ); public: template < class ParamType > diff --git a/alib2abstraction/src/registry/ValuePrinterRegistry.cpp b/alib2abstraction/src/registry/ValuePrinterRegistry.cpp index e0789d7ad3..93868482cb 100644 --- a/alib2abstraction/src/registry/ValuePrinterRegistry.cpp +++ b/alib2abstraction/src/registry/ValuePrinterRegistry.cpp @@ -9,6 +9,11 @@ namespace abstraction { +ext::map < std::string, std::unique_ptr < ValuePrinterRegistry::Entry > > & ValuePrinterRegistry::getEntries ( ) { + static ext::map < std::string, std::unique_ptr < Entry > > fileWriters; + return fileWriters; +} + std::shared_ptr < abstraction::OperationAbstraction > ValuePrinterRegistry::getAbstraction ( const std::string & param, std::ostream & os ) { auto res = getEntries ( ).find ( param ); if ( res == getEntries ( ).end ( ) ) diff --git a/alib2abstraction/src/registry/ValuePrinterRegistry.hpp b/alib2abstraction/src/registry/ValuePrinterRegistry.hpp index 9563dc7606..56bce0bbcb 100644 --- a/alib2abstraction/src/registry/ValuePrinterRegistry.hpp +++ b/alib2abstraction/src/registry/ValuePrinterRegistry.hpp @@ -39,10 +39,7 @@ class ValuePrinterRegistry { virtual std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( std::ostream & os ) const override; }; - static ext::map < std::string, std::unique_ptr < Entry > > & getEntries ( ) { - static ext::map < std::string, std::unique_ptr < Entry > > fileWriters; - return fileWriters; - } + static ext::map < std::string, std::unique_ptr < Entry > > & getEntries ( ); public: static void unregisterValuePrinter ( std::string param ) { diff --git a/alib2raw/src/registry/RawReaderRegistry.cpp b/alib2raw/src/registry/RawReaderRegistry.cpp index 2f46c32bd1..8044273553 100644 --- a/alib2raw/src/registry/RawReaderRegistry.cpp +++ b/alib2raw/src/registry/RawReaderRegistry.cpp @@ -11,6 +11,11 @@ namespace abstraction { +ext::map < std::string, std::unique_ptr < RawReaderRegistry::Entry > > & RawReaderRegistry::getEntries ( ) { + static ext::map < std::string, std::unique_ptr < Entry > > readers; + return readers; +} + std::shared_ptr < abstraction::OperationAbstraction > RawReaderRegistry::getAbstraction ( const std::string & type ) { for ( const std::pair < const std::string, std::unique_ptr < Entry > > & entry : getEntries ( ) ) { if ( ext::is_same_type ( entry.first, type ) ) diff --git a/alib2raw/src/registry/RawReaderRegistry.hpp b/alib2raw/src/registry/RawReaderRegistry.hpp index 2714eb86cf..a02b9e5bb7 100644 --- a/alib2raw/src/registry/RawReaderRegistry.hpp +++ b/alib2raw/src/registry/RawReaderRegistry.hpp @@ -36,10 +36,7 @@ class RawReaderRegistry { } }; - static ext::map < std::string, std::unique_ptr < Entry > > & getEntries ( ) { - static ext::map < std::string, std::unique_ptr < Entry > > readers; - return readers; - } + static ext::map < std::string, std::unique_ptr < Entry > > & getEntries ( ); public: static void unregisterRawReader ( std::string type ) { diff --git a/alib2raw/src/registry/RawWriterRegistry.cpp b/alib2raw/src/registry/RawWriterRegistry.cpp index 2930443998..94eb942eb1 100644 --- a/alib2raw/src/registry/RawWriterRegistry.cpp +++ b/alib2raw/src/registry/RawWriterRegistry.cpp @@ -9,6 +9,11 @@ namespace abstraction { +ext::map < std::string, std::unique_ptr < RawWriterRegistry::Entry > > & RawWriterRegistry::getEntries ( ) { + static ext::map < std::string, std::unique_ptr < Entry > > writers; + return writers; +} + std::shared_ptr < abstraction::OperationAbstraction > RawWriterRegistry::getAbstraction ( const std::string & param ) { auto type = getEntries ( ).find ( param ); if ( type == getEntries ( ).end ( ) ) diff --git a/alib2raw/src/registry/RawWriterRegistry.hpp b/alib2raw/src/registry/RawWriterRegistry.hpp index e4f48da19d..180a216ba9 100644 --- a/alib2raw/src/registry/RawWriterRegistry.hpp +++ b/alib2raw/src/registry/RawWriterRegistry.hpp @@ -39,10 +39,7 @@ class RawWriterRegistry { virtual std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( ) const override; }; - static ext::map < std::string, std::unique_ptr < Entry > > & getEntries ( ) { - static ext::map < std::string, std::unique_ptr < Entry > > writers; - return writers; - } + static ext::map < std::string, std::unique_ptr < Entry > > & getEntries ( ); public: static void unregisterRawWriter ( std::string param ) { diff --git a/alib2str/src/core/stringApi.cpp b/alib2str/src/core/stringApi.cpp new file mode 100644 index 0000000000..a97ac87448 --- /dev/null +++ b/alib2str/src/core/stringApi.cpp @@ -0,0 +1,17 @@ +#include "stringApi.hpp" + +namespace core { + +ext::map < std::string, std::unique_ptr < stringApi < object::Object >::GroupWriter > > & stringApi < object::Object >::composeFunctions ( ) { + static ext::map < std::string, std::unique_ptr < GroupWriter > > res; + + return res; +} + +ext::list < std::pair < std::function < bool ( std::istream & ) >, std::unique_ptr < stringApi < object::Object >::GroupReader > > > & stringApi < object::Object >::parseFunctions ( ) { + static ext::list < std::pair < std::function < bool ( std::istream & ) >, std::unique_ptr < GroupReader > > > res; + + return res; +} + +} /* namespace core */ diff --git a/alib2str/src/core/stringApi.hpp b/alib2str/src/core/stringApi.hpp index 759cba8f14..b47b0c4abb 100644 --- a/alib2str/src/core/stringApi.hpp +++ b/alib2str/src/core/stringApi.hpp @@ -9,7 +9,7 @@ #define STRING_API_HPP_ #include <alib/functional> -#include <alib/deque> +#include <alib/list> #include <alib/map> #include <alib/string> #include <alib/memory> @@ -29,7 +29,7 @@ struct stringApi; template < > struct stringApi < object::Object > { -private: +public: class GroupReader { public: virtual object::Object parse ( std::istream & input ) = 0; @@ -38,11 +38,8 @@ private: } }; - static ext::deque < std::pair < std::function < bool ( std::istream & ) >, std::unique_ptr < GroupReader > > > & parseFunctions ( ) { - static ext::deque < std::pair < std::function < bool ( std::istream & ) >, std::unique_ptr < GroupReader > > > res; - - return res; - } +private: + static ext::list < std::pair < std::function < bool ( std::istream & ) >, std::unique_ptr < GroupReader > > > & parseFunctions ( ); template < class Type > class ReaderRegister : public GroupReader { @@ -54,6 +51,7 @@ private: } }; +public: class GroupWriter { public: virtual void compose ( std::ostream & output, const object::Object & group ) = 0; @@ -62,11 +60,8 @@ private: } }; - static ext::map < std::string, std::unique_ptr < GroupWriter > > & composeFunctions ( ) { - static ext::map < std::string, std::unique_ptr < GroupWriter > > res; - - return res; - } +private: + static ext::map < std::string, std::unique_ptr < GroupWriter > > & composeFunctions ( ); template < class Type > class WriterRegister : public GroupWriter { diff --git a/alib2str/src/registry/StringReaderRegistry.cpp b/alib2str/src/registry/StringReaderRegistry.cpp index e69c58d26d..d3d3783633 100644 --- a/alib2str/src/registry/StringReaderRegistry.cpp +++ b/alib2str/src/registry/StringReaderRegistry.cpp @@ -9,13 +9,18 @@ namespace abstraction { +ext::map < std::string, ext::list < std::pair < std::function < bool ( std::istream & ) >, std::unique_ptr < StringReaderRegistry::Entry > > > > & StringReaderRegistry::getEntries ( ) { + static ext::map < std::string, ext::list < std::pair < std::function < bool ( std::istream & ) >, std::unique_ptr < Entry > > > > readers; + return readers; +} + std::shared_ptr < abstraction::OperationAbstraction > StringReaderRegistry::getAbstraction ( const std::string & group, const std::string & str ) { std::stringstream ss ( str ); while ( isspace ( ss.peek ( ) ) ) ss.get ( ); - auto lambda = [ & ] ( const std::pair < const std::string, std::pair < std::function < bool ( std::istream & ) >, std::unique_ptr < Entry > > > & entry ) { - return entry.second.first ( ss ); + auto lambda = [ & ] ( const std::pair < std::function < bool ( std::istream & ) >, std::unique_ptr < Entry > > & entry ) { + return entry.first ( ss ); }; const auto & entryIterator = getEntries ( ).find ( group ); @@ -26,14 +31,14 @@ std::shared_ptr < abstraction::OperationAbstraction > StringReaderRegistry::getA int pos = ss.tellg(); - typename ext::map < std::string, std::pair < std::function < bool ( std::istream & ) >, std::unique_ptr < Entry > > >::const_iterator callback = find_if ( entries.begin ( ), entries.end ( ), lambda ); + typename ext::list < std::pair < std::function < bool ( std::istream & ) >, std::unique_ptr < Entry > > >::const_iterator callback = find_if ( entries.begin ( ), entries.end ( ), lambda ); if ( callback == entries.end ( ) ) throw exception::CommonException ( "No callback handling input found." ); if ( pos != ss.tellg ( ) ) throw exception::CommonException ( "First function of registered callback moved the stream." ); - return callback->second.second->getAbstraction ( ); + return callback->second->getAbstraction ( ); } } /* namespace abstraction */ diff --git a/alib2str/src/registry/StringReaderRegistry.hpp b/alib2str/src/registry/StringReaderRegistry.hpp index 688572360b..b8feb2f1c1 100644 --- a/alib2str/src/registry/StringReaderRegistry.hpp +++ b/alib2str/src/registry/StringReaderRegistry.hpp @@ -19,6 +19,7 @@ namespace abstraction { class StringReaderRegistry { +public: class Entry { public: virtual std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( ) const = 0; @@ -27,6 +28,7 @@ class StringReaderRegistry { } }; +private: template < class Return > class EntryImpl : public Entry { public: @@ -39,27 +41,23 @@ class StringReaderRegistry { virtual std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( ) const override; }; - static ext::map < std::string, ext::map < std::string, std::pair < std::function < bool ( std::istream & ) >, std::unique_ptr < Entry > > > > & getEntries ( ) { - static ext::map < std::string, ext::map < std::string, std::pair < std::function < bool ( std::istream & ) >, std::unique_ptr < Entry > > > > readers; - return readers; - } + static ext::map < std::string, ext::list < std::pair < std::function < bool ( std::istream & ) >, std::unique_ptr < Entry > > > > & getEntries ( ); public: - template < class Group, class ReturnType > - static void unregisterStringReader ( ) { + template < class Group > + static void unregisterStringReader ( ext::list < std::pair < std::function < bool ( std::istream & ) >, std::unique_ptr < Entry > > >::const_iterator iter ) { std::string group = ext::to_string < Group > ( ); - std::string returnType = ext::to_string < ReturnType > ( ); - getEntries ( ) [ group ].erase ( returnType ); + getEntries ( ) [ group ].erase ( iter ); } template < class Group, class ReturnType > - static void registerStringReader ( ) { + static ext::list < std::pair < std::function < bool ( std::istream & ) >, std::unique_ptr < Entry > > >::const_iterator registerStringReader ( ) { std::string group = ext::to_string < Group > ( ); std::string returnType = ext::to_string < ReturnType > ( ); - if ( ! getEntries ( ) [ group ].insert ( std::make_pair ( std::move ( returnType ), std::make_pair ( core::stringApi < ReturnType >::first, std::unique_ptr < Entry > ( new EntryImpl < ReturnType > ( ) ) ) ) ).second ) - throw std::invalid_argument ( "Entry " + returnType + " already registered in " + group + "." ); + auto & entry = getEntries ( ) [ group ]; + return entry.insert ( entry.end ( ), std::make_pair ( core::stringApi < ReturnType >::first, std::unique_ptr < Entry > ( new EntryImpl < ReturnType > ( ) ) ) ); } static std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( const std::string & group, const std::string & data ); diff --git a/alib2str/src/registry/StringWriterRegistry.cpp b/alib2str/src/registry/StringWriterRegistry.cpp index cfc22761ec..99ef936ad9 100644 --- a/alib2str/src/registry/StringWriterRegistry.cpp +++ b/alib2str/src/registry/StringWriterRegistry.cpp @@ -9,6 +9,11 @@ namespace abstraction { +ext::map < std::string, std::unique_ptr < StringWriterRegistry::Entry > > & StringWriterRegistry::getEntries ( ) { + static ext::map < std::string, std::unique_ptr < Entry > > writers; + return writers; +} + std::shared_ptr < abstraction::OperationAbstraction > StringWriterRegistry::getAbstraction ( const std::string & param ) { auto type = getEntries ( ).find ( param ); if ( type == getEntries ( ).end ( ) ) diff --git a/alib2str/src/registry/StringWriterRegistry.hpp b/alib2str/src/registry/StringWriterRegistry.hpp index 9e4ff0573f..26e97e4e87 100644 --- a/alib2str/src/registry/StringWriterRegistry.hpp +++ b/alib2str/src/registry/StringWriterRegistry.hpp @@ -40,10 +40,7 @@ class StringWriterRegistry { virtual std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( ) const override; }; - static ext::map < std::string, std::unique_ptr < Entry > > & getEntries ( ) { - static ext::map < std::string, std::unique_ptr < Entry > > writers; - return writers; - } + static ext::map < std::string, std::unique_ptr < Entry > > & getEntries ( ); public: static void unregisterStringWriter ( std::string param ) { diff --git a/alib2xml/src/core/xmlApi.cpp b/alib2xml/src/core/xmlApi.cpp new file mode 100644 index 0000000000..a24de68f9f --- /dev/null +++ b/alib2xml/src/core/xmlApi.cpp @@ -0,0 +1,17 @@ +#include "xmlApi.hpp" + +namespace core { + +ext::map < std::string, std::unique_ptr < xmlApi < object::Object >::GroupParser > > & xmlApi < object::Object >::parseFunctions ( ) { + static ext::map < std::string, std::unique_ptr < GroupParser > > res; + + return res; +} + +ext::map < std::string, std::unique_ptr < xmlApi < object::Object >::GroupComposer > > & xmlApi < object::Object >::composeFunctions ( ) { + static ext::map < std::string, std::unique_ptr < GroupComposer > > res; + + return res; +} + +} /* namespace core */ diff --git a/alib2xml/src/core/xmlApi.hpp b/alib2xml/src/core/xmlApi.hpp index af6104cca6..270ca501c8 100644 --- a/alib2xml/src/core/xmlApi.hpp +++ b/alib2xml/src/core/xmlApi.hpp @@ -70,11 +70,7 @@ private: virtual ~GroupParser ( ) noexcept = default; }; - static ext::map < std::string, std::unique_ptr < GroupParser > > & parseFunctions ( ) { - static ext::map < std::string, std::unique_ptr < GroupParser > > res; - - return res; - } + static ext::map < std::string, std::unique_ptr < GroupParser > > & parseFunctions ( ); template < class Type > class ParserRegister : public GroupParser { @@ -92,11 +88,7 @@ private: virtual ~GroupComposer( ) noexcept = default; }; - static ext::map < std::string, std::unique_ptr < GroupComposer > > & composeFunctions ( ) { - static ext::map < std::string, std::unique_ptr < GroupComposer > > res; - - return res; - } + static ext::map < std::string, std::unique_ptr < GroupComposer > > & composeFunctions ( ); template < class Type > class ComposerRegister : public GroupComposer { diff --git a/alib2xml/src/registry/XmlComposerRegistry.cpp b/alib2xml/src/registry/XmlComposerRegistry.cpp index 320267c699..ad298fc61e 100644 --- a/alib2xml/src/registry/XmlComposerRegistry.cpp +++ b/alib2xml/src/registry/XmlComposerRegistry.cpp @@ -9,6 +9,11 @@ namespace abstraction { +ext::map < std::string, std::unique_ptr < XmlComposerRegistry::Entry > > & XmlComposerRegistry::getEntries ( ) { + static ext::map < std::string, std::unique_ptr < Entry > > fileWriters; + return fileWriters; +} + std::shared_ptr < abstraction::OperationAbstraction > XmlComposerRegistry::getAbstraction ( const std::string & param ) { auto res = getEntries ( ).find ( param ); if ( res == getEntries ( ).end ( ) ) diff --git a/alib2xml/src/registry/XmlComposerRegistry.hpp b/alib2xml/src/registry/XmlComposerRegistry.hpp index 3ef67205fa..6ca9c69777 100644 --- a/alib2xml/src/registry/XmlComposerRegistry.hpp +++ b/alib2xml/src/registry/XmlComposerRegistry.hpp @@ -40,10 +40,7 @@ class XmlComposerRegistry { virtual std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( ) const override; }; - static ext::map < std::string, std::unique_ptr < Entry > > & getEntries ( ) { - static ext::map < std::string, std::unique_ptr < Entry > > fileWriters; - return fileWriters; - } + static ext::map < std::string, std::unique_ptr < Entry > > & getEntries ( ); public: static void unregisterXmlComposer ( std::string param ) { diff --git a/alib2xml/src/registry/XmlContainerParserRegistry.cpp b/alib2xml/src/registry/XmlContainerParserRegistry.cpp index 9aab4578a8..51f557c5a1 100644 --- a/alib2xml/src/registry/XmlContainerParserRegistry.cpp +++ b/alib2xml/src/registry/XmlContainerParserRegistry.cpp @@ -10,6 +10,11 @@ namespace abstraction { +ext::map < std::string, ext::list < ext::pair < std::string, std::shared_ptr < XmlContainerParserRegistry::Entry > > > > & XmlContainerParserRegistry::getEntries ( ) { + static ext::map < std::string, ext::list < ext::pair < std::string, std::shared_ptr < Entry > > > > containerGroups; + return containerGroups; +} + bool XmlContainerParserRegistry::hasAbstraction ( const std::string & container ) { return getEntries ( ).count ( container ); } diff --git a/alib2xml/src/registry/XmlContainerParserRegistry.hpp b/alib2xml/src/registry/XmlContainerParserRegistry.hpp index e13b4bb4d1..4bc2e54bf1 100644 --- a/alib2xml/src/registry/XmlContainerParserRegistry.hpp +++ b/alib2xml/src/registry/XmlContainerParserRegistry.hpp @@ -39,10 +39,7 @@ class XmlContainerParserRegistry { } }; - static ext::map < std::string, ext::list < ext::pair < std::string, std::shared_ptr < Entry > > > > & getEntries ( ) { - static ext::map < std::string, ext::list < ext::pair < std::string, std::shared_ptr < Entry > > > > containerGroups; - return containerGroups; - }; + static ext::map < std::string, ext::list < ext::pair < std::string, std::shared_ptr < Entry > > > > & getEntries ( ); public: static void unregisterSet ( std::string param ) { diff --git a/alib2xml/src/registry/XmlParserRegistry.cpp b/alib2xml/src/registry/XmlParserRegistry.cpp index 7eb4cff9f2..5ecc00d1de 100644 --- a/alib2xml/src/registry/XmlParserRegistry.cpp +++ b/alib2xml/src/registry/XmlParserRegistry.cpp @@ -9,6 +9,11 @@ namespace abstraction { +ext::map < std::string, std::unique_ptr < XmlParserRegistry::Entry > > & XmlParserRegistry::getEntries ( ) { + static ext::map < std::string, std::unique_ptr < Entry > > parsers; + return parsers; +} + std::shared_ptr < abstraction::OperationAbstraction > XmlParserRegistry::getAbstraction ( const std::string & typeName ) { auto type = getEntries ( ).find ( typeName ); if ( type == getEntries ( ).end ( ) ) diff --git a/alib2xml/src/registry/XmlParserRegistry.hpp b/alib2xml/src/registry/XmlParserRegistry.hpp index e920e20b19..22c470628a 100644 --- a/alib2xml/src/registry/XmlParserRegistry.hpp +++ b/alib2xml/src/registry/XmlParserRegistry.hpp @@ -39,10 +39,7 @@ class XmlParserRegistry { virtual std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( ) const override; }; - static ext::map < std::string, std::unique_ptr < Entry > > & getEntries ( ) { - static ext::map < std::string, std::unique_ptr < Entry > > parsers; - return parsers; - } + static ext::map < std::string, std::unique_ptr < Entry > > & getEntries ( ); public: static void unregisterXmlParser ( std::string result ) { -- GitLab