]> git.tdb.fi Git - libs/core.git/blobdiff - source/time/utils.cpp
Clean up after the timedelta.h/units.h merge
[libs/core.git] / source / time / utils.cpp
index 49acd7791180616be36d56f29f0af99a30a55e42..9c643cf8b2dec5634c703474d5b3e976a58f3346 100644 (file)
@@ -1,58 +1,40 @@
-/*
-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>
+#include <cerrno>
 #endif
+#include <msp/core/systemerror.h>
+#include "datetime.h"
+#include "rawtime_private.h"
 #include "timedelta.h"
 #include "timestamp.h"
-#include "units.h"
 #include "utils.h"
 
+using namespace std;
+
 namespace Msp {
 namespace Time {
 
-/**
-Returns the current timestamp.
-*/
 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 int64_t 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+(int64_t)ft.dwHighDateTime<<32)/10;
-       }
-       
        FILETIME ft;
        GetSystemTimeAsFileTime(&ft);
-       return TimeStamp((ft.dwLowDateTime+(int64_t)ft.dwHighDateTime<<32)/10-epoch);
+       return TimeStamp(filetime_to_rawtime(ft));
 #endif
 }
 
-/**
-Returns the CPU time used by the program so far.
-*/
+string format_now(const string &fmt)
+{
+       return DateTime(now()).format(fmt);
+}
+
 TimeDelta get_cpu_time()
 {
 #ifndef WIN32
@@ -65,18 +47,15 @@ TimeDelta get_cpu_time()
 #endif
 }
 
-/**
-Sleeps for the given time.
-*/
-int sleep(const TimeDelta &d)
+void sleep(const TimeDelta &d)
 {
 #ifndef WIN32
-       timespec ts;
-       d.fill_timespec(ts);
-       return nanosleep(&ts, 0);
+       timespec ts = rawtime_to_timespec(d.raw());
+       while(nanosleep(&ts, 0)==-1)
+               if(errno!=EINTR)
+                       throw system_error("nanosleep");
 #else
-       Sleep(d/msec);
-       return 0;
+       Sleep((DWORD)(d/msec));
 #endif
 }