aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Heyes <rumcode@icloud.com>2019-11-01 19:33:48 +0000
committerChris Heyes <rumcode@icloud.com>2019-11-01 19:33:48 +0000
commitadca5b57cd91b6692274b186f1bd991e12d541a5 (patch)
treeee490a0db53983759c3854d1c90775dfd78bcb55
parent153e7525b5d64f12deb318d50aee1d9dbeb1fc8e (diff)
Move time code from os to time package
-rw-r--r--core/os/os_darwin.odin33
-rw-r--r--core/time/time_darwin.odin40
2 files changed, 30 insertions, 43 deletions
diff --git a/core/os/os_darwin.odin b/core/os/os_darwin.odin
index f48a547b6..77c455164 100644
--- a/core/os/os_darwin.odin
+++ b/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;
diff --git a/core/time/time_darwin.odin b/core/time/time_darwin.odin
index fd499d1ce..f731776b1 100644
--- a/core/time/time_darwin.odin
+++ b/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);
+} \ No newline at end of file