VoltMod
C++23 framework for CS2 server plugins
Loading...
Searching...
No Matches
Durations.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <chrono>
4#include <cstdint>
5#include <string>
6#include <string_view>
7
8namespace VoltMod
9{
10
11/** Translated units for @ref Time::FormatDurationLabel. */
13{
14 std::string Permanent;
15 std::string Days;
16 std::string Hours;
17 std::string Minutes;
18 std::string Seconds;
19};
20
21/** Timestamp, duration, and expiration utilities. */
22class Time
23{
24public:
25 /** Unix wall-clock seconds. Use @ref MonotonicSeconds for elapsed time. */
26 static int64_t Now();
27
28 /** Monotonic seconds for intervals. The arbitrary origin must not be persisted. */
29 static double MonotonicSeconds()
30 {
31 return std::chrono::duration<double>(std::chrono::steady_clock::now().time_since_epoch()).count();
32 }
33
34 /** Monotonic milliseconds for integer deadlines. */
36 {
37 return std::chrono::duration_cast<std::chrono::milliseconds>(
38 std::chrono::steady_clock::now().time_since_epoch())
39 .count();
40 }
41
42 /** Parse the shared duration grammar. Returns -1 on failure and 0 for permanent. */
43 static int64_t ParseDuration(const std::string& duration);
44
45 static std::string FormatDuration(int64_t seconds);
46
47 /** Format with the largest exact unit, or `Permanent` for non-positive values. */
49
50 /** Format an expiry suffix; non-positive or expired timestamps use @p permanentText. */
51 static std::string FormatExpiry(int64_t expiresAt, int64_t nowSec, std::string_view permanentText,
52 std::string_view expiresInPrefix);
53
54 static std::string FormatTimestamp(int64_t timestamp);
55 static bool IsExpired(int64_t expiresAt);
57
58private:
59 static constexpr int64_t SecondsPerMinute = 60;
60 static constexpr int64_t SecondsPerHour = 3600;
61 static constexpr int64_t SecondsPerDay = 86400;
62 static constexpr int64_t SecondsPerWeek = 604800;
63};
64
65} // namespace VoltMod
static std::string FormatDurationLabel(int64_t seconds, const DurationUnitLabels &units)
Definition Durations.cpp:51
static int64_t ParseDuration(const std::string &duration)
Definition Durations.cpp:16
static bool IsExpired(int64_t expiresAt)
static std::string FormatDuration(int64_t seconds)
Definition Durations.cpp:21
static std::string FormatExpiry(int64_t expiresAt, int64_t nowSec, std::string_view permanentText, std::string_view expiresInPrefix)
Definition Durations.cpp:78
static int64_t GetExpirationTime(int64_t durationSeconds)
static std::string FormatTimestamp(int64_t timestamp)
Definition Durations.cpp:95
static int64_t MonotonicMs()
Definition Durations.hpp:35
static double MonotonicSeconds()
Definition Durations.hpp:29
static int64_t Now()
Definition Durations.cpp:10
static std::string ReadFile(const std::filesystem::path &path)
Definition Loader.cpp:56