Files
2022-12-13 12:44:04 +01:00

211 lines
3.0 KiB
C++

#include "cdevTime.h"
cdevTime::cdevTime ( long sec, long usec )
{
setTime(sec, usec);
}
cdevTime::cdevTime ( double t )
{
setTime(t);
}
cdevTime::cdevTime ( timeval & t )
{
setTime(t);
}
cdevTime::cdevTime ( const cdevTime & t )
{
setTime(t);
}
void cdevTime::getTime ( double * t ) const
{
if(t) *t = (double)tv_sec+(double)tv_usec/(double)ONE_SECOND;
}
void cdevTime::getTime ( long * sec, long * usec) const
{
if(sec && usec)
{
*sec = tv_sec;
*usec = tv_usec;
}
}
void cdevTime::getTime ( timeval * t ) const
{
if(t) {
t->tv_sec = tv_sec;
t->tv_usec = tv_usec;
}
}
void cdevTime::setTime ( void )
{
struct timeval tv_time;
gettimeofday(&tv_time);
tv_sec = tv_time.tv_sec;
tv_usec = tv_time.tv_usec;
}
void cdevTime::setTime ( double t )
{
tv_sec = (long)t;
tv_usec = (long)((double)fmod(t, 1.0)*(double)ONE_SECOND);
normalize();
}
void cdevTime::setTime ( long sec, long usec )
{
tv_sec = sec;
tv_usec = usec;
normalize();
}
void cdevTime::setTime ( timeval & t )
{
tv_sec = t.tv_sec;
tv_usec = t.tv_usec;
normalize();
}
void cdevTime::setTime ( const cdevTime & t )
{
t.getTime(&tv_sec, &tv_usec);
normalize();
}
void cdevTime::clear ( void )
{
tv_sec = 0;
tv_usec = 0;
}
int cdevTime::isSet ( void ) const
{
return (tv_sec||tv_usec)?1:0;
}
int cdevTime::normalize ( void )
{
while ((this->tv_usec >= ONE_SECOND)
|| (this->tv_sec < 0 && this->tv_usec > 0 ))
{
this->tv_usec -= ONE_SECOND;
this->tv_sec++;
}
while ((this->tv_usec <= -ONE_SECOND)
|| (this->tv_sec > 0 && this->tv_usec < 0))
{
this->tv_usec += ONE_SECOND;
this->tv_sec--;
}
return isSet();
}
cdevTime & cdevTime::operator = ( const cdevTime & t )
{
if (this != &t)
{
tv_sec = t.tv_sec;
tv_usec = t.tv_usec;
}
return *this;
}
cdevTime::operator double ( void )
{
return (double)tv_sec+(double)tv_usec/(double)ONE_SECOND;
}
cdevTime::operator timeval ( void )
{
timeval tv_time;
tv_time.tv_sec = tv_sec;
tv_time.tv_usec = tv_usec;
return tv_time;
}
cdevTime operator + (cdevTime t1, cdevTime t2)
{
cdevTime sum (t1.tv_sec + t2.tv_sec, t1.tv_usec + t2.tv_usec);
sum.normalize ();
return sum;
}
cdevTime operator - (cdevTime t1, cdevTime t2)
{
cdevTime delta (t1.tv_sec - t2.tv_sec, t1.tv_usec - t2.tv_usec);
delta.normalize ();
return delta;
}
int operator > (cdevTime t1, cdevTime t2)
{
if (t1.tv_sec > t2.tv_sec) return 1;
else if (t1.tv_sec == t2.tv_sec && t1.tv_usec > t2.tv_usec) return 1;
else return 0;
}
int operator >= (cdevTime t1, cdevTime t2)
{
if (t1.tv_sec > t2.tv_sec) return 1;
else if (t1.tv_sec == t2.tv_sec && t1.tv_usec >= t2.tv_usec) return 1;
else return 0;
}
int operator < (cdevTime t1, cdevTime t2)
{
return t2 > t1;
}
int operator <= (cdevTime t1, cdevTime t2)
{
return t2 >= t1;
}
int operator == (cdevTime t1, cdevTime t2)
{
return t1.tv_sec == t2.tv_sec && t1.tv_usec == t2.tv_usec;
}
int operator != (cdevTime t1, cdevTime t2)
{
return !(t1 == t2);
}