00001
00002
00003
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 { }
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
00064
00065 const WvTime &wvstime();
00066 void wvstime_sync();
00067
00068
00069
00070 void wvstime_sync_forward();
00071
00072
00073
00074 void wvstime_set(const WvTime &);
00075
00076 #endif // __WVTIMEUTILS_H