#ifndef R2_TIME_H #define R2_TIME_H #ifdef __cplusplus extern "C" { #endif #include #include #define R_NSEC_PER_SEC 1000000000ULL #define R_NSEC_PER_MSEC 1000000ULL #define R_USEC_PER_SEC 1000000ULL #define R_NSEC_PER_USEC 1000ULL #define R_USEC_PER_MSEC 1000ULL #define ASCTIME_BUF_MAXLEN (26) // current calendar time, alias for time(0). affected by calendar, timezone changes, localtime, etc R_API ut64 r_time_today(void); // wall clock time in microseconds R_API ut64 r_time_now(void); // monotonic time in microseconds R_API ut64 r_time_now_mono(void); R_API R_MUSTUSE char *r_time_secs_tostring(time_t timeStamp); R_API R_MUSTUSE char *r_time_usecs_tostring(ut64 ts); R_API int r_time_beats(ut64 ts, int *sub); R_API ut64 r_time_dos_today(ut32 timeStamp, int tz); R_API ut64 r_time_hfs_today(ut32 hfsts, int tz); R_API ut64 r_time_unix_today(ut32 unxts, int tz); R_API ut64 r_time_w32_today(ut64 ts, int tz); // Cross platform thread-safe time functions R_API char *r_asctime_r(const struct tm *tm, char *buf); R_API char *r_ctime_r(const time_t *timer, char *buf); /** profiling */ typedef struct r_prof_t { struct timeval when; double result; } RProfile; R_API void r_prof_start(RProfile *p); R_API double r_prof_end(RProfile *p); #define R_TIME_PROFILE_ENABLED 0 #if R_TIME_PROFILE_ENABLED #define R_TIME_PROFILE_BEGIN ut64 __now__ = r_time_now_mono() #define R_TIME_PROFILE_END eprintf ("%s %"PFMT64d"\n", __FUNCTION__, r_time_now_mono() - __now__) #else #define R_TIME_PROFILE_BEGIN do{}while(0) #define R_TIME_PROFILE_END do{}while(0) #endif #ifdef __cplusplus } #endif #endif