]> mj.ucw.cz Git - libucw.git/blobdiff - lib/timer.c
Added the local copy of the regex library back.
[libucw.git] / lib / timer.c
index 86a2d1984cd06ad5dec760ba572def3978ea8051..761ab30e9be86ab1cb7e7f6613769e6263f70529 100644 (file)
@@ -1,7 +1,7 @@
 /*
- *     UCW Library -- Execution Timing
+ *     UCW Library -- A Simple Millisecond Timer
  *
- *     (c) 1997 Martin Mares <mj@ucw.cz>
+ *     (c) 2007 Martin Mares <mj@ucw.cz>
  *
  *     This software may be freely distributed and used according to the terms
  *     of the GNU Lesser General Public License.
 #include <stdlib.h>
 #include <sys/time.h>
 
-static struct timeval last_tv;
-
-uns
-get_timer(void)
+timestamp_t
+get_timestamp(void)
 {
   struct timeval tv;
-  uns diff;
-
   gettimeofday(&tv, NULL);
-  if (tv.tv_sec < last_tv.tv_sec
-      || tv.tv_sec == last_tv.tv_sec && tv.tv_usec < last_tv.tv_usec)
-    diff = 0;
-  else
-    {
-      if (tv.tv_sec == last_tv.tv_sec)
-       diff = (tv.tv_usec - last_tv.tv_usec + 500) / 1000;
-      else
-       {
-         diff = 1000 * (tv.tv_sec - last_tv.tv_sec - 1);
-         diff += (1000500 - last_tv.tv_usec + tv.tv_usec) / 1000;
-       }
-    }
-  last_tv = tv;
-  return diff;
+  return (timestamp_t)tv.tv_sec * 1000 + tv.tv_usec / 1000;
 }
 
 void
-init_timer(void)
+init_timer(timestamp_t *timer)
 {
-  gettimeofday(&last_tv, NULL);
+  *timer = get_timestamp();
 }
 
-void
-get_last_timeval(struct timeval *tv)
+uns
+get_timer(timestamp_t *timer)
+{
+  timestamp_t t = *timer;
+  *timer = get_timestamp();
+  return MIN(*timer-t, ~0U);
+}
+
+uns
+switch_timer(timestamp_t *old, timestamp_t *new)
 {
-  *tv = last_tv;
+  *new = get_timestamp();
+  return MIN(*new-*old, ~0U);
 }