]> git.tdb.fi Git - libs/core.git/commitdiff
Select RawTime definition based on compiler, not platform
authorMikko Rasa <tdb@tdb.fi>
Sat, 28 May 2011 12:57:54 +0000 (15:57 +0300)
committerMikko Rasa <tdb@tdb.fi>
Sat, 28 May 2011 13:00:05 +0000 (16:00 +0300)
Put time(val|spec) conversion functions to rawtime.h
Use conversion operators in favor of fill_* methods
Add conversions to TimeStamp as well

source/time/rawtime.cpp [new file with mode: 0644]
source/time/rawtime.h
source/time/timedelta.h
source/time/timestamp.h
source/time/utils.cpp

diff --git a/source/time/rawtime.cpp b/source/time/rawtime.cpp
new file mode 100644 (file)
index 0000000..427eb33
--- /dev/null
@@ -0,0 +1,25 @@
+#include "rawtime.h"
+
+namespace Msp {
+namespace Time {
+
+#ifndef WIN32
+timeval rawtime_to_timeval(RawTime raw)
+{
+       timeval tv;
+       tv.tv_sec = raw/1000000;
+       tv.tv_usec = raw%1000000;
+       return tv;
+}
+
+timespec rawtime_to_timespec(RawTime raw)
+{
+       timespec ts;
+       ts.tv_sec = raw/1000000;
+       ts.tv_nsec = (raw%1000000)*1000;
+       return ts;
+}
+#endif
+
+} // namespace Time
+} // namespace Msp
index afa3c949a08221088fbe5965c708c6b3f6a4e294..fb6a383fb4b4575a51bead802150bb394c85ace4 100644 (file)
@@ -9,16 +9,22 @@ Distributed under the LGPL
 #define MSP_TIME_RAWTIME_H_
 
 #ifndef WIN32
-#include <stdint.h>
+#include <sys/time.h>
 #endif
 
 namespace Msp {
 namespace Time {
 
-#ifdef WIN32
+#ifdef MSVC
 typedef __int64 RawTime;
 #else
-typedef int64_t RawTime;
+typedef long long RawTime;
+#endif
+
+#ifndef WIN32
+// Internal conversion utilities, not intended for public use
+timeval rawtime_to_timeval(RawTime);
+timespec rawtime_to_timespec(RawTime);
 #endif
 
 } // namespace Time
index 0a9ddd972a0646ea441ce96f2b6a84d18abc617f..3a6e8eafdbdf34a92d77c0747e1f99a5b640a662 100644 (file)
@@ -9,7 +9,6 @@ Distributed under the LGPL
 #define MSP_TIME_TIMEDELTA_H_
 
 #include <time.h>
-#include <sys/time.h>
 #include <msp/strings/lexicalcast.h>
 #include "rawtime.h"
 
@@ -43,16 +42,6 @@ public:
        */
        RawTime raw() const { return usec; }
 
-#ifndef WIN32
-       /**
-       Fills in a timespec struct.  To get a meaningful scalar value from the
-       TimeDelta, divide with one of the values in units.h.
-       */
-       void fill_timespec(timespec &ts) const { ts.tv_sec=usec/1000000; ts.tv_nsec = (usec%1000000)*1000; }
-
-       void fill_timeval(timeval &tv) const { tv.tv_sec=usec/1000000; tv.tv_usec = usec%1000000; }
-#endif
-
        TimeDelta operator+(const TimeDelta &t) const  { return TimeDelta(usec+t.usec); }
        TimeDelta &operator+=(const TimeDelta &t)      { usec+=t.usec; return *this; }
        TimeDelta operator-(const TimeDelta &t) const  { return TimeDelta(usec-t.usec); }
@@ -77,6 +66,11 @@ public:
        bool      operator==(const TimeDelta &t) const { return usec==t.usec; }
        bool      operator!=(const TimeDelta &t) const { return usec!=t.usec; }
 
+#ifndef WIN32
+       operator timeval() const { return rawtime_to_timeval(usec); }
+       operator timespec() const { return rawtime_to_timespec(usec); }
+#endif
+
        operator const void *() const                  { return usec ? this : 0; }
 };
 
index 5dcb0763dbdf3fd8cd31c069057a6a283372cb73..8c16ee32c28d598f17cb1a9c935e315de2f0be45 100644 (file)
@@ -61,6 +61,11 @@ public:
 
        operator const void *() const                  { return usec>0 ? this : 0; }
 
+#ifndef WIN32
+       operator timeval() const { return rawtime_to_timeval(usec); }
+       operator timespec() const { return rawtime_to_timespec(usec); }
+#endif
+
        static TimeStamp from_unixtime(time_t t) { return TimeStamp(t*1000000LL); }
 };
 
index 1d0b8d0ec93d9d1fc08fa5041099ba34349d5d81..cd2e70f3b88451ad4c1169421e5ffa78434c69aa 100644 (file)
@@ -81,8 +81,7 @@ 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((DWORD)(d/msec));