From 5cab2e36c7a12654fcc6001365f20fe7b6de317c Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Wed, 23 Aug 2017 16:22:46 +0200 Subject: [PATCH] allow export of summary from introspection --- aintrospection2/src/aintrospection.cpp | 30 ++++++++++++ .../command/AlgorithmsIntrospectionCommand.h | 2 +- .../src/command/CastsIntrospectionCommand.h | 6 +-- .../command/DataTypesIntrospectionCommand.h | 2 +- .../src/command/NamesIntrospectionCommand.h | 2 +- .../command/OverloadsIntrospectionCommand.h | 8 ++-- .../src/abstraction/AlgorithmRegistry.cpp | 22 ++++----- .../src/abstraction/AlgorithmRegistry.hpp | 22 ++++----- alib2common/src/abstraction/CastRegistry.cpp | 14 +++--- alib2common/src/abstraction/CastRegistry.hpp | 6 +-- alib2common/src/abstraction/Registry.cpp | 18 +++---- alib2common/src/abstraction/Registry.h | 18 +++---- .../src/abstraction/XmlFileWriterRegistry.cpp | 8 ++-- .../src/abstraction/XmlFileWriterRegistry.hpp | 4 +- .../abstraction/common/ParamQualifiers.cpp | 48 +++++++++++++++++++ .../abstraction/common/ParamQualifiers.hpp | 14 ++++++ alib2common/src/core/namingApi.hpp | 8 ++-- 17 files changed, 162 insertions(+), 70 deletions(-) create mode 100644 alib2common/src/abstraction/common/ParamQualifiers.cpp diff --git a/aintrospection2/src/aintrospection.cpp b/aintrospection2/src/aintrospection.cpp index 74403f8518..5ff3c52532 100644 --- a/aintrospection2/src/aintrospection.cpp +++ b/aintrospection2/src/aintrospection.cpp @@ -13,6 +13,13 @@ #include <lexer/Lexer.h> #include <parser/Parser.h> +#include <container/ObjectsMap.h> +#include <container/ObjectsSet.h> +#include <container/ObjectsPair.h> +#include <container/ObjectsVector.h> +#include <container/ObjectsTuple.h> +#include <primitive/String.h> + int main ( int argc, char * argv[] ) { try { common::GlobalData::argc = argc; @@ -35,6 +42,12 @@ int main ( int argc, char * argv[] ) { TCLAP::SwitchArg castTo ( "t", "cast_to", "Casting to type", false ); cmd.add ( castTo ); + TCLAP::SwitchArg names ( "n", "names", "Names", false ); + cmd.add ( names ); + + TCLAP::SwitchArg summary ( "s", "sumary", "Sumary", false ); + cmd.add ( summary ); + TCLAP::UnlabeledValueArg < std::string > argument ( "argument", "Type name for casts, algorithm name for overloads, group name for algorithms or datatypes", false, "", "string" ); cmd.add ( argument ); @@ -73,6 +86,23 @@ int main ( int argc, char * argv[] ) { } else if ( castTo.isSet ( ) ) { cli::Parser parser ( cli::Lexer ( "introspect casts :to #argument" ) ); parser.parse ( )->run ( environment ); + } else if ( names.isSet ( ) ) { + cli::Parser parser ( cli::Lexer ( "introspect names" ) ); + parser.parse ( )->run ( environment ); + } else if ( summary.isSet ( ) ) { + ext::set < ext::pair < std::string, std::string > > casts = abstraction::Registry::listCasts ( ); + ext::set < std::string > algos = abstraction::Registry::listAlgorithms ( ); + + ext::map < std::string, ext::set < ext::pair < ext::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, ext::vector < ext::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > > > > > overs; + for ( const std::string & algo : algos ) + overs.insert ( std::make_pair ( algo, abstraction::Registry::listOverloads ( algo ) ) ); + + ext::pair < + ext::set < ext::pair < std::string, std::string > >, + ext::map < std::string, ext::set < ext::pair < ext::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, ext::vector < ext::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > > > > > + > res = ext::make_pair ( casts, overs ); + + alib::XmlDataFactory::toStdout ( res ); } measurements::end ( ); diff --git a/alib2cli/src/command/AlgorithmsIntrospectionCommand.h b/alib2cli/src/command/AlgorithmsIntrospectionCommand.h index c79aea07ac..b4c844307a 100644 --- a/alib2cli/src/command/AlgorithmsIntrospectionCommand.h +++ b/alib2cli/src/command/AlgorithmsIntrospectionCommand.h @@ -13,7 +13,7 @@ public: AlgorithmsIntrospectionCommand ( std::unique_ptr < cli::Arg > param ) : m_param ( std::move ( param ) ) { } - void printAlgos ( const std::set < std::string > & algos ) const { + void printAlgos ( const ext::set < std::string > & algos ) const { for ( const std::string & algo : algos ) std::cout << algo << std::endl; } diff --git a/alib2cli/src/command/CastsIntrospectionCommand.h b/alib2cli/src/command/CastsIntrospectionCommand.h index 217925218d..069d654b45 100644 --- a/alib2cli/src/command/CastsIntrospectionCommand.h +++ b/alib2cli/src/command/CastsIntrospectionCommand.h @@ -15,13 +15,13 @@ public: CastsIntrospectionCommand (std::unique_ptr < cli::Arg > param, bool from, bool to ) : m_param ( std::move ( param ) ), m_from ( from ), m_to ( to ) { } - void printTypes ( const std::set < std::string > & types ) const { + void printTypes ( const ext::set < std::string > & types ) const { for ( const std::string & type : types ) std::cout << type << std::endl; } - void printCasts ( const std::set < std::pair < std::string, std::string > > & casts ) const { - for ( const std::pair < std::string, std::string > & cast : casts ) + void printCasts ( const ext::set < ext::pair < std::string, std::string > > & casts ) const { + for ( const ext::pair < std::string, std::string > & cast : casts ) std::cout << cast.first << ", " << cast.second << std::endl; } diff --git a/alib2cli/src/command/DataTypesIntrospectionCommand.h b/alib2cli/src/command/DataTypesIntrospectionCommand.h index 901a74860b..ab80a3c445 100644 --- a/alib2cli/src/command/DataTypesIntrospectionCommand.h +++ b/alib2cli/src/command/DataTypesIntrospectionCommand.h @@ -13,7 +13,7 @@ public: DataTypesIntrospectionCommand ( std::unique_ptr < cli::Arg > param ) : m_param ( std::move ( param ) ) { } - void printTypes ( const std::set < std::string > & types ) const { + void printTypes ( const ext::set < std::string > & types ) const { for ( const std::string & type : types ) std::cout << type << std::endl; } diff --git a/alib2cli/src/command/NamesIntrospectionCommand.h b/alib2cli/src/command/NamesIntrospectionCommand.h index 4812a6d6a0..994039a54a 100644 --- a/alib2cli/src/command/NamesIntrospectionCommand.h +++ b/alib2cli/src/command/NamesIntrospectionCommand.h @@ -8,7 +8,7 @@ namespace cli { class NamesIntrospectionCommand : public Command { public: - void printNames ( const std::set < std::pair < std::string, std::set < std::string > > > & names ) const { + void printNames ( const ext::set < ext::pair < std::string, ext::set < std::string > > > & names ) const { for ( const std::pair < std::string, std::set < std::string > > & entry : names ) { std::cout << entry.first << " : "; bool first = true; diff --git a/alib2cli/src/command/OverloadsIntrospectionCommand.h b/alib2cli/src/command/OverloadsIntrospectionCommand.h index 2fc7fd6603..7bc96a88db 100644 --- a/alib2cli/src/command/OverloadsIntrospectionCommand.h +++ b/alib2cli/src/command/OverloadsIntrospectionCommand.h @@ -16,10 +16,10 @@ public: virtual Command::Result run ( Environment & environment ) const override { std::string param = m_param->eval ( environment ); - std::set < std::pair < std::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, ext::vector < std::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > > > > overloads = abstraction::Registry::listOverloads ( param ); - for ( const std::pair < std::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, ext::vector < std::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > > > & overload : overloads ) { + ext::set < ext::pair < ext::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, ext::vector < ext::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > > > > overloads = abstraction::Registry::listOverloads ( param ); + for ( const ext::pair < ext::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, ext::vector < ext::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > > > & overload : overloads ) { { - const std::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > > & result = overload.first; + const ext::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > > & result = overload.first; if ( std::get < 1 > ( result ).count ( abstraction::ParamQualifiers::ParamQualifier::CONST ) ) std::cout << "const "; @@ -34,7 +34,7 @@ public: } std::cout << " ("; bool first = true; - for ( const std::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > & parameter : overload.second ) { + for ( const ext::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > & parameter : overload.second ) { if ( first ) first = false; else diff --git a/alib2common/src/abstraction/AlgorithmRegistry.cpp b/alib2common/src/abstraction/AlgorithmRegistry.cpp index bd2dbac927..daf32b22b4 100644 --- a/alib2common/src/abstraction/AlgorithmRegistry.cpp +++ b/alib2common/src/abstraction/AlgorithmRegistry.cpp @@ -60,7 +60,7 @@ std::shared_ptr < abstraction::OperationAbstraction > AlgorithmRegistry::getAbst // determine how one can actually map what we have ( paramTypes ) as params to what is available as overloads ( group->second ) std::vector < std::pair < ext::vector < ext::tuple < MatchType, std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > > >, std::pair < std::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, std::shared_ptr < Entry > > > > compatibilityData; - for ( const std::pair < ext::vector < std::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > >, std::pair < std::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, std::shared_ptr < Entry > > > & entry : group->second ) { + for ( const ext::pair < 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 > > > & entry : group->second ) { if ( entry.first.size ( ) != paramTypes.size ( ) ) continue; @@ -148,32 +148,32 @@ std::shared_ptr < abstraction::OperationAbstraction > AlgorithmRegistry::getAbst return getAbstraction ( name, paramTypes, downcast, normalize ); } -std::set < std::string > AlgorithmRegistry::listGroup ( const std::string & group ) { - std::set < std::string > res; +ext::set < std::string > AlgorithmRegistry::listGroup ( const std::string & group ) { + ext::set < std::string > res; - for ( const std::pair < const std::string, ext::vector < std::pair < ext::vector < std::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > >, std::pair < std::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, std::shared_ptr < Entry > > > > > & entry : getEntries ( ) ) + for ( const std::pair < const std::string, ext::vector < ext::pair < 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 > > > > > & entry : getEntries ( ) ) if ( entry.first.find ( group ) == 0 ) //found at the begining res.insert ( entry.first ); return res; } -std::set < std::pair < std::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, ext::vector < std::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > > > > AlgorithmRegistry::listOverloads ( const std::string & algorithm ) { +ext::set < ext::pair < ext::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, ext::vector < ext::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > > > > AlgorithmRegistry::listOverloads ( const std::string & algorithm ) { auto group = getEntries ( ).find ( algorithm ); if ( group == getEntries ( ).end ( ) ) throw exception::CommonException ( "Entry " + algorithm + " not available" ); - std::set < std::pair < std::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, ext::vector < std::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > > > > res; - for ( const std::pair < ext::vector < std::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > >, std::pair < std::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, std::shared_ptr < Entry > > > & overloads : group->second ) - res.insert ( std::make_pair ( overloads.second.first, overloads.first ) ); + ext::set < ext::pair < ext::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, ext::vector < ext::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > > > > res; + for ( const ext::pair < 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 > > > & overloads : group->second ) + res.insert ( ext::make_pair ( overloads.second.first, overloads.first ) ); return res; } -std::set < std::string > AlgorithmRegistry::list ( ) { - std::set < std::string > res; +ext::set < std::string > AlgorithmRegistry::list ( ) { + ext::set < std::string > res; - for ( const std::pair < const std::string, ext::vector < std::pair < ext::vector < std::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > >, std::pair < std::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, std::shared_ptr < Entry > > > > > & entry : getEntries ( ) ) + for ( const std::pair < const std::string, ext::vector < ext::pair < 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 > > > > > & entry : getEntries ( ) ) res.insert ( entry.first ); return res; diff --git a/alib2common/src/abstraction/AlgorithmRegistry.hpp b/alib2common/src/abstraction/AlgorithmRegistry.hpp index 6b319e9ad1..c101136121 100644 --- a/alib2common/src/abstraction/AlgorithmRegistry.hpp +++ b/alib2common/src/abstraction/AlgorithmRegistry.hpp @@ -52,8 +52,8 @@ class AlgorithmRegistry { virtual std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( ) const override; }; - static ext::map < std::string, ext::vector < std::pair < ext::vector < std::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > >, std::pair < std::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, std::shared_ptr < Entry > > > > > & getEntries ( ) { - static ext::map < std::string, ext::vector < std::pair < ext::vector < std::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > >, std::pair < std::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, std::shared_ptr < Entry > > > > > algorithmGroups; + static ext::map < std::string, ext::vector < ext::pair < 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 < std::string, ext::vector < ext::pair < 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; }; @@ -70,29 +70,29 @@ public: std::string algorithm = ext::to_string < Algo > ( ); - ext::vector < std::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > > params; + ext::vector < ext::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > > params; unsigned i = 0; /* the evaluation order in initializer list is actually defined */ - ( void ) std::initializer_list < int > { ( params.push_back ( std::make_tuple ( ext::to_string < typename std::decay < ParamTypes >::type > ( ), abstraction::ParamQualifiers::paramQualifiers < ParamTypes > ( ), std::move ( paramNames [ i ++ ] ) ) ), 0 ) ... }; + ( void ) std::initializer_list < int > { ( params.push_back ( ext::make_tuple ( ext::to_string < typename std::decay < ParamTypes >::type > ( ), abstraction::ParamQualifiers::paramQualifiers < ParamTypes > ( ), std::move ( paramNames [ i ++ ] ) ) ), 0 ) ... }; auto & group = getEntries ( ) [ algorithm ]; - for ( const std::pair < ext::vector < std::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > >, std::pair < std::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, std::shared_ptr < Entry > > > & entry : group ) + for ( const ext::pair < 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 > > > & entry : group ) if ( entry.first == params ) throw exception::CommonException ( "Callback for " + algorithm + " already registered." ); - std::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > > result = std::make_pair ( ext::to_string < typename std::decay < ReturnType >::type > ( ), abstraction::ParamQualifiers::paramQualifiers < ReturnType > ( ) ); - std::pair < std::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, std::shared_ptr < Entry > > entryValue = std::make_pair ( std::move ( result ), std::make_shared < EntryImpl < ReturnType, ParamTypes ... > > ( callback, downcast, normalize ) ); - group.push_back ( std::make_pair ( params, entryValue ) ); + ext::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > > result = ext::make_pair ( ext::to_string < typename std::decay < ReturnType >::type > ( ), abstraction::ParamQualifiers::paramQualifiers < ReturnType > ( ) ); + ext::pair < ext::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, std::shared_ptr < Entry > > entryValue = ext::make_pair ( std::move ( result ), std::make_shared < EntryImpl < ReturnType, ParamTypes ... > > ( callback, downcast, normalize ) ); + group.push_back ( ext::make_pair ( params, entryValue ) ); } static std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( const std::string & name, const ext::vector < std::string > & paramTypes, bool & downcast, bool & normalize ); static std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( const std::string & name, const ext::vector < std::string > & paramTypes ); - static std::set < std::string > listGroup ( const std::string & group ); + static ext::set < std::string > listGroup ( const std::string & group ); - static std::set < std::pair < std::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, ext::vector < std::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > > > > listOverloads ( const std::string & algorithm ); + static ext::set < ext::pair < ext::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, ext::vector < ext::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > > > > listOverloads ( const std::string & algorithm ); - static std::set < std::string > list ( ); + static ext::set < std::string > list ( ); }; } /* namespace abstraction */ diff --git a/alib2common/src/abstraction/CastRegistry.cpp b/alib2common/src/abstraction/CastRegistry.cpp index fefc7e86e0..251ff90e4b 100644 --- a/alib2common/src/abstraction/CastRegistry.cpp +++ b/alib2common/src/abstraction/CastRegistry.cpp @@ -62,7 +62,7 @@ std::shared_ptr < abstraction::OperationAbstraction > CastRegistry::getAbstracti return getAbstraction ( target, param, normalize ); } -std::set < std::string > CastRegistry::listFrom ( const std::string & type ) { +ext::set < std::string > CastRegistry::listFrom ( const std::string & type ) { std::set < std::string > sourceTypes; if ( alib::namingApi::hasTypes ( type ) ) @@ -70,7 +70,7 @@ std::set < std::string > CastRegistry::listFrom ( const std::string & type ) { else sourceTypes.insert ( type ); - std::set < std::string > res; + ext::set < std::string > res; for ( const std::pair < const std::pair < std::string, std::string >, std::unique_ptr < Entry > > & entry : getEntries ( ) ) if ( sourceTypes.count ( entry.first.second ) ) @@ -79,7 +79,7 @@ std::set < std::string > CastRegistry::listFrom ( const std::string & type ) { return res; } -std::set < std::string > CastRegistry::listTo ( const std::string & type ) { +ext::set < std::string > CastRegistry::listTo ( const std::string & type ) { std::set < std::string > targetTypes; if ( alib::namingApi::hasTypes ( type ) ) @@ -87,7 +87,7 @@ std::set < std::string > CastRegistry::listTo ( const std::string & type ) { else targetTypes.insert ( type ); - std::set < std::string > res; + ext::set < std::string > res; for ( const std::pair < const std::pair < std::string, std::string >, std::unique_ptr < Entry > > & entry : getEntries ( ) ) if ( targetTypes.count ( entry.first.first ) ) @@ -96,11 +96,11 @@ std::set < std::string > CastRegistry::listTo ( const std::string & type ) { return res; } -std::set < std::pair < std::string, std::string > > CastRegistry::list ( ) { - std::set < std::pair < std::string, std::string > > res; +ext::set < ext::pair < std::string, std::string > > CastRegistry::list ( ) { + ext::set < ext::pair < std::string, std::string > > res; for ( const std::pair < const std::pair < std::string, std::string >, std::unique_ptr < Entry > > & entry : getEntries ( ) ) - res.insert ( std::make_pair ( entry.first.first, entry.first.second ) ); + res.insert ( ext::make_pair ( entry.first.first, entry.first.second ) ); return res; } diff --git a/alib2common/src/abstraction/CastRegistry.hpp b/alib2common/src/abstraction/CastRegistry.hpp index a666554656..09651e1208 100644 --- a/alib2common/src/abstraction/CastRegistry.hpp +++ b/alib2common/src/abstraction/CastRegistry.hpp @@ -109,11 +109,11 @@ public: static std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( const std::string & target, const std::string & param ); - static std::set < std::string > listFrom ( const std::string & type ); + static ext::set < std::string > listFrom ( const std::string & type ); - static std::set < std::string > listTo ( const std::string & type ); + static ext::set < std::string > listTo ( const std::string & type ); - static std::set < std::pair < std::string, std::string > > list ( ); + static ext::set < ext::pair < std::string, std::string > > list ( ); }; } /* namespace abstraction */ diff --git a/alib2common/src/abstraction/Registry.cpp b/alib2common/src/abstraction/Registry.cpp index aaf0cd8e7a..e45d6f808e 100644 --- a/alib2common/src/abstraction/Registry.cpp +++ b/alib2common/src/abstraction/Registry.cpp @@ -20,39 +20,39 @@ namespace abstraction { -std::set < std::string > Registry::listAlgorithmGroup ( const std::string & group ) { +ext::set < std::string > Registry::listAlgorithmGroup ( const std::string & group ) { return AlgorithmRegistry::listGroup ( group ); } -std::set < std::string > Registry::listAlgorithms ( ) { +ext::set < std::string > Registry::listAlgorithms ( ) { return AlgorithmRegistry::list ( ); } -std::set < std::string > Registry::listDataTypes ( ) { +ext::set < std::string > Registry::listDataTypes ( ) { return XmlFileWriterRegistry::list ( ); } -std::set < std::string > Registry::listDataTypeGroup ( const std::string & group ) { +ext::set < std::string > Registry::listDataTypeGroup ( const std::string & group ) { return XmlFileWriterRegistry::listGroup ( group ); } -std::set < std::string > Registry::listCastsFrom ( const std::string & type ) { +ext::set < std::string > Registry::listCastsFrom ( const std::string & type ) { return CastRegistry::listFrom ( type ); } -std::set < std::string > Registry::listCastsTo ( const std::string & type ) { +ext::set < std::string > Registry::listCastsTo ( const std::string & type ) { return CastRegistry::listTo ( type ); } -std::set < std::pair < std::string, std::string > > Registry::listCasts ( ) { +ext::set < ext::pair < std::string, std::string > > Registry::listCasts ( ) { return CastRegistry::list ( ); } -std::set < std::pair < std::string, std::set < std::string > > > Registry::listNames ( ) { +ext::set < ext::pair < std::string, ext::set < std::string > > > Registry::listNames ( ) { return alib::namingApi::list ( ); } -std::set < std::pair < std::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, ext::vector < std::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > > > > Registry::listOverloads ( const std::string & algorithm ) { +ext::set < ext::pair < ext::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, ext::vector < ext::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > > > > Registry::listOverloads ( const std::string & algorithm ) { return AlgorithmRegistry::listOverloads ( algorithm ); } diff --git a/alib2common/src/abstraction/Registry.h b/alib2common/src/abstraction/Registry.h index acd0ec78fc..32873ae54c 100644 --- a/alib2common/src/abstraction/Registry.h +++ b/alib2common/src/abstraction/Registry.h @@ -15,19 +15,19 @@ namespace abstraction { class Registry { public: - static std::set < std::string > listAlgorithmGroup ( const std::string & group ); - static std::set < std::string > listAlgorithms ( ); + static ext::set < std::string > listAlgorithmGroup ( const std::string & group ); + static ext::set < std::string > listAlgorithms ( ); - static std::set < std::string > listDataTypes ( ); - static std::set < std::string > listDataTypeGroup ( const std::string & group ); + static ext::set < std::string > listDataTypes ( ); + static ext::set < std::string > listDataTypeGroup ( const std::string & group ); - static std::set < std::string > listCastsFrom ( const std::string & type ); - static std::set < std::string > listCastsTo ( const std::string & type ); - static std::set < std::pair < std::string, std::string > > listCasts ( ); + static ext::set < std::string > listCastsFrom ( const std::string & type ); + static ext::set < std::string > listCastsTo ( const std::string & type ); + static ext::set < ext::pair < std::string, std::string > > listCasts ( ); - static std::set < std::pair < std::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, ext::vector < std::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > > > > listOverloads ( const std::string & algorithm ); + static ext::set < ext::pair < ext::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, ext::vector < ext::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > > > > listOverloads ( const std::string & algorithm ); - static std::set < std::pair < std::string, std::set < std::string > > > listNames ( ); + static ext::set < ext::pair < std::string, ext::set < std::string > > > listNames ( ); static std::shared_ptr < abstraction::OperationAbstraction > getAlgorithmAbstraction ( const std::string & name, const ext::vector < std::string > & paramTypes ); static std::shared_ptr < abstraction::OperationAbstraction > getAlgorithmAbstraction ( const std::string & name, const ext::vector < std::string > & paramTypes, bool & unwrap, bool & normalize ); diff --git a/alib2common/src/abstraction/XmlFileWriterRegistry.cpp b/alib2common/src/abstraction/XmlFileWriterRegistry.cpp index 83580202b5..c11c841e35 100644 --- a/alib2common/src/abstraction/XmlFileWriterRegistry.cpp +++ b/alib2common/src/abstraction/XmlFileWriterRegistry.cpp @@ -17,8 +17,8 @@ std::shared_ptr < abstraction::OperationAbstraction > XmlFileWriterRegistry::get return res->second->getAbstraction ( std::move ( filename ) ); } -std::set < std::string > XmlFileWriterRegistry::listGroup ( const std::string & group ) { - std::set < std::string > res; +ext::set < std::string > XmlFileWriterRegistry::listGroup ( const std::string & group ) { + ext::set < std::string > res; for ( const std::pair < const std::string, std::unique_ptr < Entry > > & entry : getEntries ( ) ) if ( entry.first.find ( group ) == 0 ) //found at the begining @@ -27,8 +27,8 @@ std::set < std::string > XmlFileWriterRegistry::listGroup ( const std::string & return res; } -std::set < std::string > XmlFileWriterRegistry::list ( ) { - std::set < std::string > res; +ext::set < std::string > XmlFileWriterRegistry::list ( ) { + ext::set < std::string > res; for ( const std::pair < const std::string, std::unique_ptr < Entry > > & entry : getEntries ( ) ) res.insert ( entry.first ); diff --git a/alib2common/src/abstraction/XmlFileWriterRegistry.hpp b/alib2common/src/abstraction/XmlFileWriterRegistry.hpp index 8034313d91..bca003992a 100644 --- a/alib2common/src/abstraction/XmlFileWriterRegistry.hpp +++ b/alib2common/src/abstraction/XmlFileWriterRegistry.hpp @@ -52,9 +52,9 @@ public: static std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( const std::string & param, std::string filename ); - static std::set < std::string > listGroup ( const std::string & group ); + static ext::set < std::string > listGroup ( const std::string & group ); - static std::set < std::string > list ( ); + static ext::set < std::string > list ( ); }; } /* namespace abstraction */ diff --git a/alib2common/src/abstraction/common/ParamQualifiers.cpp b/alib2common/src/abstraction/common/ParamQualifiers.cpp new file mode 100644 index 0000000000..b89878a262 --- /dev/null +++ b/alib2common/src/abstraction/common/ParamQualifiers.cpp @@ -0,0 +1,48 @@ +#include <abstraction/common/ParamQualifiers.hpp> + +namespace alib { + +abstraction::ParamQualifiers::ParamQualifier xmlApi < abstraction::ParamQualifiers::ParamQualifier >::parse ( ext::deque < sax::Token >::iterator & input ) { + sax::FromXMLParserHelper::popToken(input, sax::Token::TokenType::START_ELEMENT, xmlTagName ( ) ); + + std::string data = sax::FromXMLParserHelper::popTokenData(input, sax::Token::TokenType::CHARACTER); + abstraction::ParamQualifiers::ParamQualifier res = abstraction::ParamQualifiers::ParamQualifier::CONST; + if ( data == "lref" ) + res = abstraction::ParamQualifiers::ParamQualifier::LREF; + else if ( data == "rref" ) + res = abstraction::ParamQualifiers::ParamQualifier::RREF; + else if ( data == "const" ) + res = abstraction::ParamQualifiers::ParamQualifier::CONST; + else + throw exception::CommonException ( "Invalid param qualifier." ); + + sax::FromXMLParserHelper::popToken(input, sax::Token::TokenType::END_ELEMENT, xmlTagName ( ) ); + + return res; +} + +bool xmlApi < abstraction::ParamQualifiers::ParamQualifier >::first ( const ext::deque < sax::Token >::const_iterator & input ) { + return sax::FromXMLParserHelper::isToken(input, sax::Token::TokenType::START_ELEMENT, xmlTagName ( ) ); +} + +std::string xmlApi < abstraction::ParamQualifiers::ParamQualifier >::xmlTagName ( ) { + return "ParamQualifier"; +} + +void xmlApi < abstraction::ParamQualifiers::ParamQualifier >::compose ( ext::deque < sax::Token > & out, abstraction::ParamQualifiers::ParamQualifier paramQualifier ) { + out.emplace_back ( xmlTagName ( ), sax::Token::TokenType::START_ELEMENT); + switch ( paramQualifier ) { + case abstraction::ParamQualifiers::ParamQualifier::CONST: + out.emplace_back("const", sax::Token::TokenType::CHARACTER); + break; + case abstraction::ParamQualifiers::ParamQualifier::LREF: + out.emplace_back("lref", sax::Token::TokenType::CHARACTER); + break; + case abstraction::ParamQualifiers::ParamQualifier::RREF: + out.emplace_back("rref", sax::Token::TokenType::CHARACTER); + break; + } + out.emplace_back ( xmlTagName ( ), sax::Token::TokenType::END_ELEMENT); +} + +} /* namespace alib */ diff --git a/alib2common/src/abstraction/common/ParamQualifiers.hpp b/alib2common/src/abstraction/common/ParamQualifiers.hpp index ab729b9dd0..ed5b151384 100644 --- a/alib2common/src/abstraction/common/ParamQualifiers.hpp +++ b/alib2common/src/abstraction/common/ParamQualifiers.hpp @@ -3,6 +3,8 @@ #include <set> #include <type_traits> +#include <core/xmlApi.hpp> +#include <string> namespace abstraction { @@ -33,4 +35,16 @@ public: } /* namespace abstraction */ +namespace alib { + +template < > +struct xmlApi < abstraction::ParamQualifiers::ParamQualifier > { + static abstraction::ParamQualifiers::ParamQualifier parse ( ext::deque < sax::Token >::iterator & input ); + static bool first ( const ext::deque < sax::Token >::const_iterator & input ); + static std::string xmlTagName ( ); + static void compose ( ext::deque < sax::Token > & output, abstraction::ParamQualifiers::ParamQualifier ); +}; + +} /* namespace alib */ + #endif // _PARAM_QUALIFIERS_HPP_ diff --git a/alib2common/src/core/namingApi.hpp b/alib2common/src/core/namingApi.hpp index a9c7d1a3af..5aa707a74c 100644 --- a/alib2common/src/core/namingApi.hpp +++ b/alib2common/src/core/namingApi.hpp @@ -45,15 +45,15 @@ public: return name != getNames ( ).end ( ); } - static std::set < std::pair < std::string, std::set < std::string > > > list ( ) { - std::set < std::pair < std::string, std::set < std::string > > > res; + static ext::set < ext::pair < std::string, ext::set < std::string > > > list ( ) { + ext::set < ext::pair < std::string, ext::set < std::string > > > res; for ( const std::pair < const std::string, ext::set < ext::type_index > > & entry : getNames ( ) ) { - std::set < std::string > names; + ext::set < std::string > names; for ( const ext::type_index & name : entry.second ) names.insert ( ext::to_string ( name ) ); - res.insert ( std::make_pair ( entry.first, names ) ); + res.insert ( ext::make_pair ( entry.first, names ) ); } return res; -- GitLab