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