diff --git a/alib2abstraction/src/registry/AlgorithmRegistry.cpp b/alib2abstraction/src/registry/AlgorithmRegistry.cpp index bbed26725573a75efec1e4b7035e2e6d5d096007..605930c7fc55df5a16c487d82a7e9f8337da5172 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 2c3f453930e10a1dac1b129d85d7edd410b55638..18683a0de273769bf9b3b31f02dafa361649c624 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 53c19198ccd4cf51a16b96521cd99d560885a63c..47f670ccd8f7d19913c6bb709bb48665a6b2013c 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 c99e8e0e03ee4ca8b4da66a8015192eb0779d332..40bc9ccd603cf8d3632617716e89f43d47a52827 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 e5f0b55cac884b11c66b328bb7e8535d313f3ae9..3afccd87cab3ed361dfba02bb2e5fc4c88969e2d 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 c923a329dbe643053de509128846543c5a0bdaf9..b49fc5510d9b548990fbefc0858ae8832c34db77 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 94426babbd60f0e56e8cd9aef4aa9c125194c9b1..ad26da2e80b2283e0dd4ef41614e66df3a39ca27 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 d20e4137965bbc8452f22260ee713b9f64343fc7..63b0ab4f4ecce4844fc59d5e9ca097ce266edc3d 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 048fda2d42bede274b4235641538795112b187be..dd8353d58803a46974aa6335e17df8aad134c483 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 7d8365e4eba21b170d8975e3b4f7ed779be994eb..782d357ed3fc117317ac8fce648f0fdcd96fd5bc 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 e0789d7ad314664629928aa5f088f4045f370d3d..93868482cb1d5349598daf31c886041781c9d3ef 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 9563dc7606a97db3252f72e8ab102afcfb23e568..56bce0bbcb5da3812361ba70ecad7e7480c8e59d 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 2f46c32bd110a473fbc0cab8e825957fad0b22cc..804427355337ab1e18046f8cd64503cfd8912179 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 2714eb86cfdd1b045377ed21d359313a0b6b85af..a02b9e5bb72c1a7f5fcdfd91845116e9903d3f46 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 293044399802a81ee971e69f081727cfa406d4da..94eb942eb181b4b208e746a6810a63a25d9e313b 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 e4f48da19d23adb4c71db03871b598bafda09649..180a216ba9e3703a4c5a01a99a2e11115a11d153 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 0000000000000000000000000000000000000000..a97ac87448cb8b194d20e53a4b5318549ed18110 --- /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 759cba8f141ce4da575d74e3a16e2f203088d113..b47b0c4abbb02e544ce576e94e5930e8a09e27c2 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 e69c58d26d837da9d65265d3effba351d72846a3..d3d37836333875f9b79eed2c42c05cd124f7359e 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 688572360bb21fe07e816a64c7ae96ecb76a3b2f..b8feb2f1c133853a50e7ba3d1d4612b34cb4ab02 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 cfc22761ecbd4a2900e23af6451cfebe710e9386..99ef936ad9d62ccbb1794d43f022e256252c360b 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 9e4ff0573fd38af9be5975635dc713914677702c..26e97e4e87b053df17560aa99956a0517753e780 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 0000000000000000000000000000000000000000..a24de68f9f8a251032b9434a4b87ef404c84f215 --- /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 af6104cca674f7694d9a80413cfaaee2a703c992..270ca501c868ba7d6b481829977a00b90c771832 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 320267c699256ae909abbed22ee9f77127c2162b..ad298fc61eb9d254143a44200e466b138cbf790d 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 3ef67205fa3049e50e850d01384e6afd7c6b303a..6ca9c697778ddd0c8b7ab105ee3b92b5390f429d 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 9aab4578a890e6334c8ad36039aaef77500c01e9..51f557c5a16964e402c3e56579253c5f62292f1d 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 e13b4bb4d175a02621b31f2a332bcf91cf15aca6..4bc2e54bf15728e23e3bc330d9d9add991a8edf5 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 7eb4cff9f20d18d908c6587780c74bed43dd9ac1..5ecc00d1de9523addab8591196c93fb869d9655d 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 e920e20b193c2ec411c28dda53c879d27c61d409..22c470628aad3fe5c8615b6006522ccf0eb5632e 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 ) {