refactor: extract lib_timer

This commit is contained in:
Michael Mandl 2024-03-20 21:12:33 +01:00
parent 14dbf00775
commit 10b19749f7
Signed by: mandlm
GPG key ID: 4AA25D647AA54CC7
8 changed files with 433 additions and 4 deletions

12
lib_timer/CMakeLists.txt Normal file
View file

@ -0,0 +1,12 @@
cmake_minimum_required(VERSION 3.20)
project(
timer
VERSION 0.1.0
LANGUAGES CXX)
add_library(timer STATIC src/timer.cpp include/timer.h)
target_include_directories(timer PUBLIC ${PROJECT_SOURCE_DIR}/include)
target_compile_features(timer PUBLIC cxx_std_20)

20
lib_timer/include/timer.h Normal file
View file

@ -0,0 +1,20 @@
#pragma once
#include <chrono>
#include <ostream>
class Timer {
private:
std::chrono::time_point<std::chrono::high_resolution_clock> start_;
std::chrono::time_point<std::chrono::high_resolution_clock> end_;
public:
Timer();
void start();
void stop();
long us() const;
};
std::ostream &operator<<(std::ostream &os, const Timer &timer);

32
lib_timer/src/timer.cpp Normal file
View file

@ -0,0 +1,32 @@
#include "timer.h"
#include <chrono>
Timer::Timer() { start(); };
void Timer::start() { start_ = std::chrono::high_resolution_clock::now(); }
void Timer::stop() { end_ = std::chrono::high_resolution_clock::now(); }
long Timer::us() const {
return std::chrono::duration_cast<std::chrono::microseconds>(end_ - start_)
.count();
}
std::ostream &operator<<(std::ostream &os, const Timer &timer) {
long time = timer.us();
if (time >= 1e6) {
os << time / static_cast<long>(1e6) << " s ";
time %= static_cast<long>(1e6);
}
if (time >= 1e3) {
os << time / static_cast<long>(1e3) << " ms ";
time %= static_cast<long>(1e3);
}
os << time << " µs";
return os;
}