3#ifndef _TIME_SHIELD_ELAPSED_TIMER_HPP_INCLUDED
4#define _TIME_SHIELD_ELAPSED_TIMER_HPP_INCLUDED
27 using clock = std::chrono::steady_clock;
36 if (start_immediately) {
58 const duration since_epoch = std::chrono::duration_cast<duration>(std::chrono::milliseconds(now_ms));
63 return std::chrono::duration_cast<std::chrono::milliseconds>(delta).count();
68 const duration since_epoch = std::chrono::duration_cast<duration>(std::chrono::seconds(now_sec));
73 return std::chrono::duration_cast<std::chrono::seconds>(delta).count();
87 TIME_SHIELD_NODISCARD
bool is_valid() const noexcept {
104 return duration::zero();
110 TIME_SHIELD_NODISCARD std::int64_t
elapsed_ns() const noexcept {
115 TIME_SHIELD_NODISCARD std::int64_t
elapsed_ns(std::int64_t now_ns)
const noexcept {
116 const duration since_epoch = std::chrono::duration_cast<duration>(std::chrono::nanoseconds(now_ns));
118 return std::chrono::duration_cast<std::chrono::nanoseconds>(
elapsed(
now)).count();
128 const duration since_epoch = std::chrono::duration_cast<duration>(std::chrono::milliseconds(now_ms));
130 return std::chrono::duration_cast<std::chrono::milliseconds>(
elapsed(
now)).count();
140 const duration since_epoch = std::chrono::duration_cast<duration>(std::chrono::seconds(now_sec));
142 return std::chrono::duration_cast<std::chrono::seconds>(
elapsed(
now)).count();
146 template <
class Duration>
147 TIME_SHIELD_NODISCARD
typename Duration::rep
elapsed_count() const noexcept {
148 return std::chrono::duration_cast<Duration>(
elapsed()).count();
156 if (timeout_ms <= 0) {
167 if (timeout_sec <= 0) {
170 return elapsed() >= std::chrono::seconds(timeout_sec);
178 return std::chrono::duration_cast<std::chrono::milliseconds>(
m_start_time.time_since_epoch()).count();
clock::time_point time_point
TIME_SHIELD_NODISCARD ts_ms_t elapsed_ms() const noexcept
Returns elapsed milliseconds since the timer was started.
TIME_SHIELD_NODISCARD ts_t elapsed_sec(ts_t now_sec) const noexcept
Returns elapsed seconds relative to the provided timestamp in seconds.
TIME_SHIELD_NODISCARD duration elapsed() const noexcept
Returns elapsed duration since the timer was started.
TIME_SHIELD_NODISCARD bool is_running() const noexcept
Checks whether the timer currently measures elapsed time.
TIME_SHIELD_NODISCARD std::int64_t elapsed_ns(std::int64_t now_ns) const noexcept
Returns elapsed nanoseconds relative to the provided timestamp in nanoseconds.
TIME_SHIELD_NODISCARD ts_ms_t elapsed_ms(ts_ms_t now_ms) const noexcept
Returns elapsed milliseconds relative to the provided timestamp in milliseconds.
TIME_SHIELD_NODISCARD ts_t elapsed_sec() const noexcept
Returns elapsed seconds since the timer was started.
TIME_SHIELD_NODISCARD time_point start_time() const noexcept
Returns start time stored by the timer.
void invalidate() noexcept
Invalidates the timer so subsequent elapsed() calls return zero.
TIME_SHIELD_NODISCARD duration elapsed(time_point now) const noexcept
Returns elapsed duration relative to the provided time point.
TIME_SHIELD_NODISCARD bool is_valid() const noexcept
Alias for is_running() to match Qt naming conventions.
std::chrono::steady_clock clock
TIME_SHIELD_NODISCARD std::int64_t elapsed_ns() const noexcept
Returns elapsed nanoseconds since the timer was started.
TIME_SHIELD_NODISCARD Duration::rep elapsed_count() const noexcept
Returns elapsed duration in the desired chrono duration type.
TIME_SHIELD_NODISCARD ts_ms_t restart_ms(ts_ms_t now_ms) noexcept
Restarts the timer using a millisecond timestamp and returns elapsed milliseconds.
void start() noexcept
Starts the timer using the current steady clock time.
TIME_SHIELD_NODISCARD duration restart() noexcept
Restarts the timer and returns the elapsed duration so far.
TIME_SHIELD_NODISCARD ts_t restart_sec(ts_t now_sec) noexcept
Restarts the timer using a second timestamp and returns elapsed seconds.
TIME_SHIELD_NODISCARD bool has_expired(ts_ms_t timeout_ms) const noexcept
Checks if the given timeout in milliseconds has expired.
TIME_SHIELD_NODISCARD std::int64_t ms_since_reference() const noexcept
Returns milliseconds since the internal clock reference.
TIME_SHIELD_NODISCARD bool has_expired_sec(ts_t timeout_sec) const noexcept
Checks if the given timeout in seconds has expired.
ElapsedTimer() noexcept=default
Constructs an invalid timer.
Configuration macros for the library.
int64_t ts_t
Unix timestamp in seconds since 1970‑01‑01T00:00:00Z.
int64_t ts_ms_t
Unix timestamp in milliseconds since epoch.
ts_ms_t now() noexcept
Get the current UTC timestamp in milliseconds.
Main namespace for the Time Shield library.
Type definitions for time-related units and formats.