clean-code/VectorFiller/atlas/time/time.h

29 lines
561 B
C++

// -*- mode: c++ -*-
#pragma once
namespace atlas::time {
template <typename Duration>
class Timer {
public:
using duration_type = Duration;
virtual ~Timer() = default;
virtual auto start() -> void = 0;
virtual auto elapsed() const -> duration_type;
template <typename T>
struct TimerResult {
T value;
duration_type duration;
};
template <typename F>
[[nodiscard]] auto measure(F&& f) -> TimerResult<decltype(f())>
{
start();
auto v = f();
return { v, elapsed() };
}
};
}