| author | |
| committer | |
| log | 21ea23271a2e10f81cd993d4065d7a5a846e1099 |
| tree | 6bf6777278717bb1c405120e5667e5719c526fc7 |
| parent | 10347e86f82360e2b31d998fd2233bfb8aee6b69 |
3 files changed, 22 insertions(+), 5 deletions(-)
src/lessThanBy.zig created+20| ... | ... | @@ -0,0 +1,20 @@ |
| 1 | const std = @import("std"); | |
| 2 | const string = []const u8; | |
| 3 | const extras = @import("./lib.zig"); | |
| 4 | ||
| 5 | pub fn lessThanBy(comptime T: type, comptime field: std.meta.FieldEnum(T)) fn (void, T, T) bool { | |
| 6 | const S = struct { | |
| 7 | pub fn lessThan(_: void, lhs: T, rhs: T) bool { | |
| 8 | return @field(lhs, @tagName(field)) < @field(rhs, @tagName(field)); | |
| 9 | } | |
| 10 | }; | |
| 11 | return S.lessThan; | |
| 12 | } | |
| 13 | ||
| 14 | test { | |
| 15 | const S = struct { x: u32 }; | |
| 16 | const l = lessThanBy(S, .x); | |
| 17 | try std.testing.expect(l({}, .{ .x = 19 }, .{ .x = 53 })); | |
| 18 | try std.testing.expect(!l({}, .{ .x = 44 }, .{ .x = 44 })); | |
| 19 | try std.testing.expect(!l({}, .{ .x = 89 }, .{ .x = 26 })); | |
| 20 | } |
src/lib.zig+1| ... | ... | @@ -101,3 +101,4 @@ pub usingnamespace @import("./isSlice.zig"); |
| 101 | 101 | pub usingnamespace @import("./matchesNone.zig"); |
| 102 | 102 | pub usingnamespace @import("./indexOfSlice.zig"); |
| 103 | 103 | pub usingnamespace @import("./mapBy.zig"); |
| 104 | pub usingnamespace @import("./lessThanBy.zig"); |
src/sortBy.zig+1-5| ... | ... | @@ -3,11 +3,7 @@ const string = []const u8; |
| 3 | 3 | const extras = @import("./lib.zig"); |
| 4 | 4 | |
| 5 | 5 | pub fn sortBy(comptime T: type, items: []T, comptime field: std.meta.FieldEnum(T)) void { |
| 6 | std.mem.sort(T, items, {}, struct { | |
| 7 | fn f(_: void, lhs: T, rhs: T) bool { | |
| 8 | return @field(lhs, @tagName(field)) < @field(rhs, @tagName(field)); | |
| 9 | } | |
| 10 | }.f); | |
| 6 | std.mem.sort(T, items, {}, extras.lessThanBy(T, field)); | |
| 11 | 7 | } |
| 12 | 8 | |
| 13 | 9 | test { |