Browse Source

Fixed time.precise_clock

Jeroen van Rijn 1 year ago
parent
commit
d267735d99
1 changed files with 38 additions and 3 deletions
  1. 38 3
      core/time/time.odin

+ 38 - 3
core/time/time.odin

@@ -344,11 +344,32 @@ Obtain the time components from a time, a duration or a stopwatch's total.
 */
 clock :: proc { clock_from_time, clock_from_duration, clock_from_stopwatch }
 
+/*
+Obtain the time components from a time, a duration or a stopwatch's total, including nanoseconds.
+*/
+precise_clock :: proc { precise_clock_from_time, precise_clock_from_duration, precise_clock_from_stopwatch }
+
 /*
 Obtain the time components from a time.
 */
 clock_from_time :: proc "contextless" (t: Time) -> (hour, min, sec: int) {
-	return clock_from_seconds(_time_abs(t))
+	hour, min, sec, _ = precise_clock_from_time(t)
+	return
+}
+
+/*
+Obtain the time components from a time, including nanoseconds.
+*/
+precise_clock_from_time :: proc "contextless" (t: Time) -> (hour, min, sec, nanos: int) {
+	// Time in nanoseconds since 1-1-1970 00:00
+	sec, nanos = int(t._nsec) / 1e9, int(t._nsec) % 1e9
+	sec += int(INTERNAL_TO_ABSOLUTE)
+	sec  = sec  % SECONDS_PER_DAY
+	hour = sec  / SECONDS_PER_HOUR
+	sec -= hour * SECONDS_PER_HOUR
+	min  = sec  / SECONDS_PER_MINUTE
+	sec -= min  * SECONDS_PER_MINUTE
+	return
 }
 
 /*
@@ -358,6 +379,13 @@ clock_from_duration :: proc "contextless" (d: Duration) -> (hour, min, sec: int)
 	return clock_from_seconds(u64(d/1e9))
 }
 
+/*
+Obtain the time components from a duration, including nanoseconds.
+*/
+precise_clock_from_duration :: proc "contextless" (d: Duration) -> (hour, min, sec, nanos: int) {
+	return precise_clock_from_time({_nsec=i64(d)})
+}
+
 /*
 Obtain the time components from a stopwatch's total.
 */
@@ -365,11 +393,18 @@ clock_from_stopwatch :: proc "contextless" (s: Stopwatch) -> (hour, min, sec: in
 	return clock_from_duration(stopwatch_duration(s))
 }
 
+/*
+Obtain the time components from a stopwatch's total, including nanoseconds
+*/
+precise_clock_from_stopwatch :: proc "contextless" (s: Stopwatch) -> (hour, min, sec, nanos: int) {
+	return precise_clock_from_duration(stopwatch_duration(s))
+}
+
 /*
 Obtain the time components from the number of seconds.
 */
-clock_from_seconds :: proc "contextless" (nsec: u64) -> (hour, min, sec: int) {
-	sec = int(nsec % SECONDS_PER_DAY)
+clock_from_seconds :: proc "contextless" (in_sec: u64) -> (hour, min, sec: int) {
+	sec = int(in_sec % SECONDS_PER_DAY)
 	hour = sec / SECONDS_PER_HOUR
 	sec -= hour * SECONDS_PER_HOUR
 	min = sec / SECONDS_PER_MINUTE