#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