21 #include <type_traits> 34 #if __cpp_lib_chrono >= 201510 || _MSC_VER 55 template <
typename Rep,
typename Period>
58 template <
typename To,
typename Duration>
60 return t < d ? t + To{1} :
t;
63 template <
typename To,
typename Duration>
65 return t > d ? t - To{1} :
t;
68 template <
typename To,
typename Diff>
69 constexpr To
round_impl(To
const& t0, To
const& t1, Diff diff0, Diff diff1) {
70 return diff0 < diff1 ? t0 : diff1 < diff0 ? t1 : t0.count() & 1 ? t1 : t0;
73 template <
typename To,
typename Duration>
78 template <
typename To,
typename Duration>
91 constexpr To
ceil(std::chrono::duration<Rep, Period>
const& d) {
102 constexpr std::chrono::time_point<Clock, To>
ceil(
103 std::chrono::time_point<Clock, Duration>
const&
tp) {
104 return std::chrono::time_point<Clock, To>{ceil<To>(tp.time_since_epoch())};
114 constexpr To
floor(std::chrono::duration<Rep, Period>
const& d) {
125 constexpr std::chrono::time_point<Clock, To>
floor(
126 std::chrono::time_point<Clock, Duration>
const&
tp) {
127 return std::chrono::time_point<Clock, To>{floor<To>(tp.time_since_epoch())};
136 typename =
typename std::enable_if<
139 constexpr To
round(std::chrono::duration<Rep, Period>
const& d) {
149 typename =
typename std::enable_if<
152 constexpr std::chrono::time_point<Clock, To>
round(
153 std::chrono::time_point<Clock, Duration>
const&
tp) {
154 return std::chrono::time_point<Clock, To>{round<To>(tp.time_since_epoch())};
165 using rep = std::chrono::milliseconds::rep;
166 using period = std::chrono::milliseconds::period;
167 using duration = std::chrono::duration<rep, period>;
168 using time_point = std::chrono::time_point<coarse_steady_clock, duration>;
169 constexpr
static bool is_steady =
true;
172 #ifndef CLOCK_MONOTONIC_COARSE 173 return time_point(std::chrono::duration_cast<duration>(
179 throw_exception<std::runtime_error>(
180 "Error using CLOCK_MONOTONIC_COARSE.");
183 return time_point(std::chrono::duration_cast<duration>(
184 std::chrono::seconds(ts.tv_sec) +
185 std::chrono::nanoseconds(ts.tv_nsec)));
constexpr To ceil(std::chrono::duration< Rep, Period > const &d)
std::chrono::time_point< coarse_steady_clock, duration > time_point
int(* clock_gettime)(clockid_t, timespec *ts)
constexpr std::chrono::time_point< Clock, To > floor(std::chrono::time_point< Clock, Duration > const &tp)
constexpr To round(std::chrono::duration< Rep, Period > const &d)
std::chrono::steady_clock::time_point now()
constexpr To ceil_impl(Duration const &d, To const &t)
—— Concurrent Priority Queue Implementation ——
requires E e noexcept(noexcept(s.error(std::move(e))))
constexpr To round_impl(Duration const &d, To const &t0)
constexpr To floor_impl(Duration const &d, To const &t)
bool_constant< true > true_type
std::chrono::milliseconds Duration
constexpr std::chrono::time_point< Clock, To > round(std::chrono::time_point< Clock, Duration > const &tp)
static time_point now() noexcept
static const char *const value
std::chrono::milliseconds::period period
bool_constant< false > false_type
constexpr To round_impl(To const &t0, To const &t1, Diff diff0, Diff diff1)
constexpr std::chrono::time_point< Clock, To > ceil(std::chrono::time_point< Clock, Duration > const &tp)
std::chrono::duration< rep, period > duration
constexpr To floor(std::chrono::duration< Rep, Period > const &d)
std::chrono::milliseconds::rep rep