31 #include <sys/types.h> 43 #include "rnr/rnrconfig.h" 54 ostream &
operator<<(ostream &os,
const timespec &obj)
57 size_t w = os.width();
59 os << obj.tv_sec <<
"." 60 << setw(9) << setfill(
'0') << obj.tv_nsec
61 << setfill(c) << setw(w);
83 return clock_gettime(CLOCK_REALTIME, &ts) == 0? OK: RC_ERROR;
86 double toFp(
const timespec &ts)
88 return (
double)ts.tv_sec + (double)ts.tv_nsec/ (
double)
BILLION;
91 timespec
toTs(
const double &t)
97 nsec = (t - sec) * (
double)
BILLION;
99 ts.tv_sec = (long)sec;
100 ts.tv_nsec = (long)nsec;
107 return (ts.tv_sec != 0) || (ts.tv_nsec != 0);
116 timespec
add(
const timespec &a,
const timespec &b)
120 ts.tv_sec = a.tv_sec + b.tv_sec;
121 ts.tv_nsec = a.tv_nsec + b.tv_nsec;
126 timespec
sub(
const timespec &a,
const timespec &b)
130 ts.tv_sec = a.tv_sec - b.tv_sec;
131 ts.tv_nsec = a.tv_nsec - b.tv_nsec;
146 while( ts.tv_nsec < 0 )
167 Time::Time(
const timespec &ts)
173 Time::Time(
const double &t)
196 double Time::getResolution()
200 if( clock_getres(CLOCK_REALTIME, &res) < 0 )
215 double Time::markNow()
234 Time &Time::operator=(
const timespec &b)
241 Time &Time::operator=(
const double &b)
255 Time &Time::operator+=(
const timespec &b)
262 Time &Time::operator+=(
const double &b)
265 m_tsTime =
toTs(m_fpTime);
276 Time &Time::operator-=(
const timespec &b)
283 Time &Time::operator-=(
const double &b)
290 Time &Time::operator*=(
const double &b)
307 bool Time::operator<(
const timespec &b)
309 if( m_tsTime.tv_sec < b.tv_sec )
313 else if( (m_tsTime.tv_sec == b.tv_sec) && (m_tsTime.tv_nsec < b.tv_nsec) )
323 bool Time::operator>(
const timespec &b)
325 if( m_tsTime.tv_sec > b.tv_sec )
329 else if( (m_tsTime.tv_sec == b.tv_sec) && (m_tsTime.tv_nsec > b.tv_nsec) )
339 std::string Time::calendarTime(
const int resSec)
const 344 if( ctime_r(&(m_tsTime.tv_sec), buf) == NULL )
346 return "??? ??? ?? ??:??:?? ????";
365 int w = resSec <= 9? resSec: 9;
366 double y = (double)w;
367 long nsec = (long)trunc(((m_fpTime - floor(m_fpTime)) * pow(10.0, y)));
369 ss << str.substr(0, 19);
370 ss <<
"." << std::setfill(
'0') << std::setw(w) << nsec;
371 ss << str.substr(20);
bool isSet(const timespec &a)
Check if timespec is set.
timespec m_tsTime
time in timespec format
double m_fpTime
time in floating point format
std::string & rtrim(std::string &str)
Trim string in-place of trailing whitespace.
Time functions and class interfaces.
Of string spaces and their strangian operators.
std::ostream & operator<<(std::ostream &os, const Time &obj)
Time insertion operator.
double toFp(const timespec &ts)
Convert timespec to floating point number equivalent.
void clear(timespec &ts)
Clear this object's time.
timespec sub(const timespec &a, const timespec &b)
Subtract two timespecs.
timespec toTs(const double &t)
Convert floating point seconds to timespec equivalent.
timespec add(const timespec &a, const timespec &b)
Add two timespecs.
timespec now()
Get the current time, indentified by CLOCK_REALTIME, since the last Epoch.
timespec normalize(const timespec &a)
Normalize the timespec.
const long long BILLION
1,000,000,000
std::ostream & operator<<(std::ostream &os, const timespec &obj)
A timespec insertion operator.