#ifndef _timespec_h
#define _timespec_h

#include <time.h>

void timespec_now(struct timespec *ts);
void timespec_addms(struct timespec *ts, long ms);
void timespec_addmicros(struct timespec *ts, long micro);
void timespec_addns(struct timespec *ts, long ns);

/** returns 0: a==b, >0: a>b, <0: a<b */
int timespec_compare(struct timespec *a, struct timespec *b);

/** computes r = a - b */
void timespec_subtract(struct timespec *r, struct timespec *a, struct timespec *b);

/** convert the timespec into milliseconds (may overflow) */
long timespec_milliseconds(struct timespec *a);

/** convert the timespec into microseconds (may overflow) */
long timespec_microseconds(struct timespec *a);

#endif /* _timespec_h */
