X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Ftime%2Frawtime.cpp;h=a299246a0fde69acfb77ed86e948e5265586c1a9;hp=427eb335b29102edf5c67a4137647fcb743bc76f;hb=b4806214e905752617691f851717033fd3f266c2;hpb=f5951e7166dfd7028b95d7c780406f65afc5cdfc diff --git a/source/time/rawtime.cpp b/source/time/rawtime.cpp index 427eb33..a299246 100644 --- a/source/time/rawtime.cpp +++ b/source/time/rawtime.cpp @@ -1,9 +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(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(ft.dwHighDateTime)<<32))/10-epoch; +} +#else timeval rawtime_to_timeval(RawTime raw) { timeval tv; @@ -19,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