Browse Source

Move time code from os to time package

Chris Heyes 5 years ago
parent
commit
adca5b57cd
2 changed files with 30 additions and 43 deletions
  1. 0 33
      core/os/os_darwin.odin
  2. 30 10
      core/time/time_darwin.odin

+ 0 - 33
core/os/os_darwin.odin

@@ -126,14 +126,6 @@ W_OK :: 2; // Test for write permission
 X_OK :: 1; // Test for execute permission
 F_OK :: 0; // Test for file existance
 
-TimeSpec :: struct {
-	tv_sec  : i64,  /* seconds */
-	tv_nsec : i64,  /* nanoseconds */
-};
-
-CLOCK_SYSTEM          :: 0;
-CLOCK_CALENDAR        :: 1;
-
 foreign libc {
 	@(link_name="open")    _unix_open    :: proc(path: cstring, flags: int, #c_vararg mode: ..any) -> Handle ---;
 	@(link_name="close")   _unix_close   :: proc(handle: Handle) ---;
@@ -150,10 +142,6 @@ foreign libc {
 	@(link_name="realloc") _unix_realloc :: proc(ptr: rawptr, size: int) -> rawptr ---;
 	@(link_name="getenv")  _unix_getenv  :: proc(cstring) -> cstring ---;
 
-	@(link_name="clock_gettime")    _unix_clock_gettime :: proc(clock_id: u64, timespec: ^TimeSpec) ---;
-	@(link_name="nanosleep")        _unix_nanosleep     :: proc(requested: ^TimeSpec, remaining: ^TimeSpec) -> int ---;
-	@(link_name="sleep")            _unix_sleep         :: proc(seconds: u64) -> int ---;
-
 	@(link_name="exit")    _unix_exit    :: proc(status: int) ---;
 }
 
@@ -270,27 +258,6 @@ exit :: inline proc(code: int) -> ! {
 	_unix_exit(code);
 }
 
-
-clock_gettime :: proc(clock_id: u64) -> TimeSpec {
-	ts : TimeSpec;
-	_unix_clock_gettime(clock_id, &ts);
-	return ts;
-}
-
-sleep :: proc(seconds: u64) -> int {
-
-	return _unix_sleep(seconds);
-}
-
-nanosleep :: proc(nanoseconds: i64) -> int {
-	assert(nanoseconds <= 999999999);
-	requested, remaining : TimeSpec;
-	requested = TimeSpec{tv_nsec = nanoseconds};
-
-	return _unix_nanosleep(&requested, &remaining);
-}
-
-
 current_thread_id :: proc "contextless" () -> int {
 	// return int(_unix_gettid());
 	return 0;

+ 30 - 10
core/time/time_darwin.odin

@@ -1,19 +1,37 @@
 package time
 
-import "core:os";
+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 := os.clock_gettime(os.CLOCK_SYSTEM);
+    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 := os.clock_gettime(os.CLOCK_SYSTEM);
+    ts_boottime := clock_gettime(CLOCK_SYSTEM);
     return f64(ts_boottime.tv_sec) + f64(ts_boottime.tv_nsec) / 1e9;
 }
 
@@ -23,12 +41,14 @@ sleep :: proc(d: Duration) {
     seconds := u64(ds);
     nanoseconds := i64((ds - f64(seconds)) * 1e9);
 
-    if seconds > 0 do os.sleep(seconds);
-    if nanoseconds > 0 do os.nanosleep(nanoseconds);
+    if seconds > 0 do _sleep(seconds);
+    if nanoseconds > 0 do nanosleep(nanoseconds);
 }
 
-nanosleep :: proc(d: Duration) {
-    // NOTE(Jeroen): os.nanosleep returns -1 on failure, 0 on success
-    // duration needs to be [0, 999999999] nanoseconds.
-    os.nanosleep(i64(d));
-}
+nanosleep :: proc(nanoseconds: i64) -> int {
+    assert(nanoseconds <= 999999999);
+    requested, remaining : TimeSpec;
+    requested = TimeSpec{tv_nsec = nanoseconds};
+
+    return _nanosleep(&requested, &remaining);
+}