fixed mantis 266

epicsTime <=> aitTimeStamp conversions dont work on 64 bit hosts
This commit is contained in:
Jeff Hill
2006-06-29 15:28:36 +00:00
parent eff6f305c8
commit b3ff995884
4 changed files with 26 additions and 55 deletions

View File

@@ -200,6 +200,24 @@ aitTimeStamp aitTimeStamp::operator = (const struct epicsTimeStamp &rhs)
return *this;
}
aitTimeStamp :: aitTimeStamp ( const epicsTime & ts )
{
epicsTimeStamp ets = ts;
*this = ets;
}
aitTimeStamp aitTimeStamp :: operator = ( const epicsTime & rhs )
{
epicsTimeStamp ets = rhs;
return *this = ets;
}
aitTimeStamp :: operator epicsTime () const
{
epicsTimeStamp ets = *this;
return epicsTime ( ets );
}
aitTimeStamp::operator struct timespec () const
{
struct timespec ts;

View File

@@ -39,6 +39,7 @@ inline char* strDup(const char* x)
struct timespec;
struct epicsTimeStamp;
class epicsTime;
class gdd;
class epicsShareClass aitTimeStamp {
@@ -102,8 +103,13 @@ public:
//
operator struct epicsTimeStamp () const;
void get (struct epicsTimeStamp &) const;
aitTimeStamp (const struct epicsTimeStamp &ts);
aitTimeStamp operator = (const struct epicsTimeStamp &rhs);
aitTimeStamp (const epicsTimeStamp &ts);
aitTimeStamp operator = (const epicsTimeStamp &rhs);
// conversion to from epicsTime
aitTimeStamp (const epicsTime &ts);
aitTimeStamp operator = (const epicsTime &rhs);
operator epicsTime () const;
static aitTimeStamp getCurrent();

View File

@@ -49,17 +49,6 @@ static const unsigned nSecPerSec = 1000u * uSecPerSec;
static const unsigned nSecPerUSec = 1000u;
static const unsigned secPerMin = 60u;
//
// force this module to include code that can convert
// to GDD's aitTimeStamp, but dont require that it must
// link with gdd. Therefore, gdd.h is not included here.
//
class aitTimeStamp {
public:
epicsUInt32 tv_sec;
epicsUInt32 tv_nsec;
};
static const unsigned tmStructEpochYear = 1900;
static const unsigned epicsEpochYear = 1990;
@@ -378,35 +367,6 @@ epicsTime::epicsTime (const struct timeval &ts)
this->addNanoSec (ts.tv_usec * nSecPerUSec);
}
//
// operator aitTimeStamp ()
//
epicsTime::operator aitTimeStamp () const
{
aitTimeStamp ts;
time_t_wrapper ansiTimeTicks;
ansiTimeTicks = *this;
ts.tv_sec = ansiTimeTicks.ts;
ts.tv_nsec = this->nSec;
return ts;
}
//
// epicsTime (const aitTimeStamp &ts)
//
epicsTime::epicsTime (const aitTimeStamp &ts)
{
time_t_wrapper ansiTimeTicks;
ansiTimeTicks.ts = ts.tv_sec;
*this = epicsTime (ansiTimeTicks);
unsigned long secAdj = ts.tv_nsec / nSecPerSec;
unsigned long nSecAdj = ts.tv_nsec % nSecPerSec;
*this = epicsTime (this->secPastEpoch+secAdj, this->nSec+nSecAdj);
}
// 631152000 (at posix epic) + 2272060800 (btw posix and epics epoch) +
// 15 ( leap seconds )
static const unsigned long epicsEpocSecsPastEpochNTP = 2903212815u;

View File

@@ -35,8 +35,6 @@ struct l_fp; /* NTP timestamp */
#ifdef __cplusplus
class aitTimeStamp; /* GDD*/
/*
* extend ANSI C RTL "struct tm" to include nano seconds within a second
* and a struct tm that is adjusted for the local timezone
@@ -127,11 +125,6 @@ public:
epicsTime ( const l_fp & );
epicsTime & operator = ( const l_fp & );
/* convert to and from GDDs aitTimeStamp format */
operator aitTimeStamp () const;
epicsTime ( const aitTimeStamp & );
epicsTime & operator = ( const aitTimeStamp & );
/* convert to and from WIN32s FILETIME (implemented only on WIN32) */
operator struct _FILETIME () const;
epicsTime ( const struct _FILETIME & );
@@ -310,12 +303,6 @@ inline epicsTime & epicsTime::operator = ( const struct timespec & rhs )
return *this;
}
inline epicsTime & epicsTime::operator = ( const aitTimeStamp & rhs )
{
*this = epicsTime ( rhs );
return *this;
}
inline epicsTime & epicsTime::operator = ( const epicsTimeStamp & rhs )
{
*this = epicsTime ( rhs );