12# define sc std::chrono::
56template<
typename TClock,
typename TDerived>
64 using TRaw=
typename TTimePoint::rep;
112 :
span( stdLibValue ) {}
264 {
return sc duration_cast<TDuration>( (
span * multiplier) ); }
270 {
return sc duration_cast<TDuration>( (
span * multiplier) ); }
276 {
span= sc duration_cast<TDuration>( (
span * multiplier) );
return *
this; }
282 {
span= sc duration_cast<TDuration>( (
span * multiplier) );
return *
this; }
288 {
return sc duration_cast<TDuration>( (
span / divisor) ); }
294 {
return sc duration_cast<TDuration>( (
span / divisor) ); }
300 {
span= sc duration_cast<TDuration>( (
span / divisor) );
return *
this; }
307 {
span= sc duration_cast<TDuration>( (
span / divisor) );
return *
this; }
318 return double( sc duration_cast<sc microseconds>(
span ).count() )
319 / (1000000. * 3600. * 24. );
325 return integer( sc duration_cast<sc hours>(
span ).count()
332 return double( sc duration_cast<sc microseconds>(
span ).count() )
333 / (1000000. * 3600. );
339 {
return integer( sc duration_cast<sc hours>(
span ).count() ); }
344 return double( sc duration_cast<sc microseconds>(
span ).count() )
351 {
return sc duration_cast<sc minutes>(
span ).count(); }
356 return double( sc duration_cast<sc nanoseconds>(
span ).count() )
363 {
return sc duration_cast<sc seconds>(
span ).count(); }
368 return double( sc duration_cast<sc nanoseconds>(
span ).count() )
375 {
return sc duration_cast<sc milliseconds>(
span ).count(); }
380 return double(sc duration_cast<sc nanoseconds>(
span ).count())
387 {
return sc duration_cast<sc microseconds>(
span ).count(); }
392 {
return sc duration_cast<sc nanoseconds>(
span ).count(); }
400 double InHertz(
int qtyFractionalDigits= -1 )
const {
402 if (
span.count() == 0)
409 if ( qtyFractionalDigits < 0 )
413 double mag= pow( 10, qtyFractionalDigits );
414 return int( hz * mag + ( hz < 0 ? -0.5 : 0.5 ) ) / mag;
423 {
return sc duration_cast<TDuration>(sc hours(24) * days); }
430 {
return sc duration_cast<TDuration>(sc hours(24) * days); }
437 {
return sc duration_cast<TDuration>(sc hours(1) * hours); }
444 {
return sc duration_cast<TDuration>( sc hours(1) * hours ); }
451 {
return sc duration_cast<TDuration>( sc minutes(1) * minutes ); }
458 {
return sc duration_cast<TDuration>( sc minutes(1) * minutes ); }
465 {
return sc duration_cast<TDuration>(sc seconds(1) * seconds ); }
472 {
return sc duration_cast<TDuration>(sc seconds(1) * seconds); }
479 {
return sc duration_cast<TDuration>(sc milliseconds(1) * milliseconds); }
486 {
return sc duration_cast<TDuration>( sc milliseconds(1) * milliseconds ); }
493 {
return sc duration_cast<TDuration>(sc microseconds(1) * microseconds ); }
500 {
return sc duration_cast<TDuration>( sc microseconds(1) * microseconds ); }
507 {
return sc duration_cast<TDuration>(sc nanoseconds( nanoseconds )); }
543 stamp= TClock::now();
549 TDerived
Now() {
return TDerived(TClock::now()); }
561 TDerived
EndOfEpoch() {
return TDerived((TClock::time_point::max)()); }
566 TDerived&
Reset() {
stamp= TClock::now();
return *
static_cast<TDerived*
>(
this); }
574 :
stamp(internalValue) {}
620 {
return TDerived(
TTimePoint(
typename TClock::duration( raw ) ) ); }
626 {
return stamp + sc duration_cast<typename TClock::duration>( timeSpan.
span ); }
632 {
return stamp + timeSpan; }
639 stamp+= sc duration_cast<typename TClock::duration>( timeSpan.
span );
653 {
return stamp - sc duration_cast<typename TClock::duration>( timeSpan.
span ); }
659 {
return stamp - 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.