diff --git a/alib2aux/src/stats/SizeStat.cpp b/alib2aux/src/stats/SizeStat.cpp new file mode 100644 index 0000000000000000000000000000000000000000..64272f3ad1cdc71b106b42639c5a551832091893 --- /dev/null +++ b/alib2aux/src/stats/SizeStat.cpp @@ -0,0 +1,19 @@ +/* + * SetSizeStat.cpp + * + * Created on: 20. 9. 2014 + * Author: Jan Travnicek + */ + +#include "SizeStat.h" + +#include <container/ObjectsSet.h> + +#include <registration/AlgoRegistration.hpp> + +namespace { + +auto SizeStatObjectsSet = registration::AbstractRegister < stats::SizeStat, unsigned, const container::ObjectsSet < > & > ( stats::SizeStat::stat ); +auto SizeStatSetUnsigned = registration::AbstractRegister < stats::SizeStat, unsigned, const std::set < unsigned > & > ( stats::SizeStat::stat ); + +} diff --git a/alib2aux/src/stats/SizeStat.h b/alib2aux/src/stats/SizeStat.h new file mode 100644 index 0000000000000000000000000000000000000000..a914674c67115b3cb6b79680277d4ebcfca2079b --- /dev/null +++ b/alib2aux/src/stats/SizeStat.h @@ -0,0 +1,26 @@ +/* + * SizeStat.h + * + * Created on: 20. 9. 2014 + * Author: Jan Travnicek + */ + +#ifndef _SIZE_STAT_H_ +#define _SIZE_STAT_H_ + +namespace stats { + +class SizeStat { +public: + template < class T > + static unsigned stat ( const T & object ); +}; + +template < class T > +unsigned SizeStat::stat ( const T & object ) { + return object.size ( ); +} + +} + +#endif /* _SIZE_STAT_H_ */ diff --git a/alib2common/src/abstraction/PrimitiveRegistrator.cpp b/alib2common/src/abstraction/PrimitiveRegistrator.cpp index 04809c22b60f5a642bd6102179eff3007a092d55..85238acd0d9df2593d012f90d4c6ca1f99aeedda 100644 --- a/alib2common/src/abstraction/PrimitiveRegistrator.cpp +++ b/alib2common/src/abstraction/PrimitiveRegistrator.cpp @@ -43,6 +43,7 @@ public: abstraction::ContainerRegistry::registerSet < int > ( ); abstraction::ValuePrinterRegistry::registerValuePrinter < int > ( ); + abstraction::ValuePrinterRegistry::registerValuePrinter < unsigned > ( ); abstraction::ValuePrinterRegistry::registerValuePrinter < double > ( ); abstraction::ValuePrinterRegistry::registerValuePrinter < std::string > ( ); abstraction::ValuePrinterRegistry::registerValuePrinter < void > ( ); diff --git a/astat2/makefile.conf b/astat2/makefile.conf index d811d00b11d043f3f3adf1afa0426d7b09fed466..b42e68f476ae5de66ce0af3091400277f9b83392 100644 --- a/astat2/makefile.conf +++ b/astat2/makefile.conf @@ -1,4 +1,4 @@ EXECUTABLE:=astat2 -LINK_PATHS=../alib2cli/ ../alib2elgo/ ../alib2algo/ ../alib2str/ ../alib2data/ ../alib2xml/ ../alib2measure/ ../alib2common/ ../alib2std/ -LINK_LIBRARIES=alib2cli alib2elgo alib2algo alib2str alib2data alib2xml alib2measure alib2common alib2std xml2 -INCLUDE_PATHS=\$$(SOURCES_BASE_DIR)/../../alib2elgo/src/ \$$(SOURCES_BASE_DIR)/../../alib2algo/src/ \$$(SOURCES_BASE_DIR)/../../alib2data/src/ \$$(SOURCES_BASE_DIR)/../../alib2xml/src/ \$$(SOURCES_BASE_DIR)/../../alib2measure/src/ \$$(SOURCES_BASE_DIR)/../../alib2common/src/ \$$(SOURCES_BASE_DIR)/../../alib2std/src/ /usr/include/libxml2/ +LINK_PATHS=../alib2cli/ ../alib2str/ ../alib2aux/ ../alib2data/ ../alib2xml/ ../alib2measure/ ../alib2common/ ../alib2std/ +LINK_LIBRARIES=alib2cli alib2str alib2aux alib2data alib2xml alib2measure alib2common alib2std xml2 +INCLUDE_PATHS=\$$(SOURCES_BASE_DIR)/../../alib2cli/src/ \$$(SOURCES_BASE_DIR)/../../alib2xml/src/ \$$(SOURCES_BASE_DIR)/../../alib2measure/src/ \$$(SOURCES_BASE_DIR)/../../alib2common/src/ \$$(SOURCES_BASE_DIR)/../../alib2std/src/ /usr/include/libxml2/ diff --git a/astat2/src/SizeStat.cpp b/astat2/src/SizeStat.cpp deleted file mode 100644 index 1c8166680d906f9a7270fe4cb95a5d9997a531d1..0000000000000000000000000000000000000000 --- a/astat2/src/SizeStat.cpp +++ /dev/null @@ -1,19 +0,0 @@ -/* - * SizeStat.cpp - * - * Created on: 20. 9. 2014 - * Author: Jan Travnicek - */ - -#include "SizeStat.h" -#include <registration/AlgoRegistration.hpp> - -void SizeStat::stat ( const container::Container & container ) { - dispatch ( container.getData ( ) ); -} - -void SizeStat::stat ( const container::ObjectsSet < > & set ) { - std::cout << set.size ( ) << std::endl; -} - -auto SizeStatObjectsSet = registration::OverloadRegister < SizeStat, void, container::ObjectsSet < > > ( SizeStat::stat ); diff --git a/astat2/src/SizeStat.h b/astat2/src/SizeStat.h deleted file mode 100644 index ef3a0cd4fe1b306d5e294bfcb045e4a4d70361b1..0000000000000000000000000000000000000000 --- a/astat2/src/SizeStat.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * SizeStat.h - * - * Created on: 20. 9. 2014 - * Author: Jan Travnicek - */ - -#ifndef SIZE_STAT_H_ -#define SIZE_STAT_H_ - -#include <core/multipleDispatch.hpp> - -#include "container/Container.h" -#include "container/ObjectsSet.h" - -class SizeStat : public alib::SingleDispatch < SizeStat, void, const container::ContainerBase & > { -public: - static void stat ( const container::Container & container ); - static void stat ( const container::ObjectsSet < > & set ); -}; - -#endif /* SIZE_STAT_H_ */ diff --git a/astat2/src/astat.cpp b/astat2/src/astat.cpp index cbd8839df39a5da99cf35bdc688778e70b35149d..d39dc73aa3e0922ba15d70b6f3a9b101b4a19c80 100644 --- a/astat2/src/astat.cpp +++ b/astat2/src/astat.cpp @@ -8,19 +8,12 @@ #include <tclap/CmdLine.h> #include <global/GlobalData.h> #include <measure> -#include <vector> -#include <sax/FromXMLParserHelper.h> -#include <factory/XmlDataFactory.hpp> #include <exception/CommonException.h> +#include <lexer/Lexer.h> +#include <parser/Parser.h> -#include "SizeStat.h" - -template < class T > -void printStat ( const T & data, TCLAP::ValueArg < std::string > & presentation ) { - if ( presentation.getValue ( ) == "size" ) - SizeStat::stat ( data ); -} +#include <factory/XmlDataFactory.hpp> int main ( int argc, char * argv[] ) { try { @@ -32,7 +25,7 @@ int main ( int argc, char * argv[] ) { // ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- std::vector < std::string > allowedPrintingOptions { - "size", "unique_size" + "size" }; TCLAP::ValuesConstraint < std::string > allowedPrintingOptionsVals ( allowedPrintingOptions ); @@ -41,8 +34,8 @@ int main ( int argc, char * argv[] ) { // ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- - TCLAP::ValueArg < std::string > file ( "i", "input", "Read from file", false, "-", "file" ); - cmd.add ( file ); + TCLAP::ValueArg < std::string > input ( "i", "input", "Read from file", false, "-", "file" ); + cmd.add ( input ); TCLAP::SwitchArg measure ( "m", "measure", "Measure times", false ); cmd.add ( measure ); @@ -58,24 +51,32 @@ int main ( int argc, char * argv[] ) { if ( measure.isSet ( ) ) common::GlobalData::measure = true; + cli::Environment environment; + environment.setBinding ( "stdin", input.getValue ( ) ); + environment.setBinding ( "stdout", "-" ); + measurements::start ( "Overal", measurements::Type::OVERALL ); measurements::start ( "Input read", measurements::Type::AUXILIARY ); - ext::deque < sax::Token > tokens = sax::FromXMLParserHelper::parseInput ( file ); + cli::Parser parser ( cli::Lexer ( "execute <#stdin > $input" ) ); + parser.parse ( )->run ( environment ); - if ( alib::XmlDataFactory::first < container::Container > ( tokens ) ) { - container::Container data = alib::XmlDataFactory::fromTokens ( std::move ( tokens ) ); - - measurements::end ( ); - measurements::start ( "Stats print", measurements::Type::MAIN ); + measurements::end ( ); + measurements::start ( "Algorithm", measurements::Type::MAIN ); - printStat ( data, presentation ); - } else { - throw exception::CommonException ( "Input not recognized." ); + if ( presentation.getValue ( ) == "size" ) { + parser = cli::Parser ( cli::Lexer ( "execute stats::SizeStat $input > $output" ) ); + parser.parse ( )->run ( environment ); } measurements::end ( ); - measurements::end ( ); + measurements::start ( "Output write", measurements::Type::AUXILIARY ); + + parser = cli::Parser ( cli::Lexer ( "execute $output" ) ); + parser.parse ( )->run ( environment ); + + measurements::end(); + measurements::end(); if ( measure.getValue ( ) ) common::Streams::measure << measurements::results ( ) << std::endl;