1 #ifndef EL__UTIL_TIME_H
2 #define EL__UTIL_TIME_H
4 #ifdef HAVE_SYS_TYPES_H
14 typedef long milliseconds_T
;
15 #define MILLISECONDS_MAX ((milliseconds_T) (LONG_MAX / 1000L))
16 #define ms_max(a, b) ((a) < (b) ? (b) : (a))
17 #define ms_min(a, b) ((a) < (b) ? (a) : (b))
19 /* Is using atol() in this way acceptable? It seems
20 * non-portable to me; time_t might not be a long. -- Miciah */
21 #define str_to_time_t(s) ((time_t) atol(s))
23 /* Redefine a timeval that has all fields signed so calculations
24 * will be simplified on rare systems that define timeval with
26 typedef struct { long sec
; long usec
; } timeval_T
;
28 timeval_T
*timeval_from_milliseconds(timeval_T
*t
, milliseconds_T milliseconds
);
29 timeval_T
*timeval_from_seconds(timeval_T
*t
, long seconds
);
30 timeval_T
*timeval_from_double(timeval_T
*t
, double x
);
32 milliseconds_T
sec_to_ms(long sec
);
33 milliseconds_T
add_ms_to_ms(milliseconds_T a
, milliseconds_T b
);
34 milliseconds_T
mult_ms(milliseconds_T a
, long lb
);
36 milliseconds_T
timeval_to_milliseconds(timeval_T
*t
);
37 long timeval_to_seconds(timeval_T
*t
);
39 int timeval_is_positive(timeval_T
*t
);
40 void timeval_limit_to_zero_or_one(timeval_T
*t
);
41 timeval_T
*timeval_now(timeval_T
*t
);
42 timeval_T
*timeval_sub(timeval_T
*res
, timeval_T
*older
, timeval_T
*newer
);
43 timeval_T
*timeval_add(timeval_T
*res
, timeval_T
*base
, timeval_T
*t
);
44 int timeval_cmp(timeval_T
*t1
, timeval_T
*t2
);
45 timeval_T
*timeval_sub_interval(timeval_T
*t
, timeval_T
*interval
);
46 timeval_T
*timeval_add_interval(timeval_T
*t
, timeval_T
*interval
);
47 int timeval_div_off_t(off_t n
, timeval_T
*t
);
49 #define timeval_copy(dst, src) copy_struct(dst, src)