1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 #ifndef OPAL_TIME_H
20 #define OPAL_TIME_H
21
22 #include "opal_config.h"
23
24 #ifndef OPAL_WIN_COMPAT_H
25 #error This file is supposed to be included only from win_compat.h
26 #endif
27
28 #define DST_NONE 0
29 #define DST_USA 1
30 #define DST_AUST 2
31 #define DST_WET 3
32 #define DST_MET 4
33 #define DST_EET 5
34 #define DST_CAN 6
35
36 #define TIMEVAL_TO_TIMESPEC(tv, ts) \
37 (ts)->tv_sec = (tv)->tv_sec; \
38 (ts)->tv_nsec = (tv)->tv_usec * 1000;
39
40 #define TIMESPEC_TO_TIMEVAL(tv, ts) \
41 (tv)->tv_sec = (ts)->tv_sec; \
42 (tv)->tv_usec = (ts)->tv_nsec / 1000;
43
44
45
46
47 #ifndef timerclear
48 #define timerclear(tvp) (tvp)->tv_sec = (tvp)->tv_usec = 0
49 #endif
50
51 #ifndef timerisset
52 #define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec)
53 #endif
54
55 #ifndef timercmp
56 #define timercmp(tvp, uvp, cmp) \
57 (((tvp)->tv_sec == (uvp)->tv_sec) ? \
58 ((tvp)->tv_usec cmp (uvp)->tv_usec) : \
59 ((tvp)->tv_sec cmp (uvp)->tv_sec))
60 #endif
61
62 #ifndef timeradd
63 #define timeradd(tvp, uvp, vvp) \
64 do { \
65 (vvp)->tv_sec = (tvp)->tv_sec + (uvp)->tv_sec; \
66 (vvp)->tv_usec = (tvp)->tv_usec + (uvp)->tv_usec; \
67 if ((vvp)->tv_usec >= 1000000) { \
68 (vvp)->tv_sec++; \
69 (vvp)->tv_usec -= 1000000; \
70 } \
71 } while (0)
72 #endif
73
74 #ifndef timersub
75 #define timersub(tvp, uvp, vvp) \
76 do { \
77 (vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec; \
78 (vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec; \
79 if ((vvp)->tv_usec < 0) { \
80 (vvp)->tv_sec--; \
81 (vvp)->tv_usec += 1000000; \
82 } \
83 } while (0)
84 #endif
85
86
87
88 #ifndef timespecclear
89 #define timespecclear(tsp) (tsp)->tv_sec = (tsp)->tv_nsec = 0
90 #endif
91
92 #ifndef timespecisset
93 #define timespecisset(tsp) ((tsp)->tv_sec || (tsp)->tv_nsec)
94 #endif
95
96 #ifndef timespeccmp
97 #define timespeccmp(tsp, usp, cmp) \
98 (((tsp)->tv_sec == (usp)->tv_sec) ? \
99 ((tsp)->tv_nsec cmp (usp)->tv_nsec) : \
100 ((tsp)->tv_sec cmp (usp)->tv_sec))
101 #endif
102
103 #ifndef timespecadd
104 #define timespecadd(tsp, usp, vsp) \
105 do { \
106 (vsp)->tv_sec = (tsp)->tv_sec + (usp)->tv_sec; \
107 (vsp)->tv_nsec = (tsp)->tv_nsec + (usp)->tv_nsec; \
108 if ((vsp)->tv_nsec >= 1000000000L) { \
109 (vsp)->tv_sec++; \
110 (vsp)->tv_nsec -= 1000000000L; \
111 } \
112 } while (0)
113 #endif
114
115 #ifndef timespecsub
116 #define timespecsub(tsp, usp, vsp) \
117 do { \
118 (vsp)->tv_sec = (tsp)->tv_sec - (usp)->tv_sec; \
119 (vsp)->tv_nsec = (tsp)->tv_nsec - (usp)->tv_nsec; \
120 if ((vsp)->tv_nsec < 0) { \
121 (vsp)->tv_sec--; \
122 (vsp)->tv_nsec += 1000000000L; \
123 } \
124 } while (0)
125 #endif
126
127
128
129
130
131 #define ITIMER_REAL 0
132 #define ITIMER_VIRTUAL 1
133 #define ITIMER_PROF 2
134
135 struct itimerval {
136 struct timeval it_interval;
137 struct timeval it_value;
138 };
139
140
141
142
143 struct clockinfo {
144 int hz;
145 int tick;
146 int tickadj;
147 int stathz;
148 int profhz;
149 };
150
151 #define CLOCK_REALTIME 0
152 #define CLOCK_VIRTUAL 1
153 #define CLOCK_PROF 2
154
155 #define TIMER_RELTIME 0x0
156 #define TIMER_ABSTIME 0x1
157
158 #ifndef OPAL_TIMESPEC
159 #define OPAL_TIMESPEC
160 struct timespec
161 {
162 long tv_sec;
163 long tv_nsec;
164 };
165 #endif
166
167
168
169
170
171
172 struct timezone
173 {
174 int tz_minuteswest;
175 int tz_dsttime;
176 };
177
178 BEGIN_C_DECLS
179
180 OPAL_DECLSPEC int gettimeofday (struct timeval *tv, struct timezone *tz);
181
182 END_C_DECLS
183
184 #endif