From 38e53b4fb700378a70bea9fca24492a08f4aa92a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Radovan=20=C4=8Cerven=C3=BD?= <radovan.cerveny@gmail.com> Date: Fri, 5 Feb 2016 16:29:17 +0100 Subject: [PATCH] modified adeterminize2 to use new measurements, introduced helper for convenient tool env setup --- adeterminize2/src/adeterminize.cpp | 29 +++++----- .../src/measurements/MeasurementCmdLine.hpp | 58 +++++++++++++++++++ 2 files changed, 74 insertions(+), 13 deletions(-) create mode 100644 alib2algo/src/measurements/MeasurementCmdLine.hpp diff --git a/adeterminize2/src/adeterminize.cpp b/adeterminize2/src/adeterminize.cpp index b0491cd0bf..c5f8ae615a 100644 --- a/adeterminize2/src/adeterminize.cpp +++ b/adeterminize2/src/adeterminize.cpp @@ -13,6 +13,9 @@ #include "exception/AlibException.h" #include "automaton/determinize/Determinize.h" +#include "measurements/measurements.hpp" +#include "measurements/MeasurementCmdLine.hpp" + int main(int argc, char** argv) { try { TCLAP::CmdLine cmd("Automaton determinize binary", ' ', "0.01"); @@ -20,21 +23,21 @@ int main(int argc, char** argv) { TCLAP::ValueArg<std::string> input( "i", "input", "Automaton to determinize", false, "-", "file"); cmd.add( input ); - TCLAP::SwitchArg measure( "m", "measure", "Measure times", false); - cmd.add( measure ); + measurements::MeasurementCmdLine::setupTCLAPArgs(cmd); TCLAP::SwitchArg verbose( "v", "verbose", "Be verbose", false); cmd.add( verbose ); cmd.parse(argc, argv); + measurements::MeasurementCmdLine::setupGlobalData(); + if(verbose.isSet()) common::GlobalData::verbose = true; - if(measure.isSet()) - common::GlobalData::measure = true; - std::chrono::measurements::start("Overal", std::chrono::measurements::Type::OVERALL); - std::chrono::measurements::start("Input read", std::chrono::measurements::Type::AUXILARY); + + measurements::start("Overal", measurements::Type::OVERALL); + measurements::start("Input read", measurements::Type::AUXILIARY); std::deque<sax::Token> tokens; if(input.isSet()) { @@ -49,20 +52,20 @@ int main(int argc, char** argv) { automaton::Automaton automaton = alib::XmlDataFactory::fromTokens<automaton::Automaton>(tokens); - std::chrono::measurements::end(); - std::chrono::measurements::start("Algorithm", std::chrono::measurements::Type::MAIN); + measurements::end(); + measurements::start("Algorithm", measurements::Type::MAIN); automaton::Automaton res = automaton::determinize::Determinize::determinize(automaton); - std::chrono::measurements::end(); - std::chrono::measurements::start("Output write", std::chrono::measurements::Type::AUXILARY); + measurements::end(); + measurements::start("Output write", measurements::Type::AUXILIARY); alib::XmlDataFactory::toStdout(res); - std::chrono::measurements::end(); - std::chrono::measurements::end(); + measurements::end(); + measurements::end(); - if(measure.getValue()) std::clog << std::chrono::measurements::results() << std::endl; + measurements::MeasurementCmdLine::outputMeasurements(); return 0; } catch (const exception::AlibException& exception) { diff --git a/alib2algo/src/measurements/MeasurementCmdLine.hpp b/alib2algo/src/measurements/MeasurementCmdLine.hpp new file mode 100644 index 0000000000..cda34b4122 --- /dev/null +++ b/alib2algo/src/measurements/MeasurementCmdLine.hpp @@ -0,0 +1,58 @@ +/* + * Author: Radovan Cerveny + */ + +#ifndef MEASUREMENT_CMD_LINE_HPP_ +#define MEASUREMENT_CMD_LINE_HPP_ + +#include <tclap/CmdLine.h> +#include <common/GlobalData.h> +#include <vector> +#include "sax/SaxComposeInterface.h" +#include "measurements.hpp" +#include "MeasurementResults.hpp" + +namespace measurements { + +class MeasurementCmdLine { + TCLAP::SwitchArg measure; + + std::vector< std::string > measurementOutputOptions; + TCLAP::ValuesConstraint< std::string > measurementOutputOptionsVals; + TCLAP::ValueArg< std::string > measurementOutput; + + MeasurementCmdLine ( ) : measure ( "m", "measure", "Measure times", false ), + measurementOutputOptions{"list", "tree", "xml"}, + measurementOutputOptionsVals ( measurementOutputOptions ), + measurementOutput ( "", "measurement-output", "How to output measurement data", false, "list", &measurementOutputOptionsVals ) {} + + static MeasurementCmdLine INSTANCE; + +public: + static void setupTCLAPArgs ( TCLAP::CmdLine& cmd ) { + cmd.add ( INSTANCE.measure ); + cmd.add ( INSTANCE.measurementOutput ); + } + + static void setupGlobalData ( ) { + if ( INSTANCE.measure.isSet ( ) ) + common::GlobalData::measure = true; + } + + static void outputMeasurements ( ) { + if ( INSTANCE.measure.getValue ( ) ) { + const std::string& output = INSTANCE.measurementOutput.getValue ( ); + if ( output == "list" ) + std::clog << measurements::MeasurementFormat::LIST << measurements::results ( ) << std::endl; + else if ( output == "tree" ) + std::clog << measurements::MeasurementFormat::TREE << measurements::results ( ) << std::endl; + else if ( output == "xml" ) + std::clog << measurements::MeasurementFormat::XML << measurements::results ( ) << std::endl; + } + } +}; + +MeasurementCmdLine MeasurementCmdLine::INSTANCE; +} + +#endif /* MEASUREMENT_CMD_LINE_HPP_ */ -- GitLab