00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef CUFLOW_TIMESPEC_H
00019 #define CUFLOW_TIMESPEC_H
00020
00021 #include <cuflow/fwd.h>
00022
00023 CU_BEGIN_DECLARATIONS
00024
00025
00026
00027 CU_SINLINE void
00028 cuflow_timespec_assign(struct timespec *dst, struct timespec *src)
00029 {
00030 dst->tv_sec = src->tv_sec;
00031 dst->tv_nsec = src->tv_nsec;
00032 }
00033
00034 CU_SINLINE void
00035 cuflow_timespec_assign_sum(struct timespec *dst,
00036 struct timespec *src0, struct timespec *src1)
00037 {
00038 dst->tv_nsec = src0->tv_nsec + src1->tv_nsec;
00039 if (dst->tv_nsec >= 1000000000) {
00040 dst->tv_nsec -= 1000000000;
00041 dst->tv_sec = src0->tv_sec + src1->tv_sec + 1;
00042 }
00043 else
00044 dst->tv_sec = src0->tv_sec + src1->tv_sec;
00045 }
00046
00047 CU_SINLINE void
00048 cuflow_timespec_assign_diff(struct timespec *dst,
00049 struct timespec *src0, struct timespec *src1)
00050 {
00051 dst->tv_nsec = src0->tv_nsec - src1->tv_nsec;
00052 if (dst->tv_nsec < 0) {
00053 dst->tv_nsec += 1000000000;
00054 dst->tv_sec = src0->tv_sec - src1->tv_sec - 1;
00055 }
00056 else
00057 dst->tv_sec = src0->tv_sec - src1->tv_sec;
00058 }
00059
00060 CU_SINLINE void
00061 cuflow_timespec_add(struct timespec *dst, struct timespec *src)
00062 {
00063 dst->tv_nsec += src->tv_nsec;
00064 if (dst->tv_nsec >= 1000000000) {
00065 dst->tv_nsec -= 1000000000;
00066 dst->tv_sec += 1;
00067 }
00068 dst->tv_sec += src->tv_sec;
00069 }
00070
00071 CU_SINLINE void
00072 cuflow_timespec_sub(struct timespec *dst, struct timespec *src)
00073 {
00074 dst->tv_nsec -= src->tv_nsec;
00075 if (dst->tv_nsec < 0) {
00076 dst->tv_nsec += 1000000000;
00077 dst->tv_sec -= 1;
00078 }
00079 dst->tv_sec -= src->tv_sec;
00080 }
00081
00082 CU_SINLINE cu_bool_t
00083 cuflow_timespec_eq(struct timespec *t0, struct timespec *t1)
00084 {
00085 return t0->tv_nsec == t1->tv_nsec && t0->tv_sec == t1->tv_sec;
00086 }
00087
00088 CU_SINLINE cu_bool_t
00089 cuflow_timespec_leq(struct timespec *t0, struct timespec *t1)
00090 {
00091 return (t0->tv_sec == t1->tv_sec && t0->tv_nsec <= t1->tv_nsec)
00092 || t0->tv_sec < t1->tv_sec;
00093 }
00094
00095 CU_SINLINE cu_bool_t
00096 cuflow_timespec_lt(struct timespec *t0, struct timespec *t1)
00097 {
00098 return (t0->tv_sec == t1->tv_sec && t0->tv_nsec < t1->tv_nsec)
00099 || t0->tv_sec < t1->tv_sec;
00100 }
00101
00102
00103 CU_END_DECLARATIONS
00104
00105 #endif