From 1435604b84dbf338c1b6096f473bc89aef144be0 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Fri, 15 Dec 2017 11:15:58 -0500 Subject: [PATCH] add sort.min and sort.max functions to stdlib --- std/mem.zig | 10 ++++------ std/sort.zig | 22 ++++++++++++++++++++++ 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/std/mem.zig b/std/mem.zig index 59b01fab17..4b3516b051 100644 --- a/std/mem.zig +++ b/std/mem.zig @@ -511,9 +511,8 @@ fn testWriteIntImpl() { pub fn min(comptime T: type, slice: []const T) -> T { var best = slice[0]; - var i: usize = 1; - while (i < slice.len) : (i += 1) { - best = math.min(best, slice[i]); + for (slice[1..]) |item| { + best = math.min(best, item); } return best; } @@ -524,9 +523,8 @@ test "mem.min" { pub fn max(comptime T: type, slice: []const T) -> T { var best = slice[0]; - var i: usize = 1; - while (i < slice.len) : (i += 1) { - best = math.max(best, slice[i]); + for (slice[1..]) |item| { + best = math.max(best, item); } return best; } diff --git a/std/sort.zig b/std/sort.zig index ec6f94bd8e..c6b1500b8e 100644 --- a/std/sort.zig +++ b/std/sort.zig @@ -1132,3 +1132,25 @@ fn fuzzTest(rng: &std.rand.Rand) { } } } + +pub fn min(comptime T: type, items: []T, lessThan: fn(lhs: &const T, rhs: &const T)->bool) -> T { + var i: usize = 0; + var smallest = items[0]; + for (items[1..]) |item| { + if (lessThan(item, smallest)) { + smallest = item; + } + } + return smallest; +} + +pub fn max(comptime T: type, items: []T, lessThan: fn(lhs: &const T, rhs: &const T)->bool) -> T { + var i: usize = 0; + var biggest = items[0]; + for (items[1..]) |item| { + if (lessThan(biggest, item)) { + biggest = item; + } + } + return biggest; +}