]> rtime.felk.cvut.cz Git - frescor/frsh-include.git/blobdiff - timespec_operations.h
cpu id default in conf params
[frescor/frsh-include.git] / timespec_operations.h
index 9d6f2fe76ec64d3499af75402a8ecdfbe9898bd7..2a4cf272774e09a18a87377aabed39ab5787b589 100644 (file)
@@ -170,38 +170,54 @@ do { \
 // msec2timespec //
 //---------------//
 
-static inline void msec2timespec(long msec, struct timespec *timespec)
+static inline struct timespec msec2timespec(long msec)
 {
-    memset(timespec, 0, sizeof(struct timespec));
+    struct timespec result = {-1, -1};
 
     if (msec >= 1000) {
-        timespec->tv_sec = msec/1000;
-        timespec->tv_nsec = (msec % 1000) * 1000000;
+        result.tv_sec = msec/1000;
+        result.tv_nsec = (msec % 1000) * 1000000;
     } else {
-        timespec->tv_sec = 0;
-        timespec->tv_nsec = msec * 1000000;
+        result.tv_sec = 0;
+        result.tv_nsec = msec * 1000000;
     }
+
+    return result;
 }
 
-static inline void timespec2msec(const struct timespec *timespec, long *msec)
+static inline long timespec2msec(const struct timespec *timespec)
 {
-    *msec = 0;
+    
+    return (timespec->tv_sec % 2147482) * 1000 + timespec->tv_nsec/1000000;
+}
 
-    /* We convert first the seconds checking for a possible overflow */
-    if (timespec->tv_sec < 2147482)
-    {
-        *msec = timespec->tv_sec*1000;
-    }
-    else
-    {
-        *msec = -1;
-        return;
-    }
 
-    /* Now we add the contribution from the msecs with a truncation */
-    *msec += (timespec->tv_nsec/1000000);
+#define HOURS_IN_MSECS 3600000
+#define MINUTES_IN_MSECS 60000
+
+#define HOURS_IN_TS     1000000
+#define MINUTES_IN_TS    100000
+
+static inline long timespec2msects(const struct timespec *timespec)
+{
+    long msec_total = -1;
+    long minutes = -1;
+    long hours = -1;
+
+    long remainder_msecs = -1;
+    long timestamp = -1;
+
+    msec_total = (timespec->tv_sec % 2147482) * 1000 + timespec->tv_nsec/1000000;
+
+    hours = msec_total / HOURS_IN_MSECS;
+    minutes = (msec_total % HOURS_IN_MSECS) / MINUTES_IN_MSECS;
+    remainder_msecs = ( (msec_total % HOURS_IN_MSECS) % MINUTES_IN_MSECS);
+    
+    timestamp = hours*HOURS_IN_TS + minutes*MINUTES_IN_TS + remainder_msecs;
 
+    return timestamp;
 }
+    
 
 //------------------------//
 // timespec_lessthan_msec //
@@ -211,7 +227,7 @@ static inline int timespec_lessthan_msec(struct timespec *timespec, long msec)
 {
     struct timespec msec_timespec = {0, 0};
 
-    msec2timespec(msec, &msec_timespec);
+    msec_timespec = msec2timespec(msec);
     return smaller_timespec(timespec, &msec_timespec);
 }
 
@@ -223,7 +239,7 @@ static inline void msec_addto_timespec(long msec, struct timespec *timespec)
 {
     struct timespec msec_timespec = {0, 0};
 
-    msec2timespec(msec, &msec_timespec);
+    msec_timespec = msec2timespec(msec);
     incr_timespec(timespec, &msec_timespec);
 }