Iros
 
Loading...
Searching...
No Matches
time_point.h
Go to the documentation of this file.
1#pragma once
2
5#include "di/meta/compare.h"
6
7namespace di::chrono {
8template<typename C, concepts::InstanceOf<Duration> Dur>
9class TimePoint {
10public:
11 using Clock = C;
12 using Duration = Dur;
14 using Period = typename Duration::Period;
15
16 constexpr static auto min() { return TimePoint(Duration::min()); }
17 constexpr static auto max() { return TimePoint(Duration::max()); }
18
19 TimePoint() = default;
20
21 constexpr explicit TimePoint(Duration const& duration) : m_duration(duration) {}
22
23 template<concepts::ImplicitlyConvertibleTo<Duration> D>
24 constexpr TimePoint(TimePoint<Clock, D> const& other) : m_duration(other.time_since_epoch()) {}
25
26 constexpr auto time_since_epoch() const -> Duration { return m_duration; }
27
28 constexpr auto operator+=(Duration const& other) -> TimePoint& { return m_duration += other, *this; }
29 constexpr auto operator-=(Duration const& other) -> TimePoint& { return m_duration -= other, *this; }
30
31 constexpr auto operator++() -> TimePoint& { return ++m_duration, *this; }
32 constexpr auto operator++(int) -> TimePoint { return TimePoint(m_duration++); }
33
34 constexpr auto operator--() -> TimePoint& { return --m_duration, *this; }
35 constexpr auto operator--(int) -> TimePoint { return TimePoint(m_duration--); }
36
37private:
38 Duration m_duration {};
39};
40
41template<typename C, typename D1, typename R2, typename P2,
43constexpr auto operator+(TimePoint<C, D1> const& a, Duration<R2, P2> const& b) -> CT {
44 return CT(a.time_since_epoch() + b);
45}
46
47template<typename R1, typename P1, typename C, typename D2,
49constexpr auto operator+(Duration<R1, P1> const& a, TimePoint<C, D2> const& b) -> CT {
50 return CT(b.time_since_epoch() + a);
51}
52
53template<typename C, typename D1, typename R2, typename P2,
55constexpr auto operator-(TimePoint<C, D1> const& a, Duration<R2, P2> const& b) -> CT {
56 return CT(a.time_since_epoch() - b);
57}
58
59template<typename C, typename D1, typename D2, typename CT = meta::CommonType<D1, D2>>
60constexpr auto operator-(TimePoint<C, D1> const& a, TimePoint<C, D2> const& b) -> CT {
61 return CT(a.time_since_epoch() - b.time_since_epoch());
62}
63
64template<typename C, typename D1, concepts::EqualityComparableWith<D1> D2>
65constexpr auto operator==(TimePoint<C, D1> const& a, TimePoint<C, D2> const& b) -> bool {
66 return a.time_since_epoch() == b.time_since_epoch();
67}
68
69template<typename C, typename D1, concepts::ThreeWayComparableWith<D1> D2>
70constexpr auto operator<=>(TimePoint<C, D1> const& a, TimePoint<C, D2> const& b) {
71 return a.time_since_epoch() <=> b.time_since_epoch();
72}
73}
74
75namespace di {
76using chrono::TimePoint;
77}
Definition duration_forward_declaration.h:7
Per::Type Period
Definition duration.h:14
Rep Representation
Definition duration.h:13
static constexpr auto max()
Definition duration.h:18
static constexpr auto min()
Definition duration.h:17
Definition time_point_forward_declaration.h:8
constexpr auto operator+=(Duration const &other) -> TimePoint &
Definition time_point.h:28
Dur Duration
Definition time_point.h:12
static constexpr auto min()
Definition time_point.h:16
constexpr TimePoint(Duration const &duration)
Definition time_point.h:21
typename Duration::Period Period
Definition time_point.h:14
static constexpr auto max()
Definition time_point.h:17
typename Duration::Representation Representation
Definition time_point.h:13
constexpr TimePoint(TimePoint< Clock, D > const &other)
Definition time_point.h:24
constexpr auto operator++(int) -> TimePoint
Definition time_point.h:32
constexpr auto operator--() -> TimePoint &
Definition time_point.h:34
constexpr auto time_since_epoch() const -> Duration
Definition time_point.h:26
constexpr auto operator--(int) -> TimePoint
Definition time_point.h:35
constexpr auto operator++() -> TimePoint &
Definition time_point.h:31
C Clock
Definition time_point.h:11
constexpr auto operator-=(Duration const &other) -> TimePoint &
Definition time_point.h:29
Definition duration.h:9
constexpr auto operator-(Duration< Rep1, Period1 > const &a, Duration< Rep2, Period2 > const &b)
Definition duration.h:65
constexpr auto operator==(Duration< Rep1, Period1 > const &a, Duration< Rep2, Period2 > const &b) -> bool
Definition duration.h:108
constexpr auto operator+(Duration< Rep1, Period1 > const &a, Duration< Rep2, Period2 > const &b)
Definition duration.h:59
constexpr auto operator<=>(Duration< Rep1, Period1 > const &a, Duration< Rep2, Period2 > const &b)
Definition duration.h:115
Definition zstring_parser.h:9