Browse Source

time: timemono_add.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Rusty Russell 9 years ago
parent
commit
a7f2b2c4d3
2 changed files with 26 additions and 1 deletions
  1. 4 1
      ccan/time/test/run-monotonic.c
  2. 22 0
      ccan/time/time.h

+ 4 - 1
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();
 }

+ 22 - 0
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.