00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00029 #include "utils.h"
00030
00038 int nms_timeval_add(struct timeval *res, const struct timeval *x,
00039 const struct timeval *y)
00040 {
00041 res->tv_sec = x->tv_sec + y->tv_sec;
00042
00043 res->tv_usec = x->tv_usec + y->tv_usec;
00044
00045 if (res->tv_usec > 1000000) {
00046 res->tv_usec -= 1000000;
00047 res->tv_sec++;
00048 }
00049
00050 return 0;
00051 }
00052
00060 int nms_timeval_subtract(struct timeval *res, const struct timeval *x,
00061 const struct timeval *y)
00062 {
00063 int nsec;
00064 struct timeval z = *y;
00065
00066
00067 if (x->tv_usec < z.tv_usec) {
00068 nsec = (z.tv_usec - x->tv_usec) / 1000000 + 1;
00069 z.tv_usec -= 1000000 * nsec;
00070 z.tv_sec += nsec;
00071 }
00072 if (x->tv_usec - z.tv_usec > 1000000) {
00073 nsec = (x->tv_usec - z.tv_usec) / 1000000;
00074 z.tv_usec += 1000000 * nsec;
00075 z.tv_sec -= nsec;
00076 }
00077
00078
00079
00080 if (res != NULL) {
00081 res->tv_sec = x->tv_sec - z.tv_sec;
00082 res->tv_usec = x->tv_usec - z.tv_usec;
00083 }
00084
00085
00086 return ((x->tv_sec < z.tv_sec)
00087 || ((x->tv_sec == z.tv_sec) && (x->tv_usec < z.tv_usec)));
00088 }
00089
00090
00091
00092
00093
00094 void f2time(double ftime, struct timeval *time)
00095 {
00096 time->tv_sec = (long) ftime;
00097 time->tv_usec = (long) ((ftime - time->tv_sec) * 1000000);
00098 }