From 21ea23271a2e10f81cd993d4065d7a5a846e1099 Mon Sep 17 00:00:00 2001 From: Meghan Denny Date: Wed, 5 Feb 2025 03:12:41 -0800 Subject: [PATCH] add lessThanBy --- src/lessThanBy.zig | 20 ++++++++++++++++++++ src/lib.zig | 1 + src/sortBy.zig | 6 +----- 3 files changed, 22 insertions(+), 5 deletions(-) create mode 100644 src/lessThanBy.zig diff --git a/src/lessThanBy.zig b/src/lessThanBy.zig new file mode 100644 index 0000000000000000000000000000000000000000..e88be4c28612796bf55a1c64b084a7ba9dd9f209 --- /dev/null +++ b/src/lessThanBy.zig @@ -0,0 +1,20 @@ +const std = @import("std"); +const string = []const u8; +const extras = @import("./lib.zig"); + +pub fn lessThanBy(comptime T: type, comptime field: std.meta.FieldEnum(T)) fn (void, T, T) bool { + const S = struct { + pub fn lessThan(_: void, lhs: T, rhs: T) bool { + return @field(lhs, @tagName(field)) < @field(rhs, @tagName(field)); + } + }; + return S.lessThan; +} + +test { + const S = struct { x: u32 }; + const l = lessThanBy(S, .x); + try std.testing.expect(l({}, .{ .x = 19 }, .{ .x = 53 })); + try std.testing.expect(!l({}, .{ .x = 44 }, .{ .x = 44 })); + try std.testing.expect(!l({}, .{ .x = 89 }, .{ .x = 26 })); +} diff --git a/src/lib.zig b/src/lib.zig index 1ff181a17a3da960fe67986f399cb5f341ee4384..63bfa8efd344049127924efd0c29342726b3f669 100644 --- a/src/lib.zig +++ b/src/lib.zig @@ -101,3 +101,4 @@ pub usingnamespace @import("./isSlice.zig"); pub usingnamespace @import("./matchesNone.zig"); pub usingnamespace @import("./indexOfSlice.zig"); pub usingnamespace @import("./mapBy.zig"); +pub usingnamespace @import("./lessThanBy.zig"); diff --git a/src/sortBy.zig b/src/sortBy.zig index 91c8c91d6240521987d42a31ad590eb61570d96d..8b166a7b95dadf344a7235abdef67caeadc5b8cc 100644 --- a/src/sortBy.zig +++ b/src/sortBy.zig @@ -3,11 +3,7 @@ const string = []const u8; const extras = @import("./lib.zig"); pub fn sortBy(comptime T: type, items: []T, comptime field: std.meta.FieldEnum(T)) void { - std.mem.sort(T, items, {}, struct { - fn f(_: void, lhs: T, rhs: T) bool { - return @field(lhs, @tagName(field)) < @field(rhs, @tagName(field)); - } - }.f); + std.mem.sort(T, items, {}, extras.lessThanBy(T, field)); } test { -- 2.54.0