}
}
+/*
+ * function: nstime_diff
+ * diff = a - b
+ */
+
+void nstime_diff(nstime_t *diff, const nstime_t *a, const nstime_t *b)
+{
+ diff->secs = a->secs - b->secs;
+ diff->nsecs = a->nsecs - b->nsecs;
+ if(diff->nsecs>=NS_PER_S || (diff->nsecs>0 && diff->secs<0)){
+ diff->nsecs-=NS_PER_S;
+ diff->secs++;
+ } else if(diff->nsecs<=-NS_PER_S || (diff->nsecs<0 && diff->secs>0)) {
+ diff->nsecs+=NS_PER_S;
+ diff->secs--;
+ }
+}
+
/*
* function: nstime_cmp
*
*/
extern void nstime_sum(nstime_t *sum, const nstime_t *b, const nstime_t *a );
+/** calculate the difference between two times
+ *
+ * diff = a-b
+ *
+ * Note that it is acceptable for two or more of the arguments to point at the
+ * same structure.
+ */
+extern void nstime_diff(nstime_t *diff, const nstime_t *b, const nstime_t *a );
+
/** sum += a */
#define nstime_add(sum, a) nstime_sum(sum, sum, a)
+/** sum -= a */
+#define nstime_subtract(sum, a) nstime_diff(sum, sum, a)
+
/** compare two times are return a value similar to memcmp() or strcmp().
*
* a > b : > 0