commit bbbb26f4d3271064ab35c17d214b504eac5a0ef9 (tree)
parent 86b512c5cd277a800c8333ed4206002316f4aca2
Author: Shawn Landden <shawn@git.icu>
Date: Tue, 7 Aug 2018 05:30:54 -0700
mem: add mem.compare(), and use it for mem.lessThan()
Diffstat:
| M | std/mem.zig | | | 40 | +++++++++++++++++++++++++++++++++++----- |
1 file changed, 35 insertions(+), 5 deletions(-)
diff --git a/std/mem.zig b/std/mem.zig
@@ -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" {