Merge pull request #404 from hazeycode/master

Impl time for macOS
This commit is contained in:
gingerBill
2019-11-01 19:44:50 +00:00
committed by GitHub
2 changed files with 54 additions and 2 deletions

View File

@@ -258,7 +258,6 @@ exit :: inline proc(code: int) -> ! {
_unix_exit(code);
}
current_thread_id :: proc "contextless" () -> int {
// return int(_unix_gettid());
return 0;

View File

@@ -1,3 +1,56 @@
package time
IS_SUPPORTED :: false;
foreign import libc "system:c"
TimeSpec :: struct {
tv_sec : i64, /* seconds */
tv_nsec : i64, /* nanoseconds */
};
CLOCK_SYSTEM :: 0;
CLOCK_CALENDAR :: 1;
IS_SUPPORTED :: true;
foreign libc {
@(link_name="clock_gettime") _clock_gettime :: proc(clock_id: u64, timespec: ^TimeSpec) ---;
@(link_name="nanosleep") _nanosleep :: proc(requested: ^TimeSpec, remaining: ^TimeSpec) -> int ---;
@(link_name="sleep") _sleep :: proc(seconds: u64) -> int ---;
}
clock_gettime :: proc(clock_id: u64) -> TimeSpec {
ts : TimeSpec;
_clock_gettime(clock_id, &ts);
return ts;
}
now :: proc() -> Time {
time_spec_now := clock_gettime(CLOCK_SYSTEM);
ns := time_spec_now.tv_sec * 1e9 + time_spec_now.tv_nsec;
return Time{_nsec=ns};
}
seconds_since_boot :: proc() -> f64 {
ts_boottime := clock_gettime(CLOCK_SYSTEM);
return f64(ts_boottime.tv_sec) + f64(ts_boottime.tv_nsec) / 1e9;
}
sleep :: proc(d: Duration) {
ds := duration_seconds(d);
seconds := u64(ds);
nanoseconds := i64((ds - f64(seconds)) * 1e9);
if seconds > 0 do _sleep(seconds);
if nanoseconds > 0 do nanosleep(nanoseconds);
}
nanosleep :: proc(nanoseconds: i64) -> int {
assert(nanoseconds <= 999999999);
requested, remaining : TimeSpec;
requested = TimeSpec{tv_nsec = nanoseconds};
return _nanosleep(&requested, &remaining);
}