add license
[some-myr-traits.git] / comparable.myr
blobb986d1163ba19d113daae842999cfc70a0235bd1
1 use std
3 use "traits"
5 pkg t =
6         impl comparable byte[:]
7         impl comparable @a[:] :: comparable @a
8         /*
9            XXX: I think that "poison @a" bug is acting up here
10         impl comparable @a :: numeric @a
11          */
14 impl comparable byte[:] =
15         cmp = {a, b; -> std.strcmp(a, b)}
18 impl comparable @a[:] :: comparable @a =
19         cmp = {a, b
20                 if (a : byte#) == (b : byte#)
21                         -> `std.Equal
22                 ;;
24                 var l : std.size = std.min(a.len, b.len)
26                 for var j = 0; j < l; ++j
27                         match cmp(a[j], b[j])
28                         | `std.Before: -> `std.Before
29                         | `std.After: -> `std.After
30                         | `std.Equal:
31                         ;;
32                 ;;
34                 if a.len < b.len
35                         -> `std.Before
36                 elif a.len > b.len
37                         -> `std.After
38                 ;;
40                 -> `std.Equal
41         }
45 impl comparable @a :: numeric @a =
46         cmp = {a, b; -> std.numcmp(a, b)}