#ifndef FSFW_TIMEMANAGER_STOPWATCH_H_ #define FSFW_TIMEMANAGER_STOPWATCH_H_ #include "Clock.h" enum class StopwatchDisplayMode { MILLIS, SECONDS }; /** * @brief Simple Stopwatch implementation to measure elapsed time * @details * This class can be used to measure elapsed times. It also displays elapsed * times automatically on destruction if not explicitely deactivated in the * constructor. The default time format is the elapsed time in miliseconds * in seconds as a double. * @author R. Mueller */ class Stopwatch { public: /** * Default constructor. Call "Stopwatch stopwatch" without brackets if * no parameters are required! * @param displayOnDestruction If set to true, displays measured time on * object destruction * @param displayMode Display format is either MS rounded or MS as double * format * @param outputPrecision If using double format, specify precision here. */ Stopwatch(bool displayOnDestruction = true, StopwatchDisplayMode displayMode = StopwatchDisplayMode::MILLIS); virtual~ Stopwatch(); /** * Caches the start time */ void start(); /** * Calculates the elapsed time since start and returns it * @return elapsed time in milliseconds (rounded) */ dur_millis_t stop(bool display = false); /** * Calculates the elapsed time since start and returns it * @return elapsed time in seconds (double precision) */ double stopSeconds(); /** * Displays the elapsed times on the osstream, depending on internal display * mode. */ void display(); StopwatchDisplayMode getDisplayMode() const; void setDisplayMode(StopwatchDisplayMode displayMode); bool displayOnDestruction = true; private: timeval startTime {0, 0}; timeval elapsedTime {0, 0}; StopwatchDisplayMode displayMode = StopwatchDisplayMode::MILLIS; void stopInternal(); }; #endif /* FSFW_TIMEMANAGER_STOPWATCH_H_ */