From 7354e96eebb96b9e6f834213bb41024b7bd7c52e Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Thu, 3 Aug 2017 10:42:43 +0200 Subject: [PATCH] make instrospection able to list groups of algos --- alib2cli/src/command/IntrospectionCommand.h | 10 ++++++---- alib2common/src/abstraction/AlgorithmRegistry.hpp | 7 +++++++ alib2common/src/abstraction/Registry.cpp | 4 ++++ alib2common/src/abstraction/Registry.h | 1 + 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/alib2cli/src/command/IntrospectionCommand.h b/alib2cli/src/command/IntrospectionCommand.h index e205304609..bd3599f5f3 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 1f8289913c..d0be14f639 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 3602f5c326..7cdcba289f 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 af45365e53..6a511e1ebb 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 ( ); -- GitLab