1 type Time @c = struct 2 s : u64 3 ns : u32 4 5 def compare (other : Time) = when 6 s > other.s -> Ordering/Greater 7 s < other.s -> Ordering/Less 8 ns > other.ns -> Ordering/Greater 9 ns < other.ns -> Ordering/Less 10 else -> Ordering/Equal 11 12 is Compare 13 14 let kd_now () : Time 15 16 object Time = 17 def now = kd_now 18 19 let sub (from_s : u64 20 from_ns : u32 21 s : u64 22 ns : u32) = 23 let mut res_s = from_s - s 24 let mut res_ns = 0 25 if from_ns > ns then 26 res_ns = from_ns - ns 27 else 28 res_s -= 1 29 res_ns = from_ns + 1e9 - ns 30 31 (res_s, res_ns) 32 33 type Time 34 def (-) (rhs : Duration) = 35 let (res_s, res_ns) = sub s ns rhs.s rhs.ns 36 Time res_s res_ns 37 38 def (-) (rhs : Time) = 39 if self@value >= rhs then 40 let (res_s, res_ns) = sub s ns rhs.s rhs.ns 41 Duration res_s res_ns 42 else 43 fail 44 45 def elapsed = Time.now - self@value 46