diff --git a/alib2algo/src/measurements/MeasurementEngine.hpp b/alib2algo/src/measurements/MeasurementEngine.hpp index 85961b7eca5d1aab6dbafdff3390221549880975..f9b9b815d28a953a311c1059b19d893d986c3888 100644 --- a/alib2algo/src/measurements/MeasurementEngine.hpp +++ b/alib2algo/src/measurements/MeasurementEngine.hpp @@ -5,6 +5,7 @@ #ifndef MEASUREMENT_ENGINE_HPP_ #define MEASUREMENT_ENGINE_HPP_ +#include <ostream> #include "MeasurementTypes.hpp" namespace measurements { @@ -13,7 +14,11 @@ class MeasurementEngine { public: virtual void push_measurement_frame ( std::string, measurements::Type ) = 0; virtual void pop_measurement_frame ( ) = 0; - virtual void get_results ( ) = 0; + + virtual void print_as_list ( std::ostream & ) = 0; + virtual void print_as_tree ( std::ostream & ) = 0; + virtual void print_as_xml ( std::ostream & ) = 0; + virtual ~MeasurementEngine ( ) = default; }; diff --git a/alib2algo/src/measurements/Measurements.cpp b/alib2algo/src/measurements/Measurements.cpp index c0cdd8012ee1d589772f0bcf4ee57f725e815a5f..c81a45ab6fe174379209c92251a64e1748ef2c90 100644 --- a/alib2algo/src/measurements/Measurements.cpp +++ b/alib2algo/src/measurements/Measurements.cpp @@ -40,9 +40,9 @@ void Measurements::end ( ) { me->pop_measurement_frame ( ); } -void Measurements::print ( ) { +void Measurements::print ( std::ostream & os ) { for ( auto me : INSTANCE.measurement_engines ) - me->get_results ( ); + me->print_as_list ( os ); } } diff --git a/alib2algo/src/measurements/Measurements.hpp b/alib2algo/src/measurements/Measurements.hpp index 05b3761ededc56d8e2fbfb022b4dd4427c13274a..07b6e5885a43e4d0d7115fcc5ef0dd9bb43ce53c 100644 --- a/alib2algo/src/measurements/Measurements.hpp +++ b/alib2algo/src/measurements/Measurements.hpp @@ -5,12 +5,12 @@ #ifndef MEASUREMENTS_HPP_ #define MEASUREMENTS_HPP_ +#include <ostream> #include <string> #include <vector> #include "MeasurementTypes.hpp" #include "MeasurementEngine.hpp" - namespace measurements { class Measurements { @@ -26,7 +26,7 @@ private: public: static void start ( std::string, measurements::Type ); static void end ( ); - static void print ( ); + static void print ( std::ostream & ); }; } diff --git a/alib2algo/src/measurements/TimeMeasurementEngine.cpp b/alib2algo/src/measurements/TimeMeasurementEngine.cpp index 212db55b33570408b9f19e4dd97a9defa26ea3b2..126599dfaacf277d43fcc13ef3fc5555423f2568 100644 --- a/alib2algo/src/measurements/TimeMeasurementEngine.cpp +++ b/alib2algo/src/measurements/TimeMeasurementEngine.cpp @@ -34,16 +34,26 @@ void TimeMeasurementEngine::pop_measurement_frame ( ) { results.emplace_back ( std::move ( current_frame ) ); } -void TimeMeasurementEngine::get_results ( ) { - for ( auto frame : results ) { - std::cout << frame.frame_name << std::endl; - std::cout << frame.duration << ' ' << frame.real_duration << std::endl; +void TimeMeasurementEngine::print_as_list ( std::ostream & os ) { + print_as_list ( os, results.size ( ) - 1 ); + os << std::endl; +} - for ( unsigned idx : frame.sub_frames ) - std::cout << idx << ' '; +void TimeMeasurementEngine::print_as_list ( std::ostream & os, unsigned idx ) { + TimeMeasurementFrame & tmf = results[idx]; - std::cout << std::endl; - } + if ( idx != results.size ( ) - 1 ) os << ", "; + + os << std::make_tuple ( idx, tmf.frame_name, ( unsigned ) tmf.frame_type, tmf.duration, tmf.real_duration, tmf.sub_frames ); + + for ( unsigned sub_idx : tmf.sub_frames ) + print_as_list ( os, sub_idx ); +} + +void TimeMeasurementEngine::print_as_tree ( std::ostream & ) { +} + +void TimeMeasurementEngine::print_as_xml ( std::ostream & ) { } } diff --git a/alib2algo/src/measurements/TimeMeasurementEngine.hpp b/alib2algo/src/measurements/TimeMeasurementEngine.hpp index f15e9bda1c7be670eeb2b930c43ed2bc10b13889..053568a1fee7b11144ee0c77744d274ab1d76678 100644 --- a/alib2algo/src/measurements/TimeMeasurementEngine.hpp +++ b/alib2algo/src/measurements/TimeMeasurementEngine.hpp @@ -8,6 +8,7 @@ #include <string> #include <chrono> #include <vector> +#include <ostream> #include "MeasurementEngine.hpp" namespace measurements { @@ -27,10 +28,15 @@ private: std::vector < TimeMeasurementFrame > frames; std::vector < TimeMeasurementFrame > results; + void print_as_list ( std::ostream &, unsigned ); + public: void push_measurement_frame ( std::string, measurements::Type ); void pop_measurement_frame ( ); - void get_results ( ); + + void print_as_list ( std::ostream & ); + void print_as_tree ( std::ostream & ); + void print_as_xml ( std::ostream & ); }; } diff --git a/alib2algo/test-src/measurements/MeasurementsTest.cpp b/alib2algo/test-src/measurements/MeasurementsTest.cpp index 6bbc1c540d8107462d92c9a5c2935deb8c2190f9..b42318da27b16444c6dd7c9a2b755dac02bdb0f1 100644 --- a/alib2algo/test-src/measurements/MeasurementsTest.cpp +++ b/alib2algo/test-src/measurements/MeasurementsTest.cpp @@ -36,5 +36,6 @@ void MeasurementsTest::testMeasurements ( ) { std::this_thread::sleep_for ( std::chrono::milliseconds ( 80 ) ); measurements::Measurements::end ( ); measurements::Measurements::end ( ); - measurements::Measurements::print ( ); + + measurements::Measurements::print ( std::cout ); }