diff --git a/alib2cli/src/command/IntrospectionCommand.h b/alib2cli/src/command/IntrospectionCommand.h index e205304609883a444a4942b4733ab54cc51962e4..bd3599f5f36798213a09466bc5bc77f50bcb6960 100644 --- a/alib2cli/src/command/IntrospectionCommand.h +++ b/alib2cli/src/command/IntrospectionCommand.h @@ -7,17 +7,19 @@ namespace cli { class IntrospectionCommand : public Command { - std::string m_algorithm; + std::string m_param; public: - IntrospectionCommand ( std::string algorithm ) : m_algorithm ( std::move ( algorithm ) ) { + IntrospectionCommand ( std::string param ) : m_param ( std::move ( param ) ) { } virtual Command::Result run ( Environment & ) const override { - if ( m_algorithm == "" ) { + if ( m_param == "" ) { abstraction::Registry::listAlgorithms ( ); + } else if ( m_param.find ( "::", m_param.size ( ) - 2 ) != std::string::npos ) { + abstraction::Registry::listGroup ( m_param ); } else { - abstraction::Registry::listAlgorithmOverloads ( m_algorithm ); + abstraction::Registry::listAlgorithmOverloads ( m_param ); } return Command::Result::OK; } diff --git a/alib2common/src/abstraction/AlgorithmRegistry.hpp b/alib2common/src/abstraction/AlgorithmRegistry.hpp index 1f8289913cf3970ac57733406f3ec94727edabc4..d0be14f639f5cd7d3d1d9e20f8283fe062e46c0c 100644 --- a/alib2common/src/abstraction/AlgorithmRegistry.hpp +++ b/alib2common/src/abstraction/AlgorithmRegistry.hpp @@ -103,6 +103,13 @@ public: return getAbstraction ( std::move ( name ), paramTypes, downcast, normalize ); } + static void listGroup ( const std::string & group ) { + for ( const std::pair < const std::string, std::map < std::vector < std::type_index >, std::unique_ptr < Entry > > > & entry : getEntries ( ) ) { + if ( entry.first.find ( group ) == 0 ) //found at the begining + std::cout << entry.first << std::endl; + } + } + static void listOverloads ( const std::string & algorithm ) { auto group = getEntries ( ).find ( algorithm ); if ( group == getEntries ( ).end ( ) ) diff --git a/alib2common/src/abstraction/Registry.cpp b/alib2common/src/abstraction/Registry.cpp index 3602f5c32649db92380e1357aa101ac13cebc11f..7cdcba289f68c868312d952c3698a1341692dc81 100644 --- a/alib2common/src/abstraction/Registry.cpp +++ b/alib2common/src/abstraction/Registry.cpp @@ -18,6 +18,10 @@ namespace abstraction { +void Registry::listGroup ( const std::string & group ) { + AlgorithmRegistry::listGroup ( group ); +} + void Registry::listAlgorithmOverloads ( const std::string & algorithm ) { AlgorithmRegistry::listOverloads ( algorithm ); } diff --git a/alib2common/src/abstraction/Registry.h b/alib2common/src/abstraction/Registry.h index af45365e53f795e62ff58a738a914e264aceb126..6a511e1ebb083a2ece2d5570a372ffdfdbddef1b 100644 --- a/alib2common/src/abstraction/Registry.h +++ b/alib2common/src/abstraction/Registry.h @@ -14,6 +14,7 @@ namespace abstraction { class Registry { public: + static void listGroup ( const std::string & algorithm ); static void listAlgorithmOverloads ( const std::string & algorithm ); static void listAlgorithms ( );