From 15f4431c90ddcd2b08ff215afb7822f0a0eaf875 Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Wed, 23 Aug 2017 21:51:16 +0200 Subject: [PATCH] better summary xml --- aintrospection2/src/aintrospection.cpp | 105 ++++++++++++++++++++----- 1 file changed, 85 insertions(+), 20 deletions(-) diff --git a/aintrospection2/src/aintrospection.cpp b/aintrospection2/src/aintrospection.cpp index 5ff3c52532..bd7b8231ba 100644 --- a/aintrospection2/src/aintrospection.cpp +++ b/aintrospection2/src/aintrospection.cpp @@ -12,13 +12,7 @@ #include <exception/CommonException.h> #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> +#include <factory/XmlDataFactory.hpp> int main ( int argc, char * argv[] ) { try { @@ -90,19 +84,90 @@ int main ( int argc, char * argv[] ) { 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 ); + ext::deque < sax::Token > tokens; + + tokens.emplace_back("Summary", sax::Token::TokenType::START_ELEMENT); + tokens.emplace_back("Casts", sax::Token::TokenType::START_ELEMENT); + for ( const ext::pair < std::string, std::string > & cast : abstraction::Registry::listCasts ( ) ) { + tokens.emplace_back("Cast", sax::Token::TokenType::START_ELEMENT); + tokens.emplace_back("From", sax::Token::TokenType::START_ELEMENT); + tokens.emplace_back(cast.second, sax::Token::TokenType::CHARACTER); + tokens.emplace_back("From", sax::Token::TokenType::END_ELEMENT); + tokens.emplace_back("To", sax::Token::TokenType::START_ELEMENT); + tokens.emplace_back(cast.first, sax::Token::TokenType::CHARACTER); + tokens.emplace_back("To", sax::Token::TokenType::END_ELEMENT); + tokens.emplace_back("Cast", sax::Token::TokenType::END_ELEMENT); + } + tokens.emplace_back("Casts", sax::Token::TokenType::END_ELEMENT); + tokens.emplace_back("Algorithms", sax::Token::TokenType::START_ELEMENT); + for ( const std::string & algo : abstraction::Registry::listAlgorithms ( ) ) { + tokens.emplace_back("Algorithm", sax::Token::TokenType::START_ELEMENT); + tokens.emplace_back("Name", sax::Token::TokenType::START_ELEMENT); + tokens.emplace_back(algo, sax::Token::TokenType::CHARACTER); + tokens.emplace_back("Name", sax::Token::TokenType::END_ELEMENT); + tokens.emplace_back("Overloads", sax::Token::TokenType::START_ELEMENT); + 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 > > > & over : abstraction::Registry::listOverloads ( algo ) ) { + tokens.emplace_back("Overload", sax::Token::TokenType::START_ELEMENT); + tokens.emplace_back("Returns", sax::Token::TokenType::START_ELEMENT); + tokens.emplace_back("Type", sax::Token::TokenType::START_ELEMENT); + tokens.emplace_back(over.first.first, sax::Token::TokenType::CHARACTER); + tokens.emplace_back("Type", sax::Token::TokenType::END_ELEMENT); + tokens.emplace_back("Qualifications", sax::Token::TokenType::START_ELEMENT); + for ( abstraction::ParamQualifiers::ParamQualifier qualifier : over.first.second ) { + tokens.emplace_back ( "Qualifier", sax::Token::TokenType::START_ELEMENT); + switch ( qualifier ) { + case abstraction::ParamQualifiers::ParamQualifier::CONST: + tokens.emplace_back("const", sax::Token::TokenType::CHARACTER); + break; + case abstraction::ParamQualifiers::ParamQualifier::LREF: + tokens.emplace_back("lref", sax::Token::TokenType::CHARACTER); + break; + case abstraction::ParamQualifiers::ParamQualifier::RREF: + tokens.emplace_back("rref", sax::Token::TokenType::CHARACTER); + break; + } + tokens.emplace_back ( "Qualifier", sax::Token::TokenType::END_ELEMENT); + } + tokens.emplace_back("Qualifications", sax::Token::TokenType::END_ELEMENT); + tokens.emplace_back("Returns", sax::Token::TokenType::END_ELEMENT); + tokens.emplace_back("Params", sax::Token::TokenType::START_ELEMENT); + for ( const ext::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > & param : over.second ) { + tokens.emplace_back("Param", sax::Token::TokenType::START_ELEMENT); + tokens.emplace_back("Type", sax::Token::TokenType::START_ELEMENT); + tokens.emplace_back(std::get < 0 > ( param ), sax::Token::TokenType::CHARACTER); + tokens.emplace_back("Type", sax::Token::TokenType::END_ELEMENT); + tokens.emplace_back("Qualifications", sax::Token::TokenType::START_ELEMENT); + for ( abstraction::ParamQualifiers::ParamQualifier qualifier : std::get < 1 > ( param ) ) { + tokens.emplace_back ( "Qualifier", sax::Token::TokenType::START_ELEMENT); + switch ( qualifier ) { + case abstraction::ParamQualifiers::ParamQualifier::CONST: + tokens.emplace_back("const", sax::Token::TokenType::CHARACTER); + break; + case abstraction::ParamQualifiers::ParamQualifier::LREF: + tokens.emplace_back("lref", sax::Token::TokenType::CHARACTER); + break; + case abstraction::ParamQualifiers::ParamQualifier::RREF: + tokens.emplace_back("rref", sax::Token::TokenType::CHARACTER); + break; + } + tokens.emplace_back ( "Qualifier", sax::Token::TokenType::END_ELEMENT); + } + tokens.emplace_back("Qualifications", sax::Token::TokenType::END_ELEMENT); + tokens.emplace_back("Name", sax::Token::TokenType::START_ELEMENT); + tokens.emplace_back(std::get < 2 > ( param ), sax::Token::TokenType::CHARACTER); + tokens.emplace_back("Name", sax::Token::TokenType::END_ELEMENT); + tokens.emplace_back("Param", sax::Token::TokenType::END_ELEMENT); + } + tokens.emplace_back("Params", sax::Token::TokenType::END_ELEMENT); + tokens.emplace_back("Overload", sax::Token::TokenType::END_ELEMENT); + } + tokens.emplace_back("Overloads", sax::Token::TokenType::END_ELEMENT); + tokens.emplace_back("Algorithm", sax::Token::TokenType::END_ELEMENT); + } + tokens.emplace_back("Algorithms", sax::Token::TokenType::END_ELEMENT); + tokens.emplace_back("Summary", sax::Token::TokenType::END_ELEMENT); + + sax::SaxComposeInterface::printStdout ( tokens ); } measurements::end ( ); -- GitLab