ASSA::TimeVal Class Reference

#include <TimeVal.h>

Collaboration diagram for ASSA::TimeVal:

Collaboration graph
[legend]
List of all members.

Public Types

enum  { gmt, loc }

Public Member Functions

 TimeVal ()
 Default constructor.
 TimeVal (long sec_, long msec_)
 Constructor from seconds/microseconds pair.
 TimeVal (double d_)
 Constructor from double.
 TimeVal (const timeval &tv_)
 Constructor from struct timeval.
 TimeVal (const TimeVal &tv_)
 Copy constructor.
 operator double () const
 Implicit conversion to double.
void sec (long sec_)
 Set seconds.
long sec (void) const
 Get secons.
void msec (long msec_)
 Set microseconds.
long msec (void) const
 Get microseconds.
long millisec () const
 Convert tv_usec's microseconds (=1/1,000,000 sec) to milliseconds (=1/1,000 sec).
void tz (int tz_)
 Set timezone.
int tz (void) const
 Get timezone.
TimeValoperator= (const TimeVal &tv_)
TimeValoperator+= (const TimeVal &rhs_)
 Addition.
TimeValoperator-= (const TimeVal &rhs_)
 Substraction.
bool operator< (const TimeVal &rhs_) const
 Comparison.
bool operator== (const TimeVal &rhs_) const
 Equality.
string fmtString (const char *fmt_=NULL) const
 Format timeval structure into readable format.
string fmt_hh_mm_ss () const
 Format timeval structure in readable format HH:MM:SS.
string fmt_hh_mm_ss_mls () const
 Format timeval structure in readable format HH:MM:SS.MLS.
string fmt_mm_ss () const
 Format timeval structure in readable format MM:SS.
string fmt_mm_ss_mls () const
 Format timeval structure in readable format MM:SS.MLS.
string fmt_ss_mls () const
 Format timeval structure in readable format SS.MLS.
void dump_to_log (const string &name_="") const
 Dump value of struct timeval to the log file with mask TRACE = DBG_APP15.

Static Public Member Functions

static TimeVal zeroTime ()
 Static that returns zero timeval: {0,0}.
static TimeVal gettimeofday ()
 Shields off underlying OS differences in getting current time.

Protected Member Functions

void init (long, long, int)
 Internal initialization common to most constructors.

Private Member Functions

void normalize ()
 Normalization after arithmetic operation.

Private Attributes

int m_tz
 Time zone.

Static Private Attributes

static TimeVal m_zero
 Zero time value.

Friends

TimeVal operator+ (const TimeVal &lhs_, const TimeVal &rhs_)
 Addition.
TimeVal operator- (const TimeVal &lhs_, const TimeVal &rhs_)
 Substraction.
bool operator> (const TimeVal &lhs_, const TimeVal &rhs_)
 Comparison.
bool operator!= (const TimeVal &lhs_, const TimeVal &rhs_)
 Comparison.
bool operator<= (const TimeVal &lhs_, const TimeVal &rhs_)
 Comparison.
bool operator>= (const TimeVal &lhs_, const TimeVal &rhs_)
 Comparison.

Detailed Description

Definition at line 30 of file TimeVal.h.


Member Enumeration Documentation

anonymous enum
 

Enumerator:
gmt  GMT.
loc  Local Time Zone.

Definition at line 33 of file TimeVal.h.

00033          { 
00034         gmt,                    
00035         loc                     
00036     };


Constructor & Destructor Documentation

ASSA::TimeVal::TimeVal  )  [inline]
 

Default constructor.

Sets time to 0 sec. 0 usecs. To get current time, use TimeVal (gettimeofday());

Definition at line 196 of file TimeVal.h.

References gmt, and init().

00197 {
00198     init (0, 0, gmt);
00199 }

ASSA::TimeVal::TimeVal long  sec_,
long  msec_
[inline]
 

Constructor from seconds/microseconds pair.

Definition at line 203 of file TimeVal.h.

References gmt, and init().

00204 {
00205     init (sec_, msec_, gmt);
00206 }

ASSA::TimeVal::TimeVal double  d_  )  [inline]
 

Constructor from double.

Definition at line 210 of file TimeVal.h.

References normalize().

00211     : m_tz (gmt)
00212 {
00213     long l = long(d_);
00214     tv_sec = l;
00215     tv_usec = (long) ((d_ - double(l))*1000000.0);
00216     normalize();
00217 }

ASSA::TimeVal::TimeVal const timeval &  tv_  )  [inline]
 

Constructor from struct timeval.

Definition at line 221 of file TimeVal.h.

References gmt, and init().

00222 {
00223     init (tv_.tv_sec, tv_.tv_usec, gmt);
00224 }

ASSA::TimeVal::TimeVal const TimeVal tv_  )  [inline]
 

Copy constructor.

Definition at line 228 of file TimeVal.h.

References init(), and m_tz.

00229 {
00230     init (tv_.tv_sec, tv_.tv_usec, tv_.m_tz);
00231 }


Member Function Documentation

void TimeVal::dump_to_log const string &  name_ = ""  )  const
 

Dump value of struct timeval to the log file with mask TRACE = DBG_APP15.

Definition at line 227 of file TimeVal.cpp.

References DL, fmt_mm_ss_mls(), ASSA::Singleton< Logger >::get_instance(), millisec(), msec(), ASSA::REACT, sec(), and trace.

00228 {
00229     static const char self []="TimeVal::dump_to_log"; trace(self);
00230 
00231     if (Logger::get_instance ()->group_enabled (REACT)) 
00232     {
00233         DL((REACT,"=== TimeVal %s ===\n", var_name_.c_str ()));
00234         DL((REACT,"MM:SS:MLS = %s\n", fmt_mm_ss_mls ().c_str ()));
00235         DL((REACT,"tv_sec = %d, tv_msec = %d, tv_mls = %d\n",
00236             sec (), msec (), millisec ()));
00237         DL((REACT,"(double)  = %7.4f\n", double (*this)));
00238         DL((REACT,"==================\n"));
00239     }
00240 }

string ASSA::TimeVal::fmt_hh_mm_ss  )  const [inline]
 

Format timeval structure in readable format HH:MM:SS.

Definition at line 248 of file TimeVal.h.

References fmtString().

00249 {
00250     return fmtString ("%T");
00251 }

string TimeVal::fmt_hh_mm_ss_mls  )  const
 

Format timeval structure in readable format HH:MM:SS.MLS.

Definition at line 170 of file TimeVal.cpp.

References gmt, m_tz, and millisec().

00171 {
00172     struct tm ct;
00173     char buf [80];
00174     memset (buf, 0, 80);
00175 
00176     if (m_tz == gmt)
00177         ct = *( localtime ((const time_t*) &tv_sec) );
00178     else
00179         ct = *( gmtime ((const time_t*) &tv_sec) );
00180 
00181     strftime (buf, 80, "%H:%M:%S", &ct);
00182     sprintf (buf + strlen(buf), ".%03ld", millisec ());
00183 
00184     return string (buf);
00185 }

string ASSA::TimeVal::fmt_mm_ss  )  const [inline]
 

Format timeval structure in readable format MM:SS.

Definition at line 255 of file TimeVal.h.

References fmtString().

00256 {
00257     return fmtString ("%M:%S");
00258 }

string TimeVal::fmt_mm_ss_mls  )  const
 

Format timeval structure in readable format MM:SS.MLS.

Definition at line 189 of file TimeVal.cpp.

References gmt, m_tz, and millisec().

Referenced by ASSA::Timer::dump(), and dump_to_log().

00190 {
00191     struct tm ct;
00192     char buf [80];
00193     memset (buf, 0, 80);
00194 
00195     if (m_tz == gmt)
00196         ct = *( localtime ((const time_t*) &tv_sec) );
00197     else
00198         ct = *( gmtime ((const time_t*) &tv_sec) );
00199 
00200     strftime (buf, 80, "%M:%S", &ct);
00201     sprintf (buf + strlen(buf), ".%03ld", millisec ());
00202 
00203     return string (buf);
00204 }

string TimeVal::fmt_ss_mls  )  const
 

Format timeval structure in readable format SS.MLS.

Definition at line 208 of file TimeVal.cpp.

References gmt, m_tz, and millisec().

00209 {
00210     struct tm ct;
00211     char buf [80];
00212     memset (buf, 0, 80);
00213 
00214     if (m_tz == gmt)
00215         ct = *( localtime ((const time_t*) &tv_sec) );
00216     else
00217         ct = *( gmtime ((const time_t*) &tv_sec) );
00218 
00219     strftime (buf, 80, "%S", &ct);
00220     sprintf (buf + strlen(buf), ".%03ld", millisec ());
00221 
00222     return string (buf);
00223 }

string TimeVal::fmtString const char *  fmt_ = NULL  )  const
 

Format timeval structure into readable format.

Default format is CCYY/DDD HH:MM:SS.MMM which is de fasco for the software. To get something different, pass fmt_ format string as specified by strftime(3). Popular format is "%c" which will return something like: "Fri Oct 1 10:54:27 1999". Note that timezone aspect of formatting time is controlled by tz() member function.

Parameters:
fmt_ Format string as in strftime(3)
Returns:
Formatted string.

Definition at line 146 of file TimeVal.cpp.

References gmt, and m_tz.

Referenced by ASSA::Logger_Impl::add_timestamp(), ASSA::Timer::dump(), fmt_hh_mm_ss(), fmt_mm_ss(), and ASSA::Reactor::registerTimerHandler().

00147 {
00148     struct tm ct;
00149     char buf[80];
00150     memset (buf, 0, 80);
00151 
00152     if (m_tz == gmt)
00153         ct = *( localtime ((const time_t*) &tv_sec) );
00154     else
00155         ct = *( gmtime ((const time_t*) &tv_sec) );
00156 
00157     if (fmt_ == NULL) {
00158         strftime (buf, 80, "%Y/%j %H:%M:%S", &ct);
00159         sprintf (buf + strlen(buf),
00160              ".%03ld", (tv_usec %1000000)/1000);
00161     }
00162     else {
00163         strftime(buf, 80, fmt_, &ct);
00164     }
00165     return string (buf);
00166 }

TimeVal TimeVal::gettimeofday  )  [static]
 

Shields off underlying OS differences in getting current time.

Returns:
time of the day as timeval

Definition at line 44 of file TimeVal.cpp.

References EPOCHFILETIME.

Referenced by ASSA::Logger_Impl::add_timestamp(), ASSA::Reactor::dispatch(), ASSA::Reactor::registerTimerHandler(), ASSA::Timer::rescheduleExpirationTime(), ASSA::Reactor::waitForEvents(), and ASSA::TimerCountdown::~TimerCountdown().

00045 { 
00046     timeval tv;
00047     
00048 #ifdef WIN32
00049     FILETIME        ft;
00050     LARGE_INTEGER   li;
00051     __int64         t;
00052     static int      tzflag;
00053 
00054     GetSystemTimeAsFileTime(&ft);
00055     li.LowPart  = ft.dwLowDateTime;
00056     li.HighPart = ft.dwHighDateTime;
00057     t  = li.QuadPart;       /* In 100-nanosecond intervals */
00058     t -= EPOCHFILETIME;     /* Offset to the Epoch time */
00059     t /= 10;                /* In microseconds */
00060     tv.tv_sec  = (long)(t / 1000000);
00061     tv.tv_usec = (long)(t % 1000000); 
00062 #else
00063 	::gettimeofday (&tv, 0);
00064 #endif
00065     return tv;
00066 }

void ASSA::TimeVal::init long  ,
long  ,
int 
[inline, protected]
 

Internal initialization common to most constructors.

Definition at line 186 of file TimeVal.h.

References m_tz, and normalize().

Referenced by operator=(), and TimeVal().

00187 {
00188     tv_sec = s_;
00189     tv_usec = ms_;
00190     m_tz = tz_;
00191     normalize ();
00192 }

long ASSA::TimeVal::millisec  )  const [inline]
 

Convert tv_usec's microseconds (=1/1,000,000 sec) to milliseconds (=1/1,000 sec).

Definition at line 241 of file TimeVal.h.

References msec().

Referenced by dump_to_log(), fmt_hh_mm_ss_mls(), fmt_mm_ss_mls(), and fmt_ss_mls().

00242 {
00243     return (msec () % 1000000) / 1000;
00244 }

long ASSA::TimeVal::msec void   )  const [inline]
 

Get microseconds.

Definition at line 73 of file TimeVal.h.

Referenced by dump_to_log(), and millisec().

00073 { return tv_usec; }

void ASSA::TimeVal::msec long  msec_  )  [inline]
 

Set microseconds.

Definition at line 70 of file TimeVal.h.

Referenced by ASSA::Logger_Impl::add_timestamp(), and ASSA::Reactor::registerTimerHandler().

00070 { tv_usec = msec_; }

void TimeVal::normalize  )  [private]
 

Normalization after arithmetic operation.

Definition at line 112 of file TimeVal.cpp.

References ONE_SECOND.

Referenced by init(), ASSA::operator+(), operator+=(), ASSA::operator-(), operator-=(), and TimeVal().

00113 {
00114     if (tv_usec >= ONE_SECOND) {
00115         do {
00116             tv_sec++;
00117             tv_usec -= ONE_SECOND;
00118         }
00119         while (tv_usec >= ONE_SECOND);
00120     }
00121     else if (tv_usec <= -ONE_SECOND) {
00122         do {
00123             tv_sec--;
00124             tv_usec += ONE_SECOND;
00125         }
00126         while (tv_usec <= -ONE_SECOND);
00127     }
00128 
00129     if (tv_sec >= 1 && tv_usec < 0) {
00130         tv_sec--;
00131         tv_usec += ONE_SECOND;
00132     }
00133     else if (tv_sec < 0 && tv_usec > 0) {
00134         tv_sec++;
00135         tv_usec -= ONE_SECOND;
00136     }
00137 }

ASSA::TimeVal::operator double  )  const [inline]
 

Implicit conversion to double.

Definition at line 234 of file TimeVal.h.

00235 { 
00236     return tv_sec + tv_usec / 1000000.0;
00237 }

TimeVal & TimeVal::operator+= const TimeVal rhs_  ) 
 

Addition.

Definition at line 74 of file TimeVal.cpp.

References normalize(), and ONE_SECOND.

00075 {
00076     tv_sec += rhs_.tv_sec;
00077     tv_usec += rhs_.tv_usec;
00078 
00079     if (tv_usec >= ONE_SECOND) {
00080         tv_usec -= ONE_SECOND;
00081         tv_sec++;
00082     } 
00083     else if (tv_sec >= 1 && tv_usec < 0) {
00084         tv_usec += ONE_SECOND;
00085         tv_sec--;
00086     }
00087     normalize ();
00088     return *this;
00089 }

TimeVal & TimeVal::operator-= const TimeVal rhs_  ) 
 

Substraction.

Definition at line 93 of file TimeVal.cpp.

References normalize(), and ONE_SECOND.

00094 {
00095     tv_sec -= rhs_.tv_sec;
00096     tv_usec -= rhs_.tv_usec;
00097 
00098     if (tv_usec < 0) {
00099         tv_usec += ONE_SECOND;
00100         tv_sec--;
00101     } 
00102     else if (tv_usec >= ONE_SECOND) {
00103         tv_usec -= ONE_SECOND;
00104         tv_sec++;
00105     }
00106     normalize ();
00107     return *this;
00108 }

bool ASSA::TimeVal::operator< const TimeVal rhs_  )  const [inline]
 

Comparison.

Definition at line 292 of file TimeVal.h.

00293 {
00294     return (tv_sec < rhs_.tv_sec
00295         || (tv_sec == rhs_.tv_sec && tv_usec < rhs_.tv_usec) ) ;
00296 }

TimeVal & ASSA::TimeVal::operator= const TimeVal tv_  )  [inline]
 

Definition at line 266 of file TimeVal.h.

References init(), and m_tz.

00267 {
00268     init (tv_.tv_sec, tv_.tv_usec, tv_.m_tz);
00269     return *this;
00270 }

bool ASSA::TimeVal::operator== const TimeVal rhs_  )  const [inline]
 

Equality.

Definition at line 300 of file TimeVal.h.

00301 {
00302     return !(*this < rhs_ || rhs_ < *this);
00303 }

long ASSA::TimeVal::sec void   )  const [inline]
 

Get secons.

Definition at line 67 of file TimeVal.h.

Referenced by dump_to_log().

00067 { return tv_sec; }

void ASSA::TimeVal::sec long  sec_  )  [inline]
 

Set seconds.

Definition at line 64 of file TimeVal.h.

Referenced by ASSA::Reactor::registerTimerHandler().

00064 { tv_sec = sec_; }

int ASSA::TimeVal::tz void   )  const [inline]
 

Get timezone.

Definition at line 84 of file TimeVal.h.

References m_tz.

00084 { return m_tz; }

void ASSA::TimeVal::tz int  tz_  )  [inline]
 

Set timezone.

Definition at line 81 of file TimeVal.h.

References m_tz.

Referenced by ASSA::Logger_Impl::add_timestamp().

00081 { m_tz = tz_; }

static TimeVal ASSA::TimeVal::zeroTime  )  [inline, static]
 

Static that returns zero timeval: {0,0}.

Definition at line 157 of file TimeVal.h.

References m_zero.

Referenced by ASSA::TimerCountdown::~TimerCountdown().

00157 { return m_zero; }


Friends And Related Function Documentation

bool operator!= const TimeVal lhs_,
const TimeVal rhs_
[friend]
 

Comparison.

Definition at line 312 of file TimeVal.h.

00313 {
00314     return !( lhs_ == rhs_ );
00315 }

TimeVal operator+ const TimeVal lhs_,
const TimeVal rhs_
[friend]
 

Addition.

Definition at line 273 of file TimeVal.h.

00274 {
00275     TimeVal temp(lhs_);
00276     temp += rhs_;
00277     temp.normalize ();
00278     return temp;
00279 }

TimeVal operator- const TimeVal lhs_,
const TimeVal rhs_
[friend]
 

Substraction.

Definition at line 282 of file TimeVal.h.

00283 {
00284     TimeVal temp(lhs_);
00285     temp -= rhs_;
00286     temp.normalize ();
00287     return temp;
00288 }

bool operator<= const TimeVal lhs_,
const TimeVal rhs_
[friend]
 

Comparison.

Definition at line 318 of file TimeVal.h.

00319 {
00320     return !(rhs_ < lhs_);
00321 }

bool operator> const TimeVal lhs_,
const TimeVal rhs_
[friend]
 

Comparison.

Definition at line 306 of file TimeVal.h.

00307 {
00308     return rhs_ < lhs_;
00309 }

bool operator>= const TimeVal lhs_,
const TimeVal rhs_
[friend]
 

Comparison.

Definition at line 324 of file TimeVal.h.

00325 {
00326     return !(lhs_ < rhs_);
00327 }


Member Data Documentation

int ASSA::TimeVal::m_tz [private]
 

Time zone.

Definition at line 175 of file TimeVal.h.

Referenced by fmt_hh_mm_ss_mls(), fmt_mm_ss_mls(), fmt_ss_mls(), fmtString(), init(), operator=(), TimeVal(), and tz().

TimeVal TimeVal::m_zero [static, private]
 

Zero time value.

Definition at line 178 of file TimeVal.h.

Referenced by zeroTime().


The documentation for this class was generated from the following files:
Generated on Sun Aug 13 15:08:22 2006 for libassa by  doxygen 1.4.6