#include "rawtime.h"
#include "rawtime_private.h"
+namespace {
+
+#ifdef WIN32
+/// Returns the unixtime epoch as filetime
+Msp::Time::RawTime get_epoch()
+{
+ SYSTEMTIME st;
+ st.wYear = 1970;
+ st.wMonth = 1;
+ st.wDay = 1;
+ st.wHour = 0;
+ st.wMinute = 0;
+ st.wSecond = 0;
+ st.wMilliseconds = 0;
+
+ FILETIME ft;
+ SystemTimeToFileTime(&st, &ft);
+ return (ft.dwLowDateTime+(static_cast<Msp::Time::RawTime>(ft.dwHighDateTime)<<32))/10;
+}
+#endif
+
+}
+
+
namespace Msp {
namespace Time {
-#ifndef WIN32
+#ifdef WIN32
+RawTime filetime_to_rawtime(const FILETIME &ft)
+{
+ static RawTime epoch = get_epoch();
+
+ return (ft.dwLowDateTime+(static_cast<RawTime>(ft.dwHighDateTime)<<32))/10-epoch;
+}
+#else
timeval rawtime_to_timeval(RawTime raw)
{
timeval tv;
ts.tv_nsec = (raw%1000000)*1000;
return ts;
}
+
+RawTime timeval_to_rawtime(const timeval &tv)
+{
+ return tv.tv_sec*1000000LL+tv.tv_usec;
+}
#endif
} // namespace Time
#ifndef MSP_TIME_RAWTIME_PRIVATE_H_
#define MSP_TIME_RAWTIME_PRIVATE_H_
-#ifndef WIN32
+#ifdef WIN32
+#include <windows.h>
+#else
#include <sys/time.h>
#endif
#include "rawtime.h"
namespace Msp {
namespace Time {
-#ifndef WIN32
-// Internal conversion utilities, not intended for public use
+#ifdef WIN32
+RawTime filetime_to_rawtime(const FILETIME &);
+#else
timeval rawtime_to_timeval(RawTime);
timespec rawtime_to_timespec(RawTime);
+RawTime timeval_to_rawtime(const timeval &);
#endif
} // namespace Time
#ifndef WIN32
timeval tv;
gettimeofday(&tv, 0);
- return TimeStamp(tv.tv_sec*1000000LL+tv.tv_usec);
+ return TimeStamp(timeval_to_rawtime(tv));
#else
- static RawTime epoch = 0;
- if(!epoch)
- {
- SYSTEMTIME st;
- st.wYear = 1970;
- st.wMonth = 1;
- st.wDay = 1;
- st.wHour = 0;
- st.wMinute = 0;
- st.wSecond = 0;
- st.wMilliseconds = 0;
-
- FILETIME ft;
- SystemTimeToFileTime(&st, &ft);
- epoch = (ft.dwLowDateTime+(static_cast<RawTime>(ft.dwHighDateTime)<<32))/10;
- }
-
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
- return TimeStamp((ft.dwLowDateTime+(static_cast<RawTime>(ft.dwHighDateTime)<<32))/10-epoch);
+ return TimeStamp(filetime_to_rawtime(ft));
#endif
}