mem: add mem.compare(), and use it for mem.lessThan()

This commit is contained in:
Shawn Landden 2018-08-07 05:30:54 -07:00
parent 86b512c5cd
commit bbbb26f4d3

View File

@ -175,16 +175,46 @@ pub fn set(comptime T: type, dest: []T, value: T) void {
d.* = value;
}
/// Returns true if lhs < rhs, false otherwise
pub fn lessThan(comptime T: type, lhs: []const T, rhs: []const T) bool {
pub fn compare(comptime T: type, lhs: []const T, rhs: []const T) Compare {
const n = math.min(lhs.len, rhs.len);
var i: usize = 0;
while (i < n) : (i += 1) {
if (lhs[i] == rhs[i]) continue;
return lhs[i] < rhs[i];
if (lhs[i] == rhs[i]) {
continue;
} else if (lhs[i] < rhs[i]) {
return Compare.LessThan;
} else if (lhs[i] > rhs[i]) {
return Compare.GreaterThan;
} else {
unreachable;
}
}
return lhs.len < rhs.len;
if (lhs.len == rhs.len) {
return Compare.Equal;
} else if (lhs.len < rhs.len) {
return Compare.LessThan;
} else if (lhs.len > rhs.len) {
return Compare.GreaterThan;
}
unreachable;
}
test "mem.compare" {
assert(compare(u8, "abcd", "bee") == Compare.LessThan);
assert(compare(u8, "abc", "abc") == Compare.Equal);
assert(compare(u8, "abc", "abc0") == Compare.LessThan);
assert(compare(u8, "", "") == Compare.Equal);
assert(compare(u8, "", "a") == Compare.LessThan);
}
/// Returns true if lhs < rhs, false otherwise
pub fn lessThan(comptime T: type, lhs: []const T, rhs: []const T) bool {
var result = compare(T, lhs, rhs);
if (result == Compare.LessThan) {
return true;
} else
return false;
}
test "mem.lessThan" {