From f2aae448eb0da3d5d1d20bb4d50e7e8bb6b2e76f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Radovan=20=C4=8Cerven=C3=BD?= <radovan.cerveny@gmail.com>
Date: Tue, 2 Feb 2016 17:37:57 +0100
Subject: [PATCH] introduced type alias for stl containers to avoid memory
 tracking polution

---
 alib2algo/src/measurements/MeasurementEngine.cpp     |  7 ++++---
 alib2algo/src/measurements/MeasurementEngine.hpp     |  2 +-
 alib2algo/src/measurements/MeasurementFrames.hpp     | 11 ++++++-----
 alib2algo/src/measurements/MeasurementTypes.hpp      |  6 ++++++
 alib2algo/src/measurements/measurements.hpp          |  2 +-
 alib2algo/test-src/measurements/MeasurementsTest.cpp | 10 ++++++----
 6 files changed, 24 insertions(+), 14 deletions(-)

diff --git a/alib2algo/src/measurements/MeasurementEngine.cpp b/alib2algo/src/measurements/MeasurementEngine.cpp
index c33e023013..444de100d6 100644
--- a/alib2algo/src/measurements/MeasurementEngine.cpp
+++ b/alib2algo/src/measurements/MeasurementEngine.cpp
@@ -12,7 +12,7 @@ MeasurementEngine::MeasurementEngine ( ) {
 	reset_measurements ( );
 }
 
-void MeasurementEngine::push_measurement_frame ( std::string frame_name, measurements::Type frame_type ) {
+void MeasurementEngine::push_measurement_frame ( measurements::stealth_string frame_name, measurements::Type frame_type ) {
 	unsigned parent_idx = frame_idx_stack.back ( );
 
 	frames.emplace_back ( std::move ( frame_name ), frame_type, parent_idx );
@@ -20,6 +20,7 @@ void MeasurementEngine::push_measurement_frame ( std::string frame_name, measure
 	unsigned current_idx = frames.size ( ) - 1;
 
 	frames[parent_idx].sub_idxs.push_back ( current_idx );
+
 	frame_idx_stack.push_back ( current_idx );
 
 	TimeDataFrame::init ( current_idx, frames );
@@ -39,7 +40,7 @@ void MeasurementEngine::reset_measurements ( ) {
 	frames.clear ( );
 	frame_idx_stack.clear ( );
 
-	frames.emplace_back ( std::move ( "Root" ), measurements::Type::ROOT, 0 );
+	frames.emplace_back ( "Root", measurements::Type::ROOT, 0 );
 	frame_idx_stack.push_back ( 0 );
 }
 
@@ -53,7 +54,7 @@ void MeasurementEngine::print_as_list ( std::ostream & os, unsigned idx ) {
 	MeasurementFrame & frame = frames[idx];
 
 	if ( frame.type != measurements::Type::ROOT ) {
-		os << std::make_tuple ( frame.name, frame.type, frame.parent_idx, frame.sub_idxs, frame.time.to_string ( ), frame.memory.to_string ( ) );
+		os << std::make_tuple ( frame.name, frame.type, frame.parent_idx, frame.time.to_string ( ), frame.memory.to_string ( ) );
 
 		if ( idx != frames.size ( ) - 1 )
 			os << ", ";
diff --git a/alib2algo/src/measurements/MeasurementEngine.hpp b/alib2algo/src/measurements/MeasurementEngine.hpp
index f45419bda9..5f9cb5067a 100644
--- a/alib2algo/src/measurements/MeasurementEngine.hpp
+++ b/alib2algo/src/measurements/MeasurementEngine.hpp
@@ -20,7 +20,7 @@ class MeasurementEngine {
 	void print_as_list ( std::ostream &, unsigned );
 
 public:
-	void push_measurement_frame ( std::string, measurements::Type );
+	void push_measurement_frame ( measurements::stealth_string, measurements::Type );
 	void pop_measurement_frame ( );
 	void reset_measurements ( );
 
diff --git a/alib2algo/src/measurements/MeasurementFrames.hpp b/alib2algo/src/measurements/MeasurementFrames.hpp
index 1d02d63341..6de3fa3d2a 100644
--- a/alib2algo/src/measurements/MeasurementFrames.hpp
+++ b/alib2algo/src/measurements/MeasurementFrames.hpp
@@ -53,15 +53,16 @@ struct TimeDataFrame {
 };
 
 struct MeasurementFrame {
-	std::string				 name;
-	measurements::Type		 type;
-	unsigned				 parent_idx;
-	std::vector < unsigned > sub_idxs;
+	measurements::stealth_string name;
+	measurements::Type			 type;
+	unsigned					 parent_idx;
+
+	measurements::stealth_vector < unsigned > sub_idxs;
 
 	TimeDataFrame	time;
 	MemoryDataFrame memory;
 
-	MeasurementFrame ( std::string && name, measurements::Type type, unsigned parent_idx ) : name ( name ), type ( type ), parent_idx ( parent_idx ) { }
+	MeasurementFrame ( measurements::stealth_string name, measurements::Type type, unsigned parent_idx ) : name ( std::move ( name ) ), type ( type ), parent_idx ( parent_idx ), time ( ), memory ( ) { }
 };
 
 }
diff --git a/alib2algo/src/measurements/MeasurementTypes.hpp b/alib2algo/src/measurements/MeasurementTypes.hpp
index d5f2cfecd8..2cadf27159 100644
--- a/alib2algo/src/measurements/MeasurementTypes.hpp
+++ b/alib2algo/src/measurements/MeasurementTypes.hpp
@@ -6,6 +6,7 @@
 #define MEASUREMENT_TYPES_HPP_
 
 #include <memory>
+#include <vector>
 #include "MeasurementNew.hpp"
 
 namespace measurements {
@@ -35,8 +36,13 @@ public:
 
 	template < typename U >
 	struct rebind { using other = stealth_allocator < U >; };
+
 };
 
+using stealth_string = std::basic_string < char, std::char_traits < char >, stealth_allocator < char > >;
+
+template < typename T >
+using stealth_vector = std::vector < T, stealth_allocator < T > >;
 }
 
 #endif /* MEASUREMENT_TYPES_HPP_ */
diff --git a/alib2algo/src/measurements/measurements.hpp b/alib2algo/src/measurements/measurements.hpp
index 47c7cba0e1..6d5c162820 100644
--- a/alib2algo/src/measurements/measurements.hpp
+++ b/alib2algo/src/measurements/measurements.hpp
@@ -9,7 +9,7 @@
 
 namespace measurements {
 
-void start ( std::string name, measurements::Type type ) {
+void start ( measurements::stealth_string name, measurements::Type type ) {
 	MeasurementEngine::INSTANCE.push_measurement_frame ( std::move ( name ), type );
 }
 
diff --git a/alib2algo/test-src/measurements/MeasurementsTest.cpp b/alib2algo/test-src/measurements/MeasurementsTest.cpp
index 5a93d292f9..28a7d9ca62 100644
--- a/alib2algo/test-src/measurements/MeasurementsTest.cpp
+++ b/alib2algo/test-src/measurements/MeasurementsTest.cpp
@@ -45,15 +45,17 @@ void MeasurementsTest::testTimeMeasurements ( ) {
 void MeasurementsTest::testMemoryMeasurements ( ) {
 
 	measurements::start ( "chunk1", measurements::Type::MAIN );
+	int * baz = new int[500];
+	delete[] baz;
 	measurements::end ( );
 
 	measurements::start ( "chunk2", measurements::Type::MAIN );
-		int * foo = new int[500];
+		int * foo = new int[1000];
 		measurements::start ( "chunk21", measurements::Type::MAIN );
-			int * bar = new int[500];
+			int * bar = new int[2000];
 		measurements::end ( );
-		delete foo;
-		delete bar;
+		delete[] foo;
+		delete[] bar;
 	measurements::end ( );
 
 	measurements::print_as_list ( std::cout );
-- 
GitLab