From 3064fc6085f61637834dacb50603e91367dd01de Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Radovan=20=C4=8Cerven=C3=BD?= <radovan.cerveny@gmail.com>
Date: Sat, 13 Feb 2016 00:46:20 +0100
Subject: [PATCH] separated custom frames into folder, used explicit template
 instantiation for hints

---
 .../src/measurements/MeasurementEngine.cpp    | 15 +--
 .../src/measurements/MeasurementEngine.hpp    |  2 +-
 .../src/measurements/MeasurementFrame.cpp     |  2 +-
 .../src/measurements/MeasurementFrame.hpp     | 37 +++++++
 .../src/measurements/MeasurementFrames.hpp    | 97 -------------------
 .../src/measurements/MeasurementResults.hpp   |  2 +-
 .../{ => frames}/CounterDataFrame.cpp         |  2 +-
 .../measurements/frames/CounterDataFrame.hpp  | 42 ++++++++
 .../{ => frames}/MemoryDataFrame.cpp          |  2 +-
 .../measurements/frames/MemoryDataFrame.hpp   | 43 ++++++++
 .../{ => frames}/TimeDataFrame.cpp            |  2 +-
 .../src/measurements/frames/TimeDataFrame.hpp | 32 ++++++
 .../src/measurements/measurements.cpp         | 14 +--
 13 files changed, 167 insertions(+), 125 deletions(-)
 create mode 100644 alib2measure/src/measurements/MeasurementFrame.hpp
 delete mode 100644 alib2measure/src/measurements/MeasurementFrames.hpp
 rename alib2measure/src/measurements/{ => frames}/CounterDataFrame.cpp (99%)
 create mode 100644 alib2measure/src/measurements/frames/CounterDataFrame.hpp
 rename alib2measure/src/measurements/{ => frames}/MemoryDataFrame.cpp (98%)
 create mode 100644 alib2measure/src/measurements/frames/MemoryDataFrame.hpp
 rename alib2measure/src/measurements/{ => frames}/TimeDataFrame.cpp (98%)
 create mode 100644 alib2measure/src/measurements/frames/TimeDataFrame.hpp

diff --git a/alib2measure/src/measurements/MeasurementEngine.cpp b/alib2measure/src/measurements/MeasurementEngine.cpp
index 24b4e744f5..0615258d58 100644
--- a/alib2measure/src/measurements/MeasurementEngine.cpp
+++ b/alib2measure/src/measurements/MeasurementEngine.cpp
@@ -60,18 +60,13 @@ MeasurementResults MeasurementEngine::get_results ( ) const {
 	return MeasurementResults ( frames );
 }
 
-template < >
-void MeasurementEngine::hint ( MemoryHint mh ) {
+template < typename Hint >
+void MeasurementEngine::hint ( Hint hint ) {
 	if ( ( frame_idx_stack.size ( ) == 0 ) || ( frames[frame_idx_stack.back ( )].type == measurements::Type::ROOT ) ) return;
 
-	MemoryDataFrame::hint ( frame_idx_stack.back ( ), frames, std::move ( mh ) );
-}
-
-template < >
-void MeasurementEngine::hint ( CounterHint ch ) {
-	if ( ( frame_idx_stack.size ( ) == 0 ) || ( frames[frame_idx_stack.back ( )].type == measurements::Type::ROOT ) ) return;
-
-	CounterDataFrame::hint ( frame_idx_stack.back ( ), frames, std::move ( ch ) );
+	Hint::frame_type::hint ( frame_idx_stack.back ( ), frames, std::move ( hint ) );
 }
 
+template void MeasurementEngine::hint < MemoryHint > ( MemoryHint );
+template void MeasurementEngine::hint < CounterHint > ( CounterHint );
 }
diff --git a/alib2measure/src/measurements/MeasurementEngine.hpp b/alib2measure/src/measurements/MeasurementEngine.hpp
index fafe143787..721e101060 100644
--- a/alib2measure/src/measurements/MeasurementEngine.hpp
+++ b/alib2measure/src/measurements/MeasurementEngine.hpp
@@ -6,7 +6,7 @@
 #define MEASUREMENT_ENGINE_HPP_
 
 #include "MeasurementTypes.hpp"
-#include "MeasurementFrames.hpp"
+#include "MeasurementFrame.hpp"
 #include "MeasurementResults.hpp"
 
 namespace measurements {
diff --git a/alib2measure/src/measurements/MeasurementFrame.cpp b/alib2measure/src/measurements/MeasurementFrame.cpp
index 31198ad79b..31a8d9b1a4 100644
--- a/alib2measure/src/measurements/MeasurementFrame.cpp
+++ b/alib2measure/src/measurements/MeasurementFrame.cpp
@@ -3,7 +3,7 @@
  */
 
 #include <sstream>
-#include "MeasurementFrames.hpp"
+#include "MeasurementFrame.hpp"
 
 namespace measurements {
 
diff --git a/alib2measure/src/measurements/MeasurementFrame.hpp b/alib2measure/src/measurements/MeasurementFrame.hpp
new file mode 100644
index 0000000000..02d423dc24
--- /dev/null
+++ b/alib2measure/src/measurements/MeasurementFrame.hpp
@@ -0,0 +1,37 @@
+/*
+ * Author: Radovan Cerveny
+ */
+
+#ifndef MEASUREMENT_FRAME_HPP_
+#define MEASUREMENT_FRAME_HPP_
+
+#include <chrono>
+#include <sstream>
+#include <deque>
+#include "sax/Token.h"
+#include "MeasurementTypes.hpp"
+#include "frames/TimeDataFrame.hpp"
+#include "frames/MemoryDataFrame.hpp"
+#include "frames/CounterDataFrame.hpp"
+
+namespace measurements {
+
+struct MeasurementFrame {
+	measurements::stealth_string name;
+	measurements::Type			 type;
+	unsigned					 parent_idx;
+
+	measurements::stealth_vector < unsigned > sub_idxs;
+
+	TimeDataFrame	 time;
+	MemoryDataFrame	 memory;
+	CounterDataFrame counter;
+
+	MeasurementFrame ( measurements::stealth_string, measurements::Type, unsigned );
+	static void xml_tokens ( std::deque < sax::Token > &, unsigned, const measurements::stealth_vector < MeasurementFrame > & );
+};
+
+std::ostream & operator <<( std::ostream &, const MeasurementFrame & );
+}
+
+#endif /* MEASUREMENT_FRAME_HPP_ */
diff --git a/alib2measure/src/measurements/MeasurementFrames.hpp b/alib2measure/src/measurements/MeasurementFrames.hpp
deleted file mode 100644
index ac1d1a7bec..0000000000
--- a/alib2measure/src/measurements/MeasurementFrames.hpp
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Author: Radovan Cerveny
- */
-
-#ifndef MEASUREMENT_FRAME_HPP_
-#define MEASUREMENT_FRAME_HPP_
-
-#include <chrono>
-#include <sstream>
-#include <deque>
-#include "sax/Token.h"
-#include "MeasurementTypes.hpp"
-
-namespace measurements {
-
-struct MeasurementFrame;
-
-struct CounterHint {
-	using value_type = long long int;
-	enum class Type {
-		ADD, SUB, INC, DEC
-	};
-
-	measurements::stealth_string name;
-	Type						 type;
-	value_type					 value;
-};
-
-struct CounterDataFrame {
-	measurements::stealth_map < measurements::stealth_string, CounterHint::value_type > counters;
-	measurements::stealth_map < measurements::stealth_string, CounterHint::value_type > real_counters;
-
-	static void init ( unsigned, measurements::stealth_vector < MeasurementFrame > & );
-	static void update ( unsigned, measurements::stealth_vector < MeasurementFrame > & );
-	static void hint ( unsigned, measurements::stealth_vector < MeasurementFrame > &, CounterHint );
-	static void xml_tokens ( std::deque < sax::Token > &, unsigned, const measurements::stealth_vector < MeasurementFrame > & );
-};
-
-std::ostream & operator <<( std::ostream &, const CounterDataFrame & );
-
-struct MemoryHint {
-	enum class Type {
-		NEW, DELETE
-	};
-
-	Type   type;
-	size_t size;
-};
-
-struct MemoryDataFrame {
-	size_t start_heap_usage;
-	size_t end_heap_usage;
-	size_t high_watermark;
-
-	size_t current_heap_usage;
-
-	static void init ( unsigned, measurements::stealth_vector < MeasurementFrame > & );
-	static void update ( unsigned, measurements::stealth_vector < MeasurementFrame > & );
-	static void hint ( unsigned, measurements::stealth_vector < MeasurementFrame > &, MemoryHint );
-	static void xml_tokens ( std::deque < sax::Token > &, unsigned, const measurements::stealth_vector < MeasurementFrame > & );
-};
-
-std::ostream & operator <<( std::ostream &, const MemoryDataFrame & );
-
-struct TimeDataFrame {
-	std::chrono::time_point < std::chrono::high_resolution_clock > start;
-
-	std::chrono::microseconds duration;
-	std::chrono::microseconds real_duration;
-
-	static void init ( unsigned, measurements::stealth_vector < MeasurementFrame > & );
-	static void update ( unsigned, measurements::stealth_vector < MeasurementFrame > & );
-	static void xml_tokens ( std::deque < sax::Token > &, unsigned, const measurements::stealth_vector < MeasurementFrame > & );
-};
-
-std::ostream & operator <<( std::ostream &, const std::chrono::microseconds & );
-std::ostream & operator <<( std::ostream &, const TimeDataFrame & );
-
-struct MeasurementFrame {
-	measurements::stealth_string name;
-	measurements::Type			 type;
-	unsigned					 parent_idx;
-
-	measurements::stealth_vector < unsigned > sub_idxs;
-
-	TimeDataFrame	 time;
-	MemoryDataFrame	 memory;
-	CounterDataFrame counter;
-
-	MeasurementFrame ( measurements::stealth_string, measurements::Type, unsigned );
-	static void xml_tokens ( std::deque < sax::Token > &, unsigned, const measurements::stealth_vector < MeasurementFrame > & );
-};
-
-std::ostream & operator <<( std::ostream &, const MeasurementFrame & );
-}
-
-#endif /* MEASUREMENT_FRAME_HPP_ */
diff --git a/alib2measure/src/measurements/MeasurementResults.hpp b/alib2measure/src/measurements/MeasurementResults.hpp
index 2b8517fb47..699e1e019b 100644
--- a/alib2measure/src/measurements/MeasurementResults.hpp
+++ b/alib2measure/src/measurements/MeasurementResults.hpp
@@ -8,7 +8,7 @@
 #include <ostream>
 #include "sax/SaxComposeInterface.h"
 #include "MeasurementTypes.hpp"
-#include "MeasurementFrames.hpp"
+#include "MeasurementFrame.hpp"
 
 namespace measurements {
 
diff --git a/alib2measure/src/measurements/CounterDataFrame.cpp b/alib2measure/src/measurements/frames/CounterDataFrame.cpp
similarity index 99%
rename from alib2measure/src/measurements/CounterDataFrame.cpp
rename to alib2measure/src/measurements/frames/CounterDataFrame.cpp
index bc58f63a3a..9355be32e7 100644
--- a/alib2measure/src/measurements/CounterDataFrame.cpp
+++ b/alib2measure/src/measurements/frames/CounterDataFrame.cpp
@@ -2,7 +2,7 @@
  * Author: Radovan Cerveny
  */
 
-#include "MeasurementFrames.hpp"
+#include "../MeasurementFrame.hpp"
 
 namespace measurements {
 
diff --git a/alib2measure/src/measurements/frames/CounterDataFrame.hpp b/alib2measure/src/measurements/frames/CounterDataFrame.hpp
new file mode 100644
index 0000000000..f2e3bf3b48
--- /dev/null
+++ b/alib2measure/src/measurements/frames/CounterDataFrame.hpp
@@ -0,0 +1,42 @@
+/*
+ * Author: Radovan Cerveny
+ */
+
+#ifndef COUNTER_DATA_FRAME_HPP_
+#define COUNTER_DATA_FRAME_HPP_
+
+#include <deque>
+#include "sax/Token.h"
+#include "../MeasurementTypes.hpp"
+
+namespace measurements {
+
+struct MeasurementFrame;
+struct CounterDataFrame;
+
+struct CounterHint {
+	using frame_type = CounterDataFrame;
+	using value_type = long long int;
+	enum class Type {
+		ADD, SUB, INC, DEC
+	};
+
+	measurements::stealth_string name;
+	Type						 type;
+	value_type					 value;
+};
+
+struct CounterDataFrame {
+	measurements::stealth_map < measurements::stealth_string, CounterHint::value_type > counters;
+	measurements::stealth_map < measurements::stealth_string, CounterHint::value_type > real_counters;
+
+	static void init ( unsigned, measurements::stealth_vector < MeasurementFrame > & );
+	static void update ( unsigned, measurements::stealth_vector < MeasurementFrame > & );
+	static void hint ( unsigned, measurements::stealth_vector < MeasurementFrame > &, CounterHint );
+	static void xml_tokens ( std::deque < sax::Token > &, unsigned, const measurements::stealth_vector < MeasurementFrame > & );
+};
+
+std::ostream & operator <<( std::ostream &, const CounterDataFrame & );
+}
+
+#endif /* COUNTER_DATA_FRAME_HPP_ */
diff --git a/alib2measure/src/measurements/MemoryDataFrame.cpp b/alib2measure/src/measurements/frames/MemoryDataFrame.cpp
similarity index 98%
rename from alib2measure/src/measurements/MemoryDataFrame.cpp
rename to alib2measure/src/measurements/frames/MemoryDataFrame.cpp
index a30185a0e4..37fe201ce1 100644
--- a/alib2measure/src/measurements/MemoryDataFrame.cpp
+++ b/alib2measure/src/measurements/frames/MemoryDataFrame.cpp
@@ -2,7 +2,7 @@
  * Author: Radovan Cerveny
  */
 
-#include "MeasurementFrames.hpp"
+#include "../MeasurementFrame.hpp"
 
 namespace measurements {
 
diff --git a/alib2measure/src/measurements/frames/MemoryDataFrame.hpp b/alib2measure/src/measurements/frames/MemoryDataFrame.hpp
new file mode 100644
index 0000000000..91f45516ae
--- /dev/null
+++ b/alib2measure/src/measurements/frames/MemoryDataFrame.hpp
@@ -0,0 +1,43 @@
+/*
+ * Author: Radovan Cerveny
+ */
+
+#ifndef MEMORY_DATA_FRAME_HPP_
+#define MEMORY_DATA_FRAME_HPP_
+
+#include <deque>
+#include "sax/Token.h"
+#include "../MeasurementTypes.hpp"
+
+namespace measurements {
+
+struct MeasurementFrame;
+struct MemoryDataFrame;
+
+struct MemoryHint {
+	using frame_type = MemoryDataFrame;
+	enum class Type {
+		NEW, DELETE
+	};
+
+	Type   type;
+	size_t size;
+};
+
+struct MemoryDataFrame {
+	size_t start_heap_usage;
+	size_t end_heap_usage;
+	size_t high_watermark;
+
+	size_t current_heap_usage;
+
+	static void init ( unsigned, measurements::stealth_vector < MeasurementFrame > & );
+	static void update ( unsigned, measurements::stealth_vector < MeasurementFrame > & );
+	static void hint ( unsigned, measurements::stealth_vector < MeasurementFrame > &, MemoryHint );
+	static void xml_tokens ( std::deque < sax::Token > &, unsigned, const measurements::stealth_vector < MeasurementFrame > & );
+};
+
+std::ostream & operator <<( std::ostream &, const MemoryDataFrame & );
+}
+
+#endif /* MEMORY_DATA_FRAME_HPP_ */
diff --git a/alib2measure/src/measurements/TimeDataFrame.cpp b/alib2measure/src/measurements/frames/TimeDataFrame.cpp
similarity index 98%
rename from alib2measure/src/measurements/TimeDataFrame.cpp
rename to alib2measure/src/measurements/frames/TimeDataFrame.cpp
index 7d39cb51c9..ea46d97582 100644
--- a/alib2measure/src/measurements/TimeDataFrame.cpp
+++ b/alib2measure/src/measurements/frames/TimeDataFrame.cpp
@@ -3,7 +3,7 @@
  */
 
 #include <sstream>
-#include "MeasurementFrames.hpp"
+#include "../MeasurementFrame.hpp"
 
 using namespace std::chrono;
 
diff --git a/alib2measure/src/measurements/frames/TimeDataFrame.hpp b/alib2measure/src/measurements/frames/TimeDataFrame.hpp
new file mode 100644
index 0000000000..5213c1a10d
--- /dev/null
+++ b/alib2measure/src/measurements/frames/TimeDataFrame.hpp
@@ -0,0 +1,32 @@
+/*
+ * Author: Radovan Cerveny
+ */
+
+#ifndef TIME_DATA_FRAME_HPP_
+#define TIME_DATA_FRAME_HPP_
+
+#include <chrono>
+#include <deque>
+#include "sax/Token.h"
+#include "../MeasurementTypes.hpp"
+
+namespace measurements {
+
+struct MeasurementFrame;
+
+struct TimeDataFrame {
+	std::chrono::time_point < std::chrono::high_resolution_clock > start;
+
+	std::chrono::microseconds duration;
+	std::chrono::microseconds real_duration;
+
+	static void init ( unsigned, measurements::stealth_vector < MeasurementFrame > & );
+	static void update ( unsigned, measurements::stealth_vector < MeasurementFrame > & );
+	static void xml_tokens ( std::deque < sax::Token > &, unsigned, const measurements::stealth_vector < MeasurementFrame > & );
+};
+
+std::ostream & operator <<( std::ostream &, const std::chrono::microseconds & );
+std::ostream & operator <<( std::ostream &, const TimeDataFrame & );
+}
+
+#endif /* TIME_DATA_FRAME_HPP_ */
diff --git a/alib2measure/src/measurements/measurements.cpp b/alib2measure/src/measurements/measurements.cpp
index 906abcd190..8c3ca967ee 100644
--- a/alib2measure/src/measurements/measurements.cpp
+++ b/alib2measure/src/measurements/measurements.cpp
@@ -34,16 +34,6 @@ void hint ( Hint hint ) {
 		MeasurementEngine::INSTANCE.hint ( std::move ( hint ) );
 }
 
-template < >
-void hint ( MemoryHint hint ) {
-	if ( MeasurementEngine::OPERATIONAL )
-		MeasurementEngine::INSTANCE.hint ( std::move ( hint ) );
-}
-
-template < >
-void hint ( CounterHint hint ) {
-	if ( MeasurementEngine::OPERATIONAL )
-		MeasurementEngine::INSTANCE.hint ( std::move ( hint ) );
-}
-
+template void hint < MemoryHint > ( MemoryHint );
+template void hint < CounterHint > ( CounterHint );
 }
-- 
GitLab