diff --git a/alib2algo/src/measurements/MeasurementTypes.hpp b/alib2algo/src/measurements/MeasurementTypes.hpp index a1332e8665cc276196570aac2a526035282a5e76..4b2890eb2b4c1f60021def7cb24d6d3b12d89dc3 100644 --- a/alib2algo/src/measurements/MeasurementTypes.hpp +++ b/alib2algo/src/measurements/MeasurementTypes.hpp @@ -5,12 +5,19 @@ #ifndef MEASUREMENT_TYPES_HPP_ #define MEASUREMENT_TYPES_HPP_ +#include <memory> + namespace measurements { enum Type { OVERALL = 1, INIT = 2, FINALIZE = 4, MAIN = 8, AUXILIARY = 16 }; +template < typename T, typename ... Args > +std::unique_ptr < T > make_unique ( Args && ... args ) { + return std::unique_ptr < T > ( new T ( std::forward < Args > ( args ) ... ) ); +} + } #endif /* MEASUREMENT_TYPES_HPP_ */ diff --git a/alib2algo/src/measurements/Measurements.cpp b/alib2algo/src/measurements/Measurements.cpp index c81a45ab6fe174379209c92251a64e1748ef2c90..43f776a541cfa6dc44b347d6481c2ae5d3635913 100644 --- a/alib2algo/src/measurements/Measurements.cpp +++ b/alib2algo/src/measurements/Measurements.cpp @@ -13,14 +13,8 @@ Measurements Measurements::INSTANCE; /** * constructs all available measurement engines */ -Measurements::Measurements ( ) : measurement_engines ( { - new TimeMeasurementEngine ( ) - } ) { -} - -Measurements::~Measurements ( ) { - for ( auto me : measurement_engines ) - delete me; +Measurements::Measurements ( ) { + measurement_engines.emplace_back ( measurements::make_unique < TimeMeasurementEngine > ( ) ); } /** @@ -28,7 +22,7 @@ Measurements::~Measurements ( ) { * @param block_name */ void Measurements::start ( std::string block_name, measurements::Type type ) { - for ( auto me : INSTANCE.measurement_engines ) + for ( auto & me : INSTANCE.measurement_engines ) me->push_measurement_frame ( block_name, type ); } @@ -36,12 +30,12 @@ void Measurements::start ( std::string block_name, measurements::Type type ) { * pops the block from the measurements stack */ void Measurements::end ( ) { - for ( auto me : INSTANCE.measurement_engines ) + for ( auto & me : INSTANCE.measurement_engines ) me->pop_measurement_frame ( ); } void Measurements::print ( std::ostream & os ) { - for ( auto me : INSTANCE.measurement_engines ) + for ( auto & me : INSTANCE.measurement_engines ) me->print_as_list ( os ); } diff --git a/alib2algo/src/measurements/Measurements.hpp b/alib2algo/src/measurements/Measurements.hpp index 07b6e5885a43e4d0d7115fcc5ef0dd9bb43ce53c..1542a8b92046f273c1b71f08a1b8fa65214faeca 100644 --- a/alib2algo/src/measurements/Measurements.hpp +++ b/alib2algo/src/measurements/Measurements.hpp @@ -15,10 +15,9 @@ namespace measurements { class Measurements { private: - std::vector < MeasurementEngine * > measurement_engines; + std::vector < std::unique_ptr < MeasurementEngine > > measurement_engines; Measurements ( ); - ~Measurements ( ); private: static Measurements INSTANCE;