From a7f2b2c4d3e62cbbcb71628363e39f6730fd8f5e Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Sun, 30 Oct 2016 16:17:55 +1030 Subject: [PATCH] time: timemono_add. Signed-off-by: Rusty Russell --- ccan/time/test/run-monotonic.c | 5 ++++- ccan/time/time.h | 22 ++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/ccan/time/test/run-monotonic.c b/ccan/time/test/run-monotonic.c index 787ca682..c9912a73 100644 --- a/ccan/time/test/run-monotonic.c +++ b/ccan/time/test/run-monotonic.c @@ -7,7 +7,7 @@ int main(void) struct timemono t1, t2; struct timerel t3; - plan_tests(3); + plan_tests(5); /* Test time_mono */ t1 = time_mono(); @@ -21,5 +21,8 @@ int main(void) ok1(time_less(timemono_between(t1, t2), t3)); ok1(time_less(timemono_since(t1), t3)); + ok1(timemono_add(t1, t3).ts.tv_sec == t1.ts.tv_sec + 1); + ok1(timemono_add(t2, t3).ts.tv_nsec == t2.ts.tv_nsec); + return exit_status(); } diff --git a/ccan/time/time.h b/ccan/time/time.h index 54d92c57..f2b335cf 100644 --- a/ccan/time/time.h +++ b/ccan/time/time.h @@ -388,6 +388,28 @@ static inline struct timeabs timeabs_add(struct timeabs a, struct timerel b) return t; } +/** + * timemono_add - add a relative to a monotonic time + * @a: the monotonic time. + * @b: a relative time. + * + * The times must not overflow, or the results are undefined. + * + * Example: + * // We do one every second. + * static struct timemono next_timem(void) + * { + * return timemono_add(time_mono(), time_from_msec(1000)); + * } + */ +static inline struct timemono timemono_add(struct timemono a, struct timerel b) +{ + struct timemono t; + + t.ts = time_add_(a.ts, b.ts); + return t; +} + /** * timerel_add - add two relative times * @a: one relative time. -- 2.39.2