mirror of
https://github.com/HowardHinnant/date.git
synced 2025-08-04 13:14:26 +02:00
Add support for unsigned-based durations in time_of_day
This commit is contained in:
38
date.h
38
date.h
@@ -3538,6 +3538,32 @@ struct classify_duration
|
|||||||
classify::subsecond;
|
classify::subsecond;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <class Rep, class Period>
|
||||||
|
inline
|
||||||
|
CONSTCD11
|
||||||
|
typename std::enable_if
|
||||||
|
<
|
||||||
|
std::numeric_limits<Rep>::is_signed,
|
||||||
|
std::chrono::duration<Rep, Period>
|
||||||
|
>::type
|
||||||
|
abs(std::chrono::duration<Rep, Period> d)
|
||||||
|
{
|
||||||
|
return d >= d.zero() ? d : -d;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class Rep, class Period>
|
||||||
|
inline
|
||||||
|
CONSTCD11
|
||||||
|
typename std::enable_if
|
||||||
|
<
|
||||||
|
!std::numeric_limits<Rep>::is_signed,
|
||||||
|
std::chrono::duration<Rep, Period>
|
||||||
|
>::type
|
||||||
|
abs(std::chrono::duration<Rep, Period> d)
|
||||||
|
{
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
|
||||||
class time_of_day_base
|
class time_of_day_base
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
@@ -3548,7 +3574,7 @@ protected:
|
|||||||
enum {is24hr};
|
enum {is24hr};
|
||||||
|
|
||||||
CONSTCD11 time_of_day_base(std::chrono::hours h, bool neg, unsigned m) NOEXCEPT
|
CONSTCD11 time_of_day_base(std::chrono::hours h, bool neg, unsigned m) NOEXCEPT
|
||||||
: h_(abs(h))
|
: h_(detail::abs(h))
|
||||||
, mode_(static_cast<decltype(mode_)>(m))
|
, mode_(static_cast<decltype(mode_)>(m))
|
||||||
, neg_(neg)
|
, neg_(neg)
|
||||||
{}
|
{}
|
||||||
@@ -3694,7 +3720,7 @@ public:
|
|||||||
CONSTCD11 explicit time_of_day_storage(std::chrono::minutes since_midnight) NOEXCEPT
|
CONSTCD11 explicit time_of_day_storage(std::chrono::minutes since_midnight) NOEXCEPT
|
||||||
: base(std::chrono::duration_cast<std::chrono::hours>(since_midnight),
|
: base(std::chrono::duration_cast<std::chrono::hours>(since_midnight),
|
||||||
since_midnight < std::chrono::minutes{0}, is24hr)
|
since_midnight < std::chrono::minutes{0}, is24hr)
|
||||||
, m_(abs(since_midnight) - h_)
|
, m_(detail::abs(since_midnight) - h_)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
CONSTCD11 explicit time_of_day_storage(std::chrono::hours h, std::chrono::minutes m,
|
CONSTCD11 explicit time_of_day_storage(std::chrono::hours h, std::chrono::minutes m,
|
||||||
@@ -3767,8 +3793,8 @@ public:
|
|||||||
CONSTCD11 explicit time_of_day_storage(std::chrono::seconds since_midnight) NOEXCEPT
|
CONSTCD11 explicit time_of_day_storage(std::chrono::seconds since_midnight) NOEXCEPT
|
||||||
: base(std::chrono::duration_cast<std::chrono::hours>(since_midnight),
|
: base(std::chrono::duration_cast<std::chrono::hours>(since_midnight),
|
||||||
since_midnight < std::chrono::seconds{0}, is24hr)
|
since_midnight < std::chrono::seconds{0}, is24hr)
|
||||||
, m_(std::chrono::duration_cast<std::chrono::minutes>(abs(since_midnight) - h_))
|
, m_(std::chrono::duration_cast<std::chrono::minutes>(detail::abs(since_midnight) - h_))
|
||||||
, s_(abs(since_midnight) - h_ - m_)
|
, s_(detail::abs(since_midnight) - h_ - m_)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
CONSTCD11 explicit time_of_day_storage(std::chrono::hours h, std::chrono::minutes m,
|
CONSTCD11 explicit time_of_day_storage(std::chrono::hours h, std::chrono::minutes m,
|
||||||
@@ -3851,8 +3877,8 @@ public:
|
|||||||
CONSTCD11 explicit time_of_day_storage(Duration since_midnight) NOEXCEPT
|
CONSTCD11 explicit time_of_day_storage(Duration since_midnight) NOEXCEPT
|
||||||
: base(std::chrono::duration_cast<std::chrono::hours>(since_midnight),
|
: base(std::chrono::duration_cast<std::chrono::hours>(since_midnight),
|
||||||
since_midnight < Duration{0}, is24hr)
|
since_midnight < Duration{0}, is24hr)
|
||||||
, m_(std::chrono::duration_cast<std::chrono::minutes>(abs(since_midnight) - h_))
|
, m_(std::chrono::duration_cast<std::chrono::minutes>(detail::abs(since_midnight) - h_))
|
||||||
, s_(abs(since_midnight) - h_ - m_)
|
, s_(detail::abs(since_midnight) - h_ - m_)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
CONSTCD11 explicit time_of_day_storage(std::chrono::hours h, std::chrono::minutes m,
|
CONSTCD11 explicit time_of_day_storage(std::chrono::hours h, std::chrono::minutes m,
|
||||||
|
Reference in New Issue
Block a user