15template <
typename Time = std::chrono::microseconds,
typename Clock = std::chrono::high_resolution_clock>
17 mutable std::mutex mtx;
18 typename Clock::time_point start_time;
19 typename Clock::time_point end_time;
21 explicit progress() : start_time(Clock::now()), end_time(start_time) {}
30 template <
typename F,
typename... Args,
typename Duration = Time>
35 auto result = std::invoke(std::forward<F>(f), std::forward<Args>(
args)...);
38 return Duration::zero();
46 void start() noexcept {
47 std::lock_guard<std::mutex> lock(this->mtx);
48 start_time = end_time = Clock::now();
52 void reset() noexcept {
59 template <
typename T =
double>
61 std::lock_guard<std::mutex> lock(this->mtx);
62 end_time = Clock::now();
63 return static_cast<T
>(std::chrono::duration_cast<Time>(end_time - start_time).count());
Simple clock for elapsed events.
Definition progress.h:16
T elapsed() noexcept
Capture the elapsed time.
Definition progress.h:60
static Duration duration(F &&f, Args &&... args)
Definition progress.h:31
Namespace for the maze builder.
Definition algo_interface.h:9
Simple argument handler.
Definition args.h:15