xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
include
xrpl
basics
chrono.h
1
#pragma once
2
3
#include <xrpl/beast/clock/abstract_clock.h>
4
#include <xrpl/beast/clock/basic_seconds_clock.h>
5
#include <xrpl/beast/clock/manual_clock.h>
6
7
#include <date/date.h>
8
9
#include <
chrono
>
10
#include <
cstdint
>
11
#include <
ratio
>
12
#include <
string
>
13
#include <
type_traits
>
14
15
namespace
xrpl
{
16
17
// A few handy aliases
18
19
using
Days
=
20
std::chrono::duration<int, std::ratio_multiply<std::chrono::hours::period, std::ratio<24>
>>;
21
22
using
Weeks
=
std::chrono::duration<int, std::ratio_multiply<Days::period, std::ratio<7>
>>;
23
34
35
static
constexpr
std::chrono::seconds
kEpochOffset
=
36
date::sys_days{date::year{2000} / 1 / 1} - date::sys_days{date::year{1970} / 1 / 1};
37
38
static_assert
(
kEpochOffset
.count() == 946684800);
39
40
class
NetClock
41
{
42
public
:
43
explicit
NetClock
() =
default
;
44
45
using
rep
=
std::uint32_t
;
46
using
period
=
std::ratio<1>
;
47
using
duration
=
std::chrono::duration<rep, period>
;
48
using
time_point
=
std::chrono::time_point<NetClock>
;
49
50
static
bool
const
is_steady
=
false
;
// NOLINT(readability-identifier-naming)
51
};
52
53
template
<
class
Duration>
54
std::string
55
to_string
(date::sys_time<Duration> tp)
56
{
57
return
date::format(
"%Y-%b-%d %T %Z"
, tp);
58
}
59
60
inline
std::string
61
to_string
(
NetClock::time_point
tp)
62
{
63
// 2000-01-01 00:00:00 UTC is 946684800s from 1970-01-01 00:00:00 UTC
64
using namespace
std::chrono
;
65
return
to_string
(system_clock::time_point{tp.
time_since_epoch
() +
kEpochOffset
});
66
}
67
68
template
<
class
Duration>
69
std::string
70
toStringIso
(date::sys_time<Duration> tp)
71
{
72
using namespace
std::chrono
;
73
return
date::format(
"%FT%TZ"
, tp);
74
}
75
76
inline
std::string
77
toStringIso
(
NetClock::time_point
tp)
78
{
79
// 2000-01-01 00:00:00 UTC is 946684800s from 1970-01-01 00:00:00 UTC
80
// Note, NetClock::duration is seconds, as checked by static_assert
81
static_assert
(
std::is_same_v<NetClock::duration::period, std::ratio<1>
>);
82
return
toStringIso
(date::sys_time<NetClock::duration>{tp.
time_since_epoch
() +
kEpochOffset
});
83
}
84
90
using
Stopwatch
=
beast::AbstractClock<std::chrono::steady_clock>
;
91
95
using
TestStopwatch
=
beast::ManualClock<std::chrono::steady_clock>
;
96
100
inline
Stopwatch
&
101
stopwatch
()
102
{
103
using
Clock =
beast::BasicSecondsClock
;
104
using
Facade = Clock::Clock;
105
return
beast::getAbstractClock<Facade, Clock>
();
106
}
107
108
}
// namespace xrpl
std::string
chrono
beast::AbstractClock
Abstract interface to a clock.
Definition
abstract_clock.h:36
beast::BasicSecondsClock
A clock whose minimum resolution is one second.
Definition
basic_seconds_clock.h:18
beast::ManualClock
Manual clock implementation.
Definition
manual_clock.h:22
xrpl::NetClock::period
std::ratio< 1 > period
Definition
chrono.h:46
xrpl::NetClock::rep
std::uint32_t rep
Definition
chrono.h:45
xrpl::NetClock::NetClock
NetClock()=default
xrpl::NetClock::time_point
std::chrono::time_point< NetClock > time_point
Definition
chrono.h:48
xrpl::NetClock::is_steady
static bool const is_steady
Definition
chrono.h:50
xrpl::NetClock::duration
std::chrono::duration< rep, period > duration
Definition
chrono.h:47
cstdint
std::chrono::duration
std::uint32_t
std::is_same_v
T is_same_v
beast::getAbstractClock
AbstractClock< Facade > & getAbstractClock()
Returns a global instance of an abstract clock.
Definition
abstract_clock.h:88
std::chrono
xrpl
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition
algorithm.h:5
xrpl::kEpochOffset
static constexpr std::chrono::seconds kEpochOffset
Clock for measuring the network time.
Definition
chrono.h:35
xrpl::Stopwatch
beast::AbstractClock< std::chrono::steady_clock > Stopwatch
A clock for measuring elapsed time.
Definition
chrono.h:90
xrpl::Days
std::chrono::duration< int, std::ratio_multiply< std::chrono::hours::period, std::ratio< 24 > > > Days
Definition
chrono.h:19
xrpl::stopwatch
Stopwatch & stopwatch()
Returns an instance of a wall clock.
Definition
chrono.h:101
xrpl::to_string
std::string to_string(BaseUInt< Bits, Tag > const &a)
Definition
base_uint.h:657
xrpl::toStringIso
std::string toStringIso(date::sys_time< Duration > tp)
Definition
chrono.h:70
xrpl::Weeks
std::chrono::duration< int, std::ratio_multiply< Days::period, std::ratio< 7 > > > Weeks
Definition
chrono.h:22
xrpl::TestStopwatch
beast::ManualClock< std::chrono::steady_clock > TestStopwatch
A manual Stopwatch for unit tests.
Definition
chrono.h:95
ratio
string
std::chrono::time_point
std::chrono::time_point::time_since_epoch
T time_since_epoch(T... args)
type_traits
Generated by
1.17.0