]> git.llucax.com Git - software/druntime.git/blob - import/stdc/posix/time.d
First commit of the D Runtime Project. This includes a fully functional runtime...
[software/druntime.git] / import / stdc / posix / time.d
1 /**
2  * D header file for POSIX.
3  *
4  * Copyright: Public Domain
5  * License:   Public Domain
6  * Authors:   Sean Kelly
7  * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
8  */
9 module stdc.posix.time;
10
11 private import stdc.posix.config;
12 public import stdc.time;
13 public import stdc.posix.sys.types;
14 public import stdc.posix.signal; // for sigevent
15
16 extern (C):
17
18 //
19 // Required (defined in stdc.time)
20 //
21 /*
22 char* asctime(in tm*);
23 clock_t clock();
24 char* ctime(in time_t*);
25 double difftime(time_t, time_t);
26 tm* gmtime(in time_t*);
27 tm* localtime(in time_t*);
28 time_t mktime(tm*);
29 size_t strftime(char*, size_t, in char*, in tm*);
30 time_t time(time_t*);
31 */
32
33 version( linux )
34 {
35     time_t timegm(tm*); // non-standard
36 }
37 else version( darwin )
38 {
39     time_t timegm(tm*); // non-standard
40 }
41 else version( freebsd )
42 {
43     time_t timegm(tm*); // non-standard
44 }
45
46 //
47 // C Extension (CX)
48 // (defined in stdc.time)
49 //
50 /*
51 char* tzname[];
52 void tzset();
53 */
54
55 //
56 // Process CPU-Time Clocks (CPT)
57 //
58 /*
59 int clock_getcpuclockid(pid_t, clockid_t*);
60 */
61
62 //
63 // Clock Selection (CS)
64 //
65 /*
66 int clock_nanosleep(clockid_t, int, in timespec*, timespec*);
67 */
68
69 //
70 // Monotonic Clock (MON)
71 //
72 /*
73 CLOCK_MONOTONIC
74 */
75
76 //
77 // Timer (TMR)
78 //
79 /*
80 CLOCK_PROCESS_CPUTIME_ID (TMR|CPT)
81 CLOCK_THREAD_CPUTIME_ID (TMR|TCT)
82
83 NOTE: timespec must be defined in stdc.posix.signal to break
84       a circular import.
85
86 struct timespec
87 {
88     time_t  tv_sec;
89     int     tv_nsec;
90 }
91
92 struct itimerspec
93 {
94     timespec it_interval;
95     timespec it_value;
96 }
97
98 CLOCK_REALTIME
99 TIMER_ABSTIME
100
101 clockid_t
102 timer_t
103
104 int clock_getres(clockid_t, timespec*);
105 int clock_gettime(clockid_t, timespec*);
106 int clock_settime(clockid_t, in timespec*);
107 int nanosleep(in timespec*, timespec*);
108 int timer_create(clockid_t, sigevent*, timer_t*);
109 int timer_delete(timer_t);
110 int timer_gettime(timer_t, itimerspec*);
111 int timer_getoverrun(timer_t);
112 int timer_settime(timer_t, int, in itimerspec*, itimerspec*);
113 */
114
115 version( linux )
116 {
117     const CLOCK_PROCESS_CPUTIME_ID  = 2; // (TMR|CPT)
118     const CLOCK_THREAD_CPUTIME_ID   = 3; // (TMR|TCT)
119
120     // NOTE: See above for why this is commented out.
121     //
122     //struct timespec
123     //{
124     //    time_t  tv_sec;
125     //    c_long  tv_nsec;
126     //}
127
128     struct itimerspec
129     {
130         timespec it_interval;
131         timespec it_value;
132     }
133
134     const CLOCK_REALTIME    = 0;
135     const TIMER_ABSTIME     = 0x01;
136
137     alias int clockid_t;
138     alias int timer_t;
139
140     int clock_getres(clockid_t, timespec*);
141     //int clock_gettime(clockid_t, timespec*);
142     //int clock_settime(clockid_t, in timespec*);
143     int nanosleep(in timespec*, timespec*);
144     int timer_create(clockid_t, sigevent*, timer_t*);
145     int timer_delete(timer_t);
146     int timer_gettime(timer_t, itimerspec*);
147     int timer_getoverrun(timer_t);
148     int timer_settime(timer_t, int, in itimerspec*, itimerspec*);
149 }
150 else version( darwin )
151 {
152     int nanosleep(in timespec*, timespec*);
153 }
154 else version( freebsd )
155 {
156     const CLOCK_PROCESS_CPUTIME_ID  = 2; // (TMR|CPT)
157     const CLOCK_THREAD_CPUTIME_ID   = 3; // (TMR|TCT)
158
159     // NOTE: See above for why this is commented out.
160     //
161     //struct timespec
162     //{
163     //    time_t  tv_sec;
164     //    c_long  tv_nsec;
165     //}
166
167     struct itimerspec
168     {
169         timespec it_interval;
170         timespec it_value;
171     }
172
173     const CLOCK_REALTIME    = 0;
174     const TIMER_ABSTIME     = 0x01;
175
176     alias int clockid_t;
177     alias int timer_t;
178
179     int clock_getres(clockid_t, timespec*);
180     int clock_gettime(clockid_t, timespec*);
181     int clock_settime(clockid_t, in timespec*);
182     int nanosleep(in timespec*, timespec*);
183     int timer_create(clockid_t, sigevent*, timer_t*);
184     int timer_delete(timer_t);
185     int timer_gettime(timer_t, itimerspec*);
186     int timer_getoverrun(timer_t);
187     int timer_settime(timer_t, int, in itimerspec*, itimerspec*);
188 }
189
190
191 //
192 // Thread-Safe Functions (TSF)
193 //
194 /*
195 char* asctime_r(in tm*, char*);
196 char* ctime_r(in time_t*, char*);
197 tm*   gmtime_r(in time_t*, tm*);
198 tm*   localtime_r(in time_t*, tm*);
199 */
200
201 version( linux )
202 {
203     char* asctime_r(in tm*, char*);
204     char* ctime_r(in time_t*, char*);
205     tm*   gmtime_r(in time_t*, tm*);
206     tm*   localtime_r(in time_t*, tm*);
207 }
208 else version( darwin )
209 {
210     char* asctime_r(in tm*, char*);
211     char* ctime_r(in time_t*, char*);
212     tm*   gmtime_r(in time_t*, tm*);
213     tm*   localtime_r(in time_t*, tm*);
214 }
215 else version( freebsd )
216 {
217     char* asctime_r(in tm*, char*);
218     char* ctime_r(in time_t*, char*);
219     tm*   gmtime_r(in time_t*, tm*);
220     tm*   localtime_r(in time_t*, tm*);
221 }
222
223 //
224 // XOpen (XSI)
225 //
226 /*
227 getdate_err
228
229 int daylight;
230 int timezone;
231
232 tm* getdate(in char*);
233 char* strptime(in char*, in char*, tm*);
234 */
235
236 version( linux )
237 {
238     extern int      daylight;
239     extern c_long   timezone;
240
241     tm*   getdate(in char*);
242     char* strptime(in char*, in char*, tm*);
243 }
244 else version( darwin )
245 {
246     extern c_long timezone;
247
248     tm*   getdate(in char*);
249     char* strptime(in char*, in char*, tm*);
250 }
251 else version( freebsd )
252 {
253     //tm*   getdate(in char*);
254     char* strptime(in char*, in char*, tm*);
255 }