use "extremum"use "types"use "utf"use "chartype"pkg std = type order = union `Before `Equal `After ;; generic numcmp : (a : @a, b : @a -> order) :: numeric @a const strcmp : (a : byte[:], b : byte[:] -> order) const strncmp : (a : byte[:], b : byte[:], n : size -> order) const strcasecmp : (a : byte[:], b : byte[:] -> order);;extern const put : (str : byte[:], args : ... -> int64)generic numcmp = {a, b if a < b -> `Before elif a == b -> `Equal else -> `After ;;}const strcmp = {a, b var l l = min(a.len, b.len) for var 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)}const strcasecmp = {a, b var ca, cb while a.len > 0 && b.len > 0 (ca, a) = std.charstep(a) (cb, b) = std.charstep(b) ca = toupper(ca) cb = toupper(cb) if ca < cb -> `Before elif ca > cb -> `After ;; ;; if a.len < b.len -> `Before elif a.len > b.len -> `After else -> `Equal ;;}
use "extremum"
use "types"
use "utf"
use "chartype"
pkg std =
type order = union
`Before
`Equal
`After
;;
generic numcmp : (a : @a, b : @a -> order) :: numeric @a
const strcmp : (a : byte[:], b : byte[:] -> order)
const strncmp : (a : byte[:], b : byte[:], n : size -> order)
const strcasecmp : (a : byte[:], b : byte[:] -> order)
;;
extern const put : (str : byte[:], args : ... -> int64)
generic numcmp = {a, b
if a < b
-> `Before
elif a == b
-> `Equal
else
-> `After
;;
}
const strcmp = {a, b
var l
l = min(a.len, b.len)
for var 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)
}
const strcasecmp = {a, b
var ca, cb
while a.len > 0 && b.len > 0
(ca, a) = std.charstep(a)
(cb, b) = std.charstep(b)
ca = toupper(ca)
cb = toupper(cb)
if ca < cb
-> `Before
elif ca > cb
-> `After
;;
;;
if a.len < b.len
-> `Before
elif a.len > b.len
-> `After
else
-> `Equal
;;
}