]> git.tdb.fi Git - libs/core.git/blobdiff - source/time/utils.cpp
Drop copyright and license notices from source files
[libs/core.git] / source / time / utils.cpp
index 00c389d93acd4d8ae55edf14d3cd042e420e7da1..123b2d9192c11edfb2fda29f1a7aa22d6cb6cd66 100644 (file)
@@ -1,15 +1,17 @@
-/*
-This file is part of libmspframework     
-Copyright © 2006  Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
+#ifdef WIN32
+#include <windows.h>
+#else
 #include <sys/resource.h>
 #include <sys/time.h>
+#endif
+#include "datetime.h"
 #include "timedelta.h"
 #include "timestamp.h"
 #include "units.h"
 #include "utils.h"
 
+using namespace std;
+
 namespace Msp {
 namespace Time {
 
@@ -18,9 +20,37 @@ Returns the current timestamp.
 */
 TimeStamp now()
 {
+#ifndef WIN32
        timeval tv;
        gettimeofday(&tv, 0);
        return TimeStamp(tv.tv_sec*1000000LL+tv.tv_usec);
+#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);
+#endif
+}
+
+string format_now(const string &fmt)
+{
+       return DateTime(now()).format(fmt);
 }
 
 /**
@@ -28,9 +58,14 @@ Returns the CPU time used by the program so far.
 */
 TimeDelta get_cpu_time()
 {
+#ifndef WIN32
        rusage ru;
        getrusage(RUSAGE_SELF, &ru);
        return (ru.ru_utime.tv_sec+ru.ru_stime.tv_sec)*sec + (ru.ru_utime.tv_usec+ru.ru_stime.tv_usec)*usec;
+#else
+       //XXX Figure out the function to use on Win32
+       return TimeDelta();
+#endif
 }
 
 /**
@@ -39,11 +74,10 @@ Sleeps for the given time.
 int sleep(const TimeDelta &d)
 {
 #ifndef WIN32
-       timespec ts;
-       d.fill_timespec(ts);
+       timespec ts = d;
        return nanosleep(&ts, 0);
 #else
-       Sleep(d/msec);
+       Sleep((DWORD)(d/msec));
        return 0;
 #endif
 }