12# define sc std::chrono::
56template<
typename TClock,
typename TDerived>
63 using TRaw=
typename TTimePoint::rep;
110 :
span( stdLibValue ) {}
262 {
return sc duration_cast<TDuration>( (
span * multiplier) ); }
268 {
return sc duration_cast<TDuration>( (
span * multiplier) ); }
274 {
span= sc duration_cast<TDuration>( (
span * multiplier) );
return *
this; }
280 {
span= sc duration_cast<TDuration>( (
span * multiplier) );
return *
this; }
286 {
return sc duration_cast<TDuration>( (
span / divisor) ); }
292 {
return sc duration_cast<TDuration>( (
span / divisor) ); }
298 {
span= sc duration_cast<TDuration>( (
span / divisor) );
return *
this; }
305 {
span= sc duration_cast<TDuration>( (
span / divisor) );
return *
this; }
316 return double( sc duration_cast<sc microseconds>(
span ).count() )
317 / (1000000. * 3600. * 24. );
323 return integer( sc duration_cast<sc hours>(
span ).count()
330 return double( sc duration_cast<sc microseconds>(
span ).count() )
331 / (1000000. * 3600. );
337 {
return integer( sc duration_cast<sc hours>(
span ).count() ); }
342 return double( sc duration_cast<sc microseconds>(
span ).count() )
349 {
return sc duration_cast<sc minutes>(
span ).count(); }
354 return double( sc duration_cast<sc nanoseconds>(
span ).count() )
361 {
return sc duration_cast<sc seconds>(
span ).count(); }
366 return double( sc duration_cast<sc nanoseconds>(
span ).count() )
373 {
return sc duration_cast<sc milliseconds>(
span ).count(); }
378 return double(sc duration_cast<sc nanoseconds>(
span ).count())
385 {
return sc duration_cast<sc microseconds>(
span ).count(); }
390 {
return sc duration_cast<sc nanoseconds>(
span ).count(); }
398 double InHertz(
int qtyFractionalDigits= -1 )
const {
400 if (
span.count() == 0)
407 if ( qtyFractionalDigits < 0 )
411 double mag= pow( 10, qtyFractionalDigits );
412 return int( hz * mag + ( hz < 0 ? -0.5 : 0.5 ) ) / mag;
421 {
return sc duration_cast<TDuration>(sc hours(24) * days); }
428 {
return sc duration_cast<TDuration>(sc hours(24) * days); }
435 {
return sc duration_cast<TDuration>(sc hours(1) * hours); }
442 {
return sc duration_cast<TDuration>( sc hours(1) * hours ); }
449 {
return sc duration_cast<TDuration>( sc minutes(1) * minutes ); }
456 {
return sc duration_cast<TDuration>( sc minutes(1) * minutes ); }
463 {
return sc duration_cast<TDuration>(sc seconds(1) * seconds ); }
470 {
return sc duration_cast<TDuration>(sc seconds(1) * seconds); }
477 {
return sc duration_cast<TDuration>(sc milliseconds(1) * milliseconds); }
484 {
return sc duration_cast<TDuration>( sc milliseconds(1) * milliseconds ); }
491 {
return sc duration_cast<TDuration>(sc microseconds(1) * microseconds ); }
498 {
return sc duration_cast<TDuration>( sc microseconds(1) * microseconds ); }
505 {
return sc duration_cast<TDuration>(sc nanoseconds( nanoseconds )); }
541 stamp= TClock::now();
547 TDerived
Now() {
return TDerived(TClock::now()); }
559 TDerived
EndOfEpoch() {
return TDerived((TClock::time_point::max)()); }
564 TDerived&
Reset() {
stamp= TClock::now();
return *
static_cast<TDerived*
>(
this); }
572 :
stamp(internalValue) {}
618 {
return TDerived(
TTimePoint(
typename TClock::duration( raw ) ) ); }
624 {
return stamp + sc duration_cast<typename TClock::duration>( timeSpan.
span ); }
630 {
return stamp + timeSpan; }
637 stamp+= sc duration_cast<typename TClock::duration>( timeSpan.
span );
651 {
return stamp - sc duration_cast<typename TClock::duration>( timeSpan.
span ); }
657 {
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)
Duration & operator+=(const TDuration &other)
static Duration FromAbsoluteSeconds(int64_t seconds)
sc steady_clock::duration TDuration
The value type for time spans.
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)
bool IsOlderThan(const Duration &timeSpan) const
TDerived operator+=(const typename Duration::TDuration &timeSpan)
typename TClock::time_point TTimePoint
The internal c++ type for time points.
Duration Since(const TDerived &other) const
TDerived operator-(const Duration &timeSpan) const
static TDerived BeginningOfEpoch()
void SetAs(const TDerived &other)
typename TTimePoint::rep TRaw
Integral type used for exporting and importing values in raw units.
Initialization
Used, for example, with constructors that allow to suppress initialization of members.
lang::integer integer
Type alias in namespace #"%alib".