/*========================================================================= * * Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *=========================================================================*/ #ifndef itkRealTimeStamp_h #define itkRealTimeStamp_h #include "itkRealTimeInterval.h" #include "itkMacro.h" #include namespace itk { /** \class RealTimeStamp * \brief The RealTimeStamp is a data structure for representing time with high * precision and a large dynamic range. * * This class represents time typically for applications that need to mark the * time of acquisition of data with high precision (microseconds) and a large * dynamic range (years). * * By default, the real time stamp is initialized to the origin of * the Unix epoch. That is the time 00:00:00 UTC on 1 January 1970 * (or 1970-01-01T00:00:00Z ISO 8601) * * \sa RealTimeInterval * \sa RealTimeClock * * \ingroup ITKCommon */ class ITKCommon_EXPORT RealTimeStamp { public: using Self = RealTimeStamp; friend class RealTimeClock; /** Constructor */ RealTimeStamp(); /** Destructor */ ~RealTimeStamp(); /** Native type used to represent the time in different time units. */ using TimeRepresentationType = RealTimeInterval::TimeRepresentationType; /** Return time in multiple units. */ TimeRepresentationType GetTimeInMicroSeconds() const; TimeRepresentationType GetTimeInMilliSeconds() const; TimeRepresentationType GetTimeInSeconds() const; TimeRepresentationType GetTimeInMinutes() const; TimeRepresentationType GetTimeInHours() const; TimeRepresentationType GetTimeInDays() const; /** Arithmetic operations between RealTimeInterval and RealTimeStamp. */ RealTimeInterval operator-(const Self &) const; Self operator+(const RealTimeInterval &) const; Self operator-(const RealTimeInterval &) const; const Self & operator+=(const RealTimeInterval &); const Self & operator-=(const RealTimeInterval &); /** Comparison operations. */ bool operator>(const Self &) const; bool operator<(const Self &) const; bool operator==(const Self &) const; ITK_UNEQUAL_OPERATOR_MEMBER_FUNCTION(Self); bool operator<=(const Self &) const; bool operator>=(const Self &) const; /** Default print out of a RealTimeStamp */ friend ITKCommon_EXPORT std::ostream & operator<<(std::ostream & os, const RealTimeStamp & v); private: using SecondsCounterType = uint64_t; using MicroSecondsCounterType = uint64_t; /** Constructor with values. Intentionally made private */ RealTimeStamp(SecondsCounterType, MicroSecondsCounterType); using SecondsDifferenceType = RealTimeInterval::SecondsDifferenceType; using MicroSecondsDifferenceType = RealTimeInterval::MicroSecondsDifferenceType; /** Number of Seconds and Microseconds since... */ SecondsCounterType m_Seconds; MicroSecondsCounterType m_MicroSeconds; }; } // end of namespace itk #endif // itkRealTimeStamp_h