diff options
author | Ori Bernstein <ori@eigenstate.org> | 2015-08-26 12:20:58 -0700 |
---|---|---|
committer | Ori Bernstein <ori@eigenstate.org> | 2015-08-26 12:20:58 -0700 |
commit | 2bc852bda98762d3bc01548bf972e3f1b137fbfb (patch) | |
tree | 74831deed3c9057c5fe0cbb8790d220e855bc792 /lib/std/cmp.myr | |
parent | 3de952510eb2a23350d24ed926f19c0cf72a12f2 (diff) | |
download | mc-2bc852bda98762d3bc01548bf972e3f1b137fbfb.tar.gz |
Move Myrddin libs to lib/ subdirectory.
Diffstat (limited to 'lib/std/cmp.myr')
-rw-r--r-- | lib/std/cmp.myr | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/lib/std/cmp.myr b/lib/std/cmp.myr new file mode 100644 index 0000000..edc5fe3 --- /dev/null +++ b/lib/std/cmp.myr @@ -0,0 +1,54 @@ +use "extremum.use" +use "types.use" + +pkg std = + type order = union + `Before + `Equal + `After + ;; + + generic numcmp : (a : @a, b : @a -> order) + const strcmp : (a : byte[:], b : byte[:] -> order) + const strncmp : (a : byte[:], b : byte[:], n : size -> order) +;; + +generic numcmp = {a, b + if a < b + -> `Before + elif a == b + -> `Equal + else + -> `After + ;; +} + +const strcmp = {a, b + var l + var i + + l = min(a.len, b.len) + for i = 0; i < l; i++ + if a[i] < b[i] + -> `Before + elif a[i] > b[i] + -> `After + ;; + ;; + + if a.len < b.len + -> `Before + elif a.len > b.len + -> `After + else + -> `Equal + ;; + +} + +const strncmp = {a, b, n + a = a[:min(a.len, n)] + b = b[:min(b.len, n)] + -> strcmp(a, b) +} + |