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