]> git.tdb.fi Git - libs/core.git/commitdiff
Add conversions from timeval/FILETIME to RawTime
authorMikko Rasa <tdb@tdb.fi>
Sat, 30 Jul 2011 08:14:02 +0000 (11:14 +0300)
committerMikko Rasa <tdb@tdb.fi>
Sat, 30 Jul 2011 08:14:02 +0000 (11:14 +0300)
source/time/rawtime.cpp
source/time/rawtime_private.h
source/time/utils.cpp

index 5c21a683ce295a026b6bd8e4f970950e2d952aba..a299246a0fde69acfb77ed86e948e5265586c1a9 100644 (file)
@@ -1,10 +1,41 @@
 #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;
@@ -20,6 +51,11 @@ timespec rawtime_to_timespec(RawTime raw)
        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
index 566d5a61589e7fa85c6f12b090f2ab8eb78608fc..846a712f70bb48614e300555510f4ec9a191b7bf 100644 (file)
@@ -1,7 +1,9 @@
 #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
index b59a8af0ea944fdde78cf77d4ee5c38cf4b6aa15..8b57695f3343fae361a5c6e8356b42996d854da8 100644 (file)
@@ -23,28 +23,11 @@ TimeStamp now()
 #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
 }