12# define sc std::chrono::
56template<
typename TClock,
typename TDerived>
64 using TRaw=
typename TTimePoint::rep;
117 :
span( stdLibValue )
320 {
return sc duration_cast<TDuration>( (
span * multiplier) ); }
328 {
return sc duration_cast<TDuration>( (
span * multiplier) ); }
336 {
span= sc duration_cast<TDuration>( (
span * multiplier) );
return *
this; }
344 {
span= sc duration_cast<TDuration>( (
span * multiplier) );
return *
this; }
352 {
return sc duration_cast<TDuration>( (
span / divisor) ); }
360 {
return sc duration_cast<TDuration>( (
span / divisor) ); }
368 {
span= sc duration_cast<TDuration>( (
span / divisor) );
return *
this; }
377 {
span= sc duration_cast<TDuration>( (
span / divisor) );
return *
this; }
391 return double( sc duration_cast<sc microseconds>(
span ).count() )
392 / (1000000. * 3600. * 24. );
401 return integer( sc duration_cast<sc hours>(
span ).count()
411 return double( sc duration_cast<sc microseconds>(
span ).count() )
412 / (1000000. * 3600. );
421 return integer( sc duration_cast<sc hours>(
span ).count() );
430 return double( sc duration_cast<sc microseconds>(
span ).count() )
440 return sc duration_cast<sc minutes>(
span ).count();
449 return double( sc duration_cast<sc nanoseconds>(
span ).count() )
459 return sc duration_cast<sc seconds>(
span ).count();
468 return double( sc duration_cast<sc nanoseconds>(
span ).count() )
478 return sc duration_cast<sc milliseconds>(
span ).count();
487 return double(sc duration_cast<sc nanoseconds>(
span ).count())
497 return sc duration_cast<sc microseconds>(
span ).count();
506 return sc duration_cast<sc nanoseconds>(
span ).count();
517 double InHertz(
int qtyFractionalDigits= -1 )
const
520 if (
span.count() == 0)
527 if ( qtyFractionalDigits < 0 )
531 double mag= pow( 10, qtyFractionalDigits );
532 return int( hz * mag + ( hz < 0 ? -0.5 : 0.5 ) ) / mag;
543 {
return sc duration_cast<TDuration>(sc hours(24) * days); }
552 {
return sc duration_cast<TDuration>(sc hours(24) * days); }
561 {
return sc duration_cast<TDuration>(sc hours(1) * hours); }
570 {
return sc duration_cast<TDuration>( sc hours(1) * hours ); }
579 {
return sc duration_cast<TDuration>( sc minutes(1) * minutes ); }
588 {
return sc duration_cast<TDuration>( sc minutes(1) * minutes ); }
597 {
return sc duration_cast<TDuration>(sc seconds(1) * seconds ); }
606 {
return sc duration_cast<TDuration>(sc seconds(1) * seconds); }
615 {
return sc duration_cast<TDuration>(sc milliseconds(1) * milliseconds); }
624 {
return sc duration_cast<TDuration>( sc milliseconds(1) * milliseconds ); }
633 {
return sc duration_cast<TDuration>(sc microseconds(1) * microseconds ); }
642 {
return sc duration_cast<TDuration>( sc microseconds(1) * microseconds ); }
651 {
return sc duration_cast<TDuration>(sc nanoseconds( nanoseconds )); }
687 stamp= TClock::now();
695 TDerived
Now() {
return TDerived(TClock::now()); }
707 TDerived
EndOfEpoch() {
return TDerived((TClock::time_point::max)()); }
716 stamp= TClock::now();
717 return *
static_cast<TDerived*
>(
this);
728 :
stamp(internalValue)
791 {
return stamp.time_since_epoch().count(); }
808 {
return TDerived(
TTimePoint(
typename TClock::duration( raw ) ) ); }
816 {
return stamp + sc duration_cast<typename TClock::duration>( timeSpan.
span ); }
824 {
return stamp + timeSpan; }
833 stamp+= sc duration_cast<typename TClock::duration>( timeSpan.
span );
851 {
return stamp - sc duration_cast<typename TClock::duration>( timeSpan.
span ); }
859 {
return stamp - timeSpan; }
913 {
return (*
this) - other; }
924 {
return Age() > timeSpan; }
double InHertz(int qtyFractionalDigits=-1) const
int64_t InAbsoluteMinutes() const
static Duration FromAbsoluteMicroseconds(int64_t microseconds)
bool operator!=(const TDuration &other) const
Duration & operator=(const TDuration &stdLibValue)
bool operator!=(const Duration &other) const
bool operator<(const TDuration &other) const
Duration & operator/=(int64_t divisor)
TDuration span
The internal time value.
Duration & operator/=(double divisor)
Duration operator/(double divisor) const
Duration & operator*=(double multiplier)
Duration operator+(const Duration &rhs) const
static Duration FromAbsoluteMinutes(int64_t minutes)
bool operator>(const TDuration &other) const
Duration & operator+=(const Duration &other)
static Duration FromMinutes(double minutes)
int64_t InAbsoluteMilliseconds() const
static Duration FromMicroseconds(double microseconds)
sc steady_clock::duration TDuration
The value type for time spans.
Duration & operator+=(const TDuration &other)
static Duration FromAbsoluteSeconds(int64_t seconds)
bool operator==(const TDuration &other) const
static Duration FromSeconds(double seconds)
Duration operator-(const TDuration &rhs) const
bool operator<(const Duration &other) const
Duration operator+(const TDuration &rhs) const
bool operator<=(const TDuration &other) const
Duration(const TDuration &stdLibValue)
Duration & SetMinimum(const Duration &other)
integer InAbsoluteDays() const
int64_t InAbsoluteSeconds() const
bool operator>=(const TDuration &other) const
static Duration FromAbsoluteHours(int64_t hours)
static Duration FromDays(double days)
integer InAbsoluteHours() const
bool operator>=(const Duration &other) const
constexpr Duration()
Creates a zero-length time span.
double InMicroseconds() const
Duration operator/(int64_t divisor) const
bool operator<=(const Duration &other) const
Duration & SetMaximum(const Duration &other)
Duration operator*(int64_t multiplier) const
int64_t InAbsoluteMicroseconds() const
static Duration FromMilliseconds(double milliseconds)
int64_t InNanoseconds() const
Duration & operator-=(const Duration &other)
bool operator>(const Duration &other) const
static Duration Import(const TDuration &timeSpan)
double InMilliseconds() const
static Duration FromAbsoluteDays(int64_t days)
bool operator==(const Duration &other) const
static Duration FromHours(double hours)
Duration operator-(const Duration &rhs) const
Duration operator*(double multiplier) const
Duration & operator*=(int64_t multiplier)
Duration & operator-=(const TDuration &other)
static Duration FromNanoseconds(int64_t nanoseconds)
static Duration FromAbsoluteMilliseconds(int64_t milliseconds)
Duration operator-(const TDerived &other) const
TTimePoint Export() const
TDerived operator-(const typename Duration::TDuration &timeSpan) const
constexpr TimePointBase(const lang::Initialization init=lang::Initialization::Default)
TDerived operator-=(const typename Duration::TDuration &timeSpan)
constexpr TimePointBase(TTimePoint internalValue)
void Import(TTimePoint timePoint)
static TDerived EndOfEpoch()
TDerived operator+=(const Duration &timeSpan)
static TDerived FromRaw(TRaw raw)
void SetFromRaw(TRaw raw)
TDerived operator+(const typename Duration::TDuration &timeSpan) const
TDerived operator+(const Duration &timeSpan) const
TDerived operator-=(const Duration &timeSpan)
typename TTimePoint::rep TRaw
Integral type used for exporting and importing values in raw units.
typename TClock::time_point TTimePoint
The internal c++ type for time points.
bool IsOlderThan(const Duration &timeSpan) const
TDerived operator+=(const typename Duration::TDuration &timeSpan)
Duration Since(const TDerived &other) const
TDerived operator-(const Duration &timeSpan) const
static TDerived BeginningOfEpoch()
void SetAs(const TDerived &other)
Initialization
Used for example with constructors that allow to suppress initialization of members.
lang::integer integer
Type alias in namespace alib.