diff options
author | Sander Vrijders <[email protected]> | 2018-06-13 13:40:48 +0200 |
---|---|---|
committer | Sander Vrijders <[email protected]> | 2018-06-13 13:40:48 +0200 |
commit | 3a570b35c653cfe6f40fab67e944e9bd44065976 (patch) | |
tree | d60efd428830d8ba0e774c6bc7b2d33ce0818754 /include | |
parent | 4afcef3d89a56a9fe5b340af215a587f5aedac18 (diff) | |
parent | 47c922f1360990f2da8363aafa0798551a2128ef (diff) | |
download | ouroboros-3a570b35c653cfe6f40fab67e944e9bd44065976.tar.gz ouroboros-3a570b35c653cfe6f40fab67e944e9bd44065976.zip |
Merge branch 'testing' into be
Diffstat (limited to 'include')
-rw-r--r-- | include/ouroboros/time_utils.h | 74 |
1 files changed, 57 insertions, 17 deletions
diff --git a/include/ouroboros/time_utils.h b/include/ouroboros/time_utils.h index d62b4c06..1d02cb1f 100644 --- a/include/ouroboros/time_utils.h +++ b/include/ouroboros/time_utils.h @@ -36,7 +36,6 @@ #include <time.h> #include <sys/time.h> -#include <limits.h> /* LONG_MAX */ /* functions for timespecs */ #define ts_diff_ns(t0, tx) (((tx)->tv_sec - (t0)->tv_sec) * BILLION \ @@ -53,29 +52,70 @@ + ((tx)->tv_usec - (t0)->tv_usec) / MILLION) /* functions for timespecs */ -int ts_add(const struct timespec * t, - const struct timespec * intv, - struct timespec * res); -int ts_diff(const struct timespec * t, - const struct timespec * intv, - struct timespec * res); +#define ts_add(t, intv, res) \ + do { \ + time_t nanos = 0; \ + nanos = (t)->tv_nsec + (intv)->tv_nsec; \ + (res)->tv_sec = (t)->tv_sec + (intv)->tv_sec; \ + while (nanos >= BILLION) { \ + nanos -= BILLION; \ + ++((res)->tv_sec); \ + } \ + (res)->tv_nsec = nanos; \ + } while (0); + +#define ts_diff(t, intv, res) \ + do { \ + time_t nanos = 0; \ + nanos = (t)->tv_nsec - (intv)->tv_nsec; \ + (res)->tv_sec = (t)->tv_sec - (intv)->tv_sec; \ + while (nanos < 0) { \ + nanos += BILLION; \ + --((res)->tv_sec); \ + } \ + (res)->tv_nsec = nanos; \ + } while (0); /* functions for timevals */ -int tv_add(const struct timeval * t, - const struct timeval * intv, - struct timeval * res); -int tv_diff(const struct timeval * t, - const struct timeval * intv, - struct timeval * res); +#define tv_add(t, intv, res) \ + do { \ + time_t micros = 0; \ + micros = (t)->tv_usec + (intv)->tv_usec; \ + (res)->tv_sec = (t)->tv_sec + (intv)->tv_sec; \ + while (micros >= MILLION) { \ + micros -= MILLION; \ + ++((res)->tv_sec); \ + } \ + (res)->tv_usec = micros; \ + } while (0); + +#define tv_diff(t, intv, res) \ + do { \ + time_t micros = 0; \ + micros = (t)->tv_usec - (intv)->tv_usec; \ + (res)->tv_sec = (t)->tv_sec - (intv)->tv_sec; \ + while (micros < 0) { \ + micros += MILLION; \ + --((res)->tv_sec); \ + } \ + (res)->tv_usec = micros; \ + } while (0); + /* copying a timeval into a timespec */ -int tv_to_ts(const struct timeval * src, - struct timespec * dst); +#define tv_to_ts(tv, ts) \ + do { \ + (ts)->tv_sec = (tv)->tv_sec; \ + (ts)->tv_nsec = (tv)->tv_usec * 1000L; \ + } while (0); /* copying a timespec into a timeval (loss of resolution) */ -int ts_to_tv(const struct timespec * src, - struct timeval * dst); +#define ts_to_tv(ts, tv) \ + do { \ + (tv)->tv_sec = (ts)->tv_sec; \ + (tv)->tv_usec = (ts)->tv_nsec / 1000L; \ + } while (0); #endif /* OUROBOROS_TIME_UTILS_H */ |