From 0554bd18bee821ec6b203510991132d84529d5b1 Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Sat, 19 Jan 2019 10:27:41 +0100 Subject: [PATCH] force unique wrapper registration --- alib2abstraction/src/common/ParamQualifiers.hpp | 15 +++++++++++++++ .../src/registry/AlgorithmRegistry.hpp | 8 ++++---- alib2data/src/PrimitiveRegistrator.cpp | 1 - alib2raw/src/registration/RawRegistration.hpp | 2 +- .../src/automaton/string/ObjectGroupRegister.cpp | 16 ++++++++++++++++ .../src/grammar/string/GrammarGroupRegister.cpp | 16 ++++++++++++++++ .../src/object/string/ObjectGroupRegister.cpp | 16 ++++++++++++++++ .../src/regexp/string/RegexpGroupRegister.cpp | 16 ++++++++++++++++ alib2str/src/registration/StringRegistration.hpp | 7 +++++++ .../src/string/string/StringGroupRegister.cpp | 16 ++++++++++++++++ alib2str/src/tree/string/TreeGroupRegister.cpp | 16 ++++++++++++++++ alib2xml/src/PrimitiveRegistrator.cpp | 1 - 12 files changed, 123 insertions(+), 7 deletions(-) create mode 100644 alib2str/src/automaton/string/ObjectGroupRegister.cpp create mode 100644 alib2str/src/grammar/string/GrammarGroupRegister.cpp create mode 100644 alib2str/src/object/string/ObjectGroupRegister.cpp create mode 100644 alib2str/src/regexp/string/RegexpGroupRegister.cpp create mode 100644 alib2str/src/string/string/StringGroupRegister.cpp create mode 100644 alib2str/src/tree/string/TreeGroupRegister.cpp diff --git a/alib2abstraction/src/common/ParamQualifiers.hpp b/alib2abstraction/src/common/ParamQualifiers.hpp index 01fea43d2b..7975f2f052 100644 --- a/alib2abstraction/src/common/ParamQualifiers.hpp +++ b/alib2abstraction/src/common/ParamQualifiers.hpp @@ -29,6 +29,21 @@ public: return res; } + + friend std::ostream & operator << ( std::ostream & os, const ParamQualifier & paramQualifier ) { + switch ( paramQualifier ) { + case ParamQualifier::LREF: + os << "LValue reference"; + break; + case ParamQualifier::RREF: + os << "RValue reference"; + break; + case ParamQualifier::CONST: + os << "Constant"; + break; + } + return os; + } }; } /* namespace abstraction */ diff --git a/alib2abstraction/src/registry/AlgorithmRegistry.hpp b/alib2abstraction/src/registry/AlgorithmRegistry.hpp index f58dc6bb58..291fdc2f09 100644 --- a/alib2abstraction/src/registry/AlgorithmRegistry.hpp +++ b/alib2abstraction/src/registry/AlgorithmRegistry.hpp @@ -130,7 +130,7 @@ public: ext::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > > result = convertReturnType < ReturnType > ( ); if ( isRegistered ( algorithm, templateParams, category, params ) ) - throw std::invalid_argument ( "Callback for " + algorithm + " already registered." ); + throw std::invalid_argument ( "Callback for " + algorithm + " with params " + ext::to_string ( params ) + " already registered." ); registerInternal ( std::move ( algorithm ), std::move ( templateParams ), category, std::move ( result ), std::move ( params ), std::make_shared < MemberImpl < ObjectType &, ReturnType, ParamTypes ... > > ( callback ) ); } @@ -147,7 +147,7 @@ public: ext::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > > result = convertReturnType < ReturnType > ( ); if ( isRegistered ( algorithm, templateParams, category, params ) ) - throw std::invalid_argument ( "Callback for " + algorithm + " already registered." ); + throw std::invalid_argument ( "Callback for " + algorithm + " with params " + ext::to_string ( params ) + " already registered." ); registerInternal ( std::move ( algorithm ), std::move ( templateParams ), category, std::move ( result ), std::move ( params ), std::make_shared < MemberImpl < const ObjectType &, ReturnType, ParamTypes ... > > ( callback ) ); } @@ -161,7 +161,7 @@ public: ext::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > > result = convertReturnType < ReturnType > ( ); if ( isRegistered ( algorithm, templateParams, category, params ) ) - throw std::invalid_argument ( "Callback for " + algorithm + " already registered." ); + throw std::invalid_argument ( "Callback for " + algorithm + " with params " + ext::to_string ( params ) + " already registered." ); registerInternal ( std::move ( algorithm ), std::move ( templateParams ), category, std::move ( result ), std::move ( params ), std::make_shared < EntryImpl < ReturnType, ParamTypes ... > > ( callback ) ); } @@ -178,7 +178,7 @@ public: ext::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > > result = convertReturnType < ReturnType > ( ); if ( isRegistered ( algorithm, templateParams, category, params ) ) - return; + throw std::invalid_argument ( "Callback for " + algorithm + " with params " + ext::to_string ( params ) + " already registered." ); registerInternal ( std::move ( algorithm ), std::move ( templateParams ), category, std::move ( result ), std::move ( params ), std::make_shared < WrapperImpl < ReturnType, ParamTypes ... > > ( callback ) ); } diff --git a/alib2data/src/PrimitiveRegistrator.cpp b/alib2data/src/PrimitiveRegistrator.cpp index d1e5bbd2d2..a72f94cb60 100644 --- a/alib2data/src/PrimitiveRegistrator.cpp +++ b/alib2data/src/PrimitiveRegistrator.cpp @@ -34,7 +34,6 @@ public: abstraction::XmlContainerParserRegistry::registerSet < common::ranked_symbol < object::Object, unsigned > > ( "RankedSymbol" ); registration::XmlWriterRegister < ext::set < common::ranked_symbol < object::Object, unsigned > > > ( ); - registration::XmlWriterRegister < common::ranked_symbol < object::Object, unsigned > > ( ); registration::XmlWriterRegister < ext::vector < ext::map < std::pair < object::Object, object::Object >, ext::map < object::Object, object::Object > > > > ( ); registration::XmlWriterRegister < ext::vector < ext::vector < ext::set < object::Object > > > > ( ); registration::XmlWriterRegister < ext::map < common::ranked_symbol < object::Object, unsigned >, size_t > > ( ); diff --git a/alib2raw/src/registration/RawRegistration.hpp b/alib2raw/src/registration/RawRegistration.hpp index bbb5bebf6b..f72486a3bd 100644 --- a/alib2raw/src/registration/RawRegistration.hpp +++ b/alib2raw/src/registration/RawRegistration.hpp @@ -37,7 +37,7 @@ class RawReaderRegister { public: RawReaderRegister ( ) { abstraction::RawReaderRegistry::registerRawReader < Type > ( ); - abstraction::AlgorithmRegistry::registerWrapper < raw::Parse < Type >, abstraction::UnspecifiedType, const std::string & > ( raw::Parse < Type >::abstractionFromString, std::array < std::string, 1 > { { "arg0" } } ); + abstraction::AlgorithmRegistry::registerWrapper < raw::Parse < Type >, Type, const std::string & > ( raw::Parse < Type >::abstractionFromString, std::array < std::string, 1 > { { "arg0" } } ); } }; diff --git a/alib2str/src/automaton/string/ObjectGroupRegister.cpp b/alib2str/src/automaton/string/ObjectGroupRegister.cpp new file mode 100644 index 0000000000..28acf127a6 --- /dev/null +++ b/alib2str/src/automaton/string/ObjectGroupRegister.cpp @@ -0,0 +1,16 @@ +/* + * AutomatonGroupGegister.cpp + * + * Created on: Sep 27, 2017 + * Author: Jan Travnicek + */ + +#include <automaton/Automaton.h> + +#include <registration/StringRegistration.hpp> + +namespace { + +static auto stringReaderGroup = registration::StringReaderGroupRegister < automaton::Automaton > ( ); + +} /* namespace */ diff --git a/alib2str/src/grammar/string/GrammarGroupRegister.cpp b/alib2str/src/grammar/string/GrammarGroupRegister.cpp new file mode 100644 index 0000000000..6e76600cd1 --- /dev/null +++ b/alib2str/src/grammar/string/GrammarGroupRegister.cpp @@ -0,0 +1,16 @@ +/* + * GrammarGroupGegister.cpp + * + * Created on: Sep 27, 2017 + * Author: Jan Travnicek + */ + +#include <grammar/Grammar.h> + +#include <registration/StringRegistration.hpp> + +namespace { + +static auto stringReaderGroup = registration::StringReaderGroupRegister < grammar::Grammar > ( ); + +} /* namespace */ diff --git a/alib2str/src/object/string/ObjectGroupRegister.cpp b/alib2str/src/object/string/ObjectGroupRegister.cpp new file mode 100644 index 0000000000..5daacc45dd --- /dev/null +++ b/alib2str/src/object/string/ObjectGroupRegister.cpp @@ -0,0 +1,16 @@ +/* + * ObjectGroupGegister.cpp + * + * Created on: Sep 27, 2017 + * Author: Jan Travnicek + */ + +#include <object/Object.h> + +#include <registration/StringRegistration.hpp> + +namespace { + +static auto stringReaderGroup = registration::StringReaderGroupRegister < object::Object > ( ); + +} /* namespace */ diff --git a/alib2str/src/regexp/string/RegexpGroupRegister.cpp b/alib2str/src/regexp/string/RegexpGroupRegister.cpp new file mode 100644 index 0000000000..1b615bfac9 --- /dev/null +++ b/alib2str/src/regexp/string/RegexpGroupRegister.cpp @@ -0,0 +1,16 @@ +/* + * RegExpGroupGegister.cpp + * + * Created on: Sep 27, 2017 + * Author: Jan Travnicek + */ + +#include <regexp/RegExp.h> + +#include <registration/StringRegistration.hpp> + +namespace { + +static auto stringReaderGroup = registration::StringReaderGroupRegister < regexp::RegExp > ( ); + +} /* namespace */ diff --git a/alib2str/src/registration/StringRegistration.hpp b/alib2str/src/registration/StringRegistration.hpp index 523f093ec1..38c645fb8f 100644 --- a/alib2str/src/registration/StringRegistration.hpp +++ b/alib2str/src/registration/StringRegistration.hpp @@ -37,6 +37,13 @@ class StringReaderRegister { public: StringReaderRegister ( ) { abstraction::StringReaderRegistry::registerStringReader < Group, Type > ( ); + } +}; + +template < class Group > +class StringReaderGroupRegister { +public: + StringReaderGroupRegister ( ) { abstraction::AlgorithmRegistry::registerWrapper < string::Parse < Group >, abstraction::UnspecifiedType, std::string && > ( string::Parse < Group >::abstractionFromString, std::array < std::string, 1 > { { "arg0" } } ); } }; diff --git a/alib2str/src/string/string/StringGroupRegister.cpp b/alib2str/src/string/string/StringGroupRegister.cpp new file mode 100644 index 0000000000..bd7d54c5a7 --- /dev/null +++ b/alib2str/src/string/string/StringGroupRegister.cpp @@ -0,0 +1,16 @@ +/* + * StringGroupGegister.cpp + * + * Created on: Sep 27, 2017 + * Author: Jan Travnicek + */ + +#include <string/String.h> + +#include <registration/StringRegistration.hpp> + +namespace { + +static auto stringReaderGroup = registration::StringReaderGroupRegister < string::String > ( ); + +} /* namespace */ diff --git a/alib2str/src/tree/string/TreeGroupRegister.cpp b/alib2str/src/tree/string/TreeGroupRegister.cpp new file mode 100644 index 0000000000..128e63e599 --- /dev/null +++ b/alib2str/src/tree/string/TreeGroupRegister.cpp @@ -0,0 +1,16 @@ +/* + * TreeGroupGegister.cpp + * + * Created on: Sep 27, 2017 + * Author: Jan Travnicek + */ + +#include <tree/Tree.h> + +#include <registration/StringRegistration.hpp> + +namespace { + +static auto stringReaderGroup = registration::StringReaderGroupRegister < tree::Tree > ( ); + +} /* namespace */ diff --git a/alib2xml/src/PrimitiveRegistrator.cpp b/alib2xml/src/PrimitiveRegistrator.cpp index 5a3b8ff214..cecb0dcae2 100644 --- a/alib2xml/src/PrimitiveRegistrator.cpp +++ b/alib2xml/src/PrimitiveRegistrator.cpp @@ -40,7 +40,6 @@ public: registration::XmlWriterRegister < ext::set < int > > ( ); registration::XmlWriterRegister < ext::map < object::Object, size_t > > ( ); registration::XmlWriterRegister < object::Object > ( ); - registration::XmlWriterRegister < ext::set < object::Object > > ( ); abstraction::ContainerRegistry::registerSet < object::Object > ( "Object" ); abstraction::XmlContainerParserRegistry::registerSet < object::Object > ( "Object" ); -- GitLab