Go to the documentation of this file.
9 #ifndef EAGINE_TIMEOUT_HPP
10 #define EAGINE_TIMEOUT_HPP
21 using _clock = std::chrono::steady_clock;
26 : _start{_clock::now()} {}
30 return _clock::now() - _start;
35 return std::chrono::duration_cast<std::chrono::duration<float>>(
40 _clock::time_point _start{};
48 using _clock = std::chrono::steady_clock;
54 : _timeout{_clock::now()} {}
59 timeout(_clock::duration duration, _clock::duration initial) noexcept
61 , _timeout{_clock::now() + initial} {}
72 timeout(_clock::duration duration) noexcept
73 :
timeout{duration, duration} {}
78 template <
typename R,
typename P>
79 timeout(std::chrono::duration<R, P> duration) noexcept
80 :
timeout{std::chrono::duration_cast<_clock::duration>(duration)} {}
83 auto reset() noexcept -> auto& {
84 _timeout = std::chrono::steady_clock::now() + _duration;
89 auto reset(_clock::duration duration, _clock::duration initial) noexcept
92 _timeout = std::chrono::steady_clock::now() + initial;
104 auto reset(_clock::duration duration) noexcept ->
auto& {
105 return reset(duration, duration);
110 return _clock::now() - _timeout + _duration;
117 return _clock::now() >= _timeout;
122 explicit operator bool() const noexcept {
134 _clock::duration _duration{};
135 _clock::time_point _timeout{};
147 explicit operator bool() noexcept {
158 #endif // EAGINE_TIMEOUT_HPP
timeout(std::chrono::duration< R, P > duration) noexcept
Construction from the default duration.
Definition: timeout.hpp:79
timeout(_clock::duration duration, nothing_t) noexcept
Construction from the default and zero initial timeout duration.
Definition: timeout.hpp:66
timeout(_clock::duration duration, _clock::duration initial) noexcept
Construction from the default and initial timeout duration.
Definition: timeout.hpp:59
Common code is placed in this namespace.
Definition: eagine.hpp:21
Class that measures elapsed time since instance construction.
Definition: timeout.hpp:20
Class representing "none" / "nothing" values.
Definition: nothing.hpp:17
auto reset() noexcept -> auto &
Resets the timeout using the previously specified duration.
Definition: timeout.hpp:83
time_measure() noexcept
Default constructor. Saves the current time.
Definition: timeout.hpp:25
auto is_expired() const noexcept -> bool
Indicates if the timeout is expired.
Definition: timeout.hpp:116
timeout(_clock::duration duration) noexcept
Construction from the default duration.
Definition: timeout.hpp:72
timeout() noexcept
Default construction. Saves current time. Immediately expires.
Definition: timeout.hpp:53
auto seconds() const noexcept
Returns the time since construction in seconds.
Definition: timeout.hpp:34
auto reset(_clock::duration duration) noexcept -> auto &
Resets the timeout using the specified duration value.
Definition: timeout.hpp:104
auto elapsed_time() const noexcept
Returns the time since construction using clock's representation.
Definition: timeout.hpp:29
auto period() const noexcept -> auto &
Returns the timeout period.
Definition: timeout.hpp:129
static auto zero(basic_span< T, P, S > spn) -> std::enable_if_t< std::is_integral_v< T >||std::is_floating_point_v< T >, basic_span< T, P, S >>
Fills a span with zero value of type T.
Definition: span_algo.hpp:548
Class representing a timeout since construction or reset.
Definition: timeout.hpp:47
auto reset(_clock::duration duration, _clock::duration initial) noexcept -> auto &
Resets the timeout using the specified duration values.
Definition: timeout.hpp:89
auto elapsed_time() const noexcept
Returns the time since reset as clocks duration type.
Definition: timeout.hpp:109
auto reset(_clock::duration duration, nothing_t) noexcept -> auto &
Resets the timeout using the specified duration values.
Definition: timeout.hpp:98
Specialization of timeout that resets when tested for expiration.
Definition: timeout.hpp:142