#ifndef DATETIME_TIMER_HPP__ #define DATETIME_TIMER_HPP__ template class timer { public: typedef timer_traits traits_type; typedef typename timer_traits::time_rep time_rep; typedef typename timer_traits::time_duration_type time_duration_type; timer () : running(false), started_at(timer_traits::init_zero()), total_elapsed(0,0,0,0) {} bool is_running() const { return running; } void start() { if (!running) { running = true; started_at = timer_traits::get_current_time(); } } time_duration_type elapsed() const { if (!running) { return total_elapsed; } return total_elapsed + timer_traits::make_time_duration(started_at, timer_traits::get_current_time()); } void stop() { if (running) { running = false; total_elapsed = total_elapsed + timer_traits::make_time_duration(started_at, timer_traits::get_current_time()); } } void restart() { clear_elapsed(); running = true; started_at = timer_traits::get_current_time(); } void clear_elapsed() { total_elapsed = time_duration_type(0,0,0,0); } private: bool running; time_rep started_at; time_duration_type total_elapsed; }; #endif