Main Page | Modules | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members | Related Pages

wvtimeutils.h

00001 /* -*- Mode: C++ -*-
00002  * Worldvisions Weaver Software:
00003  *   Copyright (C) 1997-2002 Net Integration Technologies, Inc.
00004  */
00005 #ifndef __WVTIMEUTILS_H
00006 #define __WVTIMEUTILS_H
00007 
00008 #ifdef _WIN32
00009 #include "winsock2.h"
00010 #include <time.h>
00011 int gettimeofday(struct timeval *tv, struct timezone *tz);
00012 #else
00013 #include <sys/time.h>
00014 #endif
00015 
00017 class WvTime : public timeval
00018 {
00019 public:
00020     WvTime()
00021         { } // WARNING: leaves members uninitialized, like timeval would do!
00022     WvTime(long long t)
00023         { tv_sec = long(t/1000000L); tv_usec = long(t%1000000L); }
00024     WvTime(time_t sec, time_t usec)
00025         { tv_sec = long(sec); tv_usec = long(usec); }
00026     WvTime(const struct timeval &tv)
00027         { tv_sec = tv.tv_sec; tv_usec = tv.tv_usec; }
00028     WvTime(const WvTime &tv)
00029         { tv_sec = tv.tv_sec; tv_usec = tv.tv_usec; }
00030     
00031     operator long long() const
00032         { return ((long long)tv_sec)*1000000LL + tv_usec; }
00033 };
00034 
00035 static const WvTime wvtime_zero(0, 0);
00036 
00042 time_t msecdiff(const WvTime &a, const WvTime &b);
00043 
00045 WvTime wvtime();
00046 
00048 WvTime msecadd(const WvTime &a, time_t msec);
00049 
00051 WvTime tvdiff(const WvTime &a, const WvTime &b);
00052 
00057 inline void normalize(WvTime &tv)
00058 {
00059     tv.tv_sec += tv.tv_usec < 0 ? (tv.tv_usec/1000000)-1 : tv.tv_usec/1000000;
00060     tv.tv_usec %= 1000000;
00061     tv.tv_usec += tv.tv_usec < 0 ? 1000000 : 0;
00062 }
00063 
00065 inline bool operator< (const WvTime &a,
00066                        const WvTime &b)
00067 {
00068     // These normalizes need to be here in case a.tv_sec < b.tv_sec but
00069     // b.tv_usec is big enough to make a < b be false.
00070     // I left this as an inline function but maybe it shouldn't be since
00071     // there are many lines here, feel free to adjust.
00072     WvTime norma = a;
00073     WvTime normb = b;
00074     normalize(norma);
00075     normalize(normb);
00076     return norma.tv_sec < normb.tv_sec || (norma.tv_sec == normb.tv_sec
00077                                            && norma.tv_usec < normb.tv_usec);
00078 }
00079 
00080 inline bool operator== (const WvTime &a,
00081                         const WvTime &b)
00082 {
00083     return a.tv_sec == b.tv_sec && a.tv_usec == b.tv_usec;
00084 }
00085 
00086 #endif // __WVTIMEUTILS_H

Generated on Sun Jul 10 14:05:53 2005 for WvStreams by  doxygen 1.4.0