mpd/src/time/ClockCache.hxx
2023-03-06 14:59:48 +01:00

40 lines
742 B
C++

// SPDX-License-Identifier: BSD-2-Clause
// Copyright CM4all GmbH
// author: Max Kellermann <mk@cm4all.com>
#pragma once
#include <chrono>
/**
* Cache the now() method of a clock.
*/
template<typename Clock>
class ClockCache {
using value_type = typename Clock::time_point;
mutable value_type value;
public:
ClockCache() = default;
ClockCache(const ClockCache &) = delete;
ClockCache &operator=(const ClockCache &) = delete;
[[gnu::pure]]
const auto &now() const noexcept {
if (value <= value_type())
value = Clock::now();
return value;
}
void flush() noexcept {
value = {};
}
/**
* Inject a fake value. This can be helpful for unit tests.
*/
void Mock(value_type _value) noexcept {
value = _value;
}
};