From 5c0c280aa4a820ea98ba615cb22a29c1c20f3b16 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:28:48 +0100
Subject: [PATCH] added output formatting

---
 .../src/measurements/MeasurementResults.cpp     | 17 ++++++++++++++++-
 .../src/measurements/MeasurementResults.hpp     | 15 +++++++++++++++
 .../test-src/measurements/MeasurementsTest.cpp  | 12 ++++++------
 3 files changed, 37 insertions(+), 7 deletions(-)

diff --git a/alib2algo/src/measurements/MeasurementResults.cpp b/alib2algo/src/measurements/MeasurementResults.cpp
index 01ea0d03e5..dfd9d5a50d 100644
--- a/alib2algo/src/measurements/MeasurementResults.cpp
+++ b/alib2algo/src/measurements/MeasurementResults.cpp
@@ -104,9 +104,24 @@ void MeasurementResults::print_as_tree ( std::ostream & os, unsigned idx, std::s
 	}
 }
 
+const int MeasurementXalloc::FORMAT = std::ios::xalloc ( );
+
 std::ostream & operator <<( std::ostream & os, const MeasurementResults & mr ) {
+	MeasurementFormat mf = static_cast < MeasurementFormat > ( os.iword ( MeasurementXalloc::FORMAT ) );
+
+	switch ( mf ) {
+	case MeasurementFormat::LIST:
+		mr.print_as_list ( os );
+		break;
 
-	mr.print_as_tree ( os );
+	case MeasurementFormat::TREE:
+		mr.print_as_tree ( os );
+		break;
+
+	case MeasurementFormat::XML:
+		sax::SaxComposeInterface::printStream ( os, mr.xml_tokens ( ) );
+		break;
+	}
 
 	return os;
 }
diff --git a/alib2algo/src/measurements/MeasurementResults.hpp b/alib2algo/src/measurements/MeasurementResults.hpp
index 4a7dd5f450..56b6653426 100644
--- a/alib2algo/src/measurements/MeasurementResults.hpp
+++ b/alib2algo/src/measurements/MeasurementResults.hpp
@@ -12,6 +12,14 @@
 
 namespace measurements {
 
+enum class MeasurementFormat {
+	LIST = 1, TREE = 2,	XML = 4
+};
+
+struct MeasurementXalloc {
+	static const int FORMAT;
+};
+
 struct MeasurementResults {
 	measurements::stealth_vector < MeasurementFrame > frames;
 
@@ -28,6 +36,13 @@ private:
 };
 
 std::ostream & operator <<( std::ostream &, const MeasurementResults & );
+
+template < typename _CharT, typename _Traits >
+inline std::basic_ostream < _CharT, _Traits > & operator <<( std::basic_ostream < _CharT, _Traits > & x, MeasurementFormat f ) {
+	x.iword ( MeasurementXalloc::FORMAT ) = static_cast < int > ( f );
+	return x;
+}
+
 }
 
 #endif /* MEASUREMENT_RESULTS_HPP_ */
diff --git a/alib2algo/test-src/measurements/MeasurementsTest.cpp b/alib2algo/test-src/measurements/MeasurementsTest.cpp
index 9bc30fc45e..59f8ca8383 100644
--- a/alib2algo/test-src/measurements/MeasurementsTest.cpp
+++ b/alib2algo/test-src/measurements/MeasurementsTest.cpp
@@ -58,9 +58,9 @@ void MeasurementsTest::testTimeMeasurements ( ) {
 	measurements::end ( );
 	measurements::end ( );
 
-	std::cout << measurements::results ( ) << std::endl;
-
-	sax::SaxComposeInterface::printStdout ( measurements::results ( ).xml_tokens ( ) );
+	std::cout << measurements::MeasurementFormat::LIST << measurements::results ( ) << std::endl;
+	std::cout << measurements::MeasurementFormat::TREE << measurements::results ( ) << std::endl;
+	std::cout << measurements::MeasurementFormat::XML << measurements::results ( ) << std::endl;
 }
 
 void MeasurementsTest::testMemoryMeasurements ( ) {
@@ -80,7 +80,7 @@ void MeasurementsTest::testMemoryMeasurements ( ) {
 	delete[] bar;
 	measurements::end ( );
 
-	std::cout << measurements::results ( ) << std::endl;
-
-	sax::SaxComposeInterface::printStdout ( measurements::results ( ).xml_tokens ( ) );
+	std::cout << measurements::MeasurementFormat::LIST << measurements::results ( ) << std::endl;
+	std::cout << measurements::MeasurementFormat::TREE << measurements::results ( ) << std::endl;
+	std::cout << measurements::MeasurementFormat::XML << measurements::results ( ) << std::endl;
 }
-- 
GitLab