15 #ifndef epicsTimehInclude 16 #define epicsTimehInclude 20 #include "libComAPI.h" 26 #define POSIX_TIME_AT_EPICS_EPOCH 631152000u 42 #define TS_STAMP epicsTimeStamp 79 struct local_tm_nano_sec {
89 struct gm_tm_nano_sec {
102 struct time_t_wrapper {
111 class LIBCOM_API epicsTimeEvent
114 epicsTimeEvent (
const int &number);
115 operator int ()
const;
131 class LIBCOM_API epicsTime
135 class unableToFetchCurrentTime {};
137 class formatProblemWithStructTM {};
147 static epicsTime getEvent (
const epicsTimeEvent & );
155 static epicsTime getCurrent ();
163 static epicsTime getMonotonic ();
180 operator time_t_wrapper ()
const;
182 epicsTime (
const time_t_wrapper & );
184 epicsTime & operator = (
const time_t_wrapper & );
192 operator local_tm_nano_sec ()
const;
194 epicsTime (
const local_tm_nano_sec & );
196 epicsTime & operator = (
const local_tm_nano_sec & );
204 operator gm_tm_nano_sec ()
const;
206 epicsTime (
const gm_tm_nano_sec & );
208 epicsTime & operator = (
const gm_tm_nano_sec & );
218 epicsTime (
const struct timespec & );
220 epicsTime & operator = (
const struct timespec & );
227 operator struct timeval () const;
229 epicsTime (
const struct timeval & );
231 epicsTime & operator = (
const struct timeval & );
238 operator l_fp ()
const;
240 epicsTime (
const l_fp & );
242 epicsTime & operator = (
const l_fp & );
250 operator struct _FILETIME () const;
252 epicsTime (
const struct _FILETIME & );
254 epicsTime & operator = (
const struct _FILETIME & );
261 double operator- (
const epicsTime & )
const;
264 epicsTime operator+ (
const double & )
const;
266 epicsTime operator- (
const double & )
const;
268 epicsTime operator+= (
const double & );
270 epicsTime operator-= (
const double & );
281 bool operator <= (
const epicsTime & )
const;
285 bool operator >= (
const epicsTime & )
const;
287 bool operator > (
const epicsTime & )
const;
310 size_t strftime (
char * pBuff,
size_t bufLength,
const char * pFormat )
const;
313 void show (
unsigned interestLevel )
const;
324 epicsTime (
const unsigned long secPastEpoch,
const unsigned long nSec );
325 void addNanoSec (
long nanoSecAdjust );
339 #define epicsTimeOK 0 341 #define S_time_noProvider (M_time| 1) 343 #define S_time_badEvent (M_time| 2) 345 #define S_time_badArgs (M_time| 3) 347 #define S_time_noMemory (M_time| 4) 349 #define S_time_unsynchronized (M_time| 5) 351 #define S_time_timezone (M_time| 6) 353 #define S_time_conversion (M_time| 7) 360 #define epicsTimeEventCurrentTime 0 361 #define epicsTimeEventBestTime -1 362 #define epicsTimeEventDeviceTime -2 408 struct tm * pDest,
unsigned long * pNSecDest,
const epicsTimeStamp * pSrc );
411 struct tm * pDest,
unsigned long * pNSecDest,
const epicsTimeStamp * pSrc );
414 epicsTimeStamp * pDest,
const struct tm * pSrc,
unsigned long nSecSrc );
417 epicsTimeStamp * pDest,
const struct tm * pSrc,
unsigned long nSecSrc );
480 char * pBuff,
size_t bufLength,
const char * pFormat,
const epicsTimeStamp * pTS );
508 #ifdef EPICS_EXPOSE_LIBCOM_MONOTONIC_PRIVATE 521 inline epicsTimeEvent::epicsTimeEvent (
const int &number) :
522 eventNumber(number) {}
524 inline epicsTimeEvent::operator int ()
const 526 return this->eventNumber;
532 inline epicsTime epicsTime::operator - (
const double & rhs )
const 534 return epicsTime::operator + ( -rhs );
537 inline epicsTime epicsTime::operator += (
const double & rhs )
539 *
this = epicsTime::operator + ( rhs );
543 inline epicsTime epicsTime::operator -= (
const double & rhs )
545 *
this = epicsTime::operator + ( -rhs );
551 if ( this->secPastEpoch == rhs.secPastEpoch && this->nSec == rhs.nSec ) {
562 inline bool epicsTime::operator >= (
const epicsTime & rhs )
const 564 return ! ( *
this < rhs );
567 inline bool epicsTime::operator > (
const epicsTime & rhs )
const 569 return ! ( *
this <= rhs );
572 inline epicsTime & epicsTime::operator = (
const local_tm_nano_sec & rhs )
574 return *
this = epicsTime ( rhs );
577 inline epicsTime & epicsTime::operator = (
const gm_tm_nano_sec & rhs )
579 return *
this = epicsTime ( rhs );
582 inline epicsTime & epicsTime::operator = (
const struct timespec & rhs )
584 *
this = epicsTime ( rhs );
588 inline epicsTime & epicsTime::operator = (
const epicsTimeStamp & rhs )
590 *
this = epicsTime ( rhs );
594 inline epicsTime & epicsTime::operator = (
const l_fp & rhs )
596 *
this = epicsTime ( rhs );
600 inline epicsTime & epicsTime::operator = (
const time_t_wrapper & rhs )
602 *
this = epicsTime ( rhs );
Network Time Protocol timestamp.
LIBCOM_API int epicsStdCall epicsTimeEqual(const epicsTimeStamp *pLeft, const epicsTimeStamp *pRight)
left equals right
LIBCOM_API int epicsStdCall epicsTimeGetEvent(epicsTimeStamp *pDest, int eventNumber)
Get time of event eventNumber into *pDest.
LIBCOM_API int epicsStdCall epicsTimeFromTimeval(epicsTimeStamp *pDest, const struct timeval *pSrc)
Set epicsTimeStamp from struct timeval
LIBCOM_API int epicsStdCall epicsTimeToTimespec(struct timespec *pDest, const epicsTimeStamp *pSrc)
Convert epicsTimeStamp to struct timespec
LIBCOM_API epicsUInt64 epicsMonotonicGet(void)
Fetch monotonic counter, returns the number of nanoseconds since some unspecified time...
LIBCOM_API int epicsStdCall epicsTimeFromTimespec(epicsTimeStamp *pDest, const struct timespec *pSrc)
Set epicsTimeStamp from struct timespec
void osdMonotonicInit(void)
LIBCOM_API double epicsStdCall epicsTimeDiffInSeconds(const epicsTimeStamp *pLeft, const epicsTimeStamp *pRight)
Time difference between left and right in seconds.
LIBCOM_API void epicsStdCall epicsTimeShow(const epicsTimeStamp *, unsigned interestLevel)
Dump current state to stdout.
epicsUInt32 secPastEpoch
seconds since 0000 Jan 1, 1990
unsigned long long epicsUInt64
LIBCOM_API int epicsStdCall epicsTimeFromTM(epicsTimeStamp *pDest, const struct tm *pSrc, unsigned long nSecSrc)
Set epicsTimeStamp from struct tm in local time zone.
LIBCOM_API int epicsStdCall epicsTimeGetCurrent(epicsTimeStamp *pDest)
Get current time into *pDest.
struct epicsTimeStamp epicsTimeStamp
EPICS time stamp, for use from C code.
LIBCOM_API int epicsStdCall epicsTime_localtime(const time_t *clock, struct tm *result)
Break down a time_t into a struct tm in the local timezone.
LIBCOM_API int epicsStdCall epicsTimeToGMTM(struct tm *pDest, unsigned long *pNSecDest, const epicsTimeStamp *pSrc)
Convert epicsTimeStamp to struct tm in UTC/GMT.
LIBCOM_API int epicsStdCall epicsTimeNotEqual(const epicsTimeStamp *pLeft, const epicsTimeStamp *pRight)
left not equal to right
LIBCOM_API size_t epicsStdCall epicsTimeToStrftime(char *pBuff, size_t bufLength, const char *pFormat, const epicsTimeStamp *pTS)
Convert epicsTimeStamp to string. See epicsTime::strftime()
bool operator<(shared_ptr< T > const &a, shared_ptr< U > const &b) BOOST_NOEXCEPT
LIBCOM_API int epicsStdCall epicsTimeGreaterThanEqual(const epicsTimeStamp *pLeft, const epicsTimeStamp *pRight)
right was not before left
LIBCOM_API int epicsStdCall epicsTime_gmtime(const time_t *clock, struct tm *result)
Break down a time_t into a struct tm in the UTC timezone.
LIBCOM_API epicsUInt64 epicsMonotonicResolution(void)
Monotonic time resolution, may not be accurate. Returns the minimum non-zero time difference between ...
LIBCOM_API int epicsStdCall epicsTimeLessThanEqual(const epicsTimeStamp *pLeft, const epicsTimeStamp *pRight)
right was no later than left
BSD and SRV5 Unix timestamp.
LIBCOM_API int epicsStdCall epicsTimeToTM(struct tm *pDest, unsigned long *pNSecDest, const epicsTimeStamp *pSrc)
Convert epicsTimeStamp to struct tm in local time zone.
LIBCOM_API int epicsStdCall epicsTimeLessThan(const epicsTimeStamp *pLeft, const epicsTimeStamp *pRight)
left was before right
LIBCOM_API int epicsStdCall epicsTimeFromGMTM(epicsTimeStamp *pDest, const struct tm *pSrc, unsigned long nSecSrc)
Set epicsTimeStamp from struct tm in UTC/GMT.
LIBCOM_API int epicsTimeGetMonotonic(epicsTimeStamp *pDest)
Get monotonic time into *pDest.
EPICS time stamp, for use from C code.
LIBCOM_API void epicsStdCall epicsTimeAddSeconds(epicsTimeStamp *pDest, double secondsToAdd)
Add some number of seconds to dest.
LIBCOM_API int epicsTimeGetCurrentInt(epicsTimeStamp *pDest)
Get current time into *pDest (ISR-safe)
LIBCOM_API int epicsStdCall epicsTimeToTimeval(struct timeval *pDest, const epicsTimeStamp *pSrc)
Convert epicsTimeStamp to struct timeval
Defined by POSIX Real Time.
LIBCOM_API int epicsStdCall epicsTimeGreaterThan(const epicsTimeStamp *pLeft, const epicsTimeStamp *pRight)
left was after right
LIBCOM_API int epicsStdCall epicsTimeToTime_t(time_t *pDest, const epicsTimeStamp *pSrc)
Convert epicsTimeStamp to ANSI C time_t.
LIBCOM_API int epicsTimeGetEventInt(epicsTimeStamp *pDest, int eventNumber)
Get time of event eventNumber into *pDest (ISR-safe)
LIBCOM_API int epicsStdCall epicsTimeFromTime_t(epicsTimeStamp *pDest, time_t src)
Convert ANSI C time_t to epicsTimeStamp.
bool operator!=(const epics::pvData::shared_vector< A > &a, const epics::pvData::shared_vector< B > &b)
epicsUInt32 nsec
nanoseconds within second
bool operator==(const epics::pvData::shared_vector< A > &a, const epics::pvData::shared_vector< B > &b)