From d4dcfdb5ee72d36bdfab22df5c71a51daac69fea Mon Sep 17 00:00:00 2001 From: Meghan Denny Date: Tue, 21 Apr 2026 21:56:16 -0700 Subject: [PATCH] add compareFnSlice --- src/compareFnSlice.zig | 22 ++++++++++++++++++++++ src/lib.zig | 1 + 2 files changed, 23 insertions(+) create mode 100644 src/compareFnSlice.zig diff --git a/src/compareFnSlice.zig b/src/compareFnSlice.zig new file mode 100644 index 0000000000000000000000000000000000000000..436e3fe5cb0c9f44e3fe2ad1d03f302e9b2a0728 --- /dev/null +++ b/src/compareFnSlice.zig @@ -0,0 +1,22 @@ +const std = @import("std"); +const extras = @import("./lib.zig"); + +// Remove after updating to Zig 0.17. Ref: https://codeberg.org/ziglang/zig/pulls/32010 +pub fn compareFnSlice(comptime T: type) fn ([]const T, []const T) std.math.Order { + const S = struct { + fn order(lhs: []const T, rhs: []const T) std.math.Order { + if (lhs.ptr != rhs.ptr) { + const n = @min(lhs.len, rhs.len); + for (lhs[0..n], rhs[0..n]) |lhs_elem, rhs_elem| { + switch (std.math.order(lhs_elem, rhs_elem)) { + .eq => continue, + .lt => return .lt, + .gt => return .gt, + } + } + } + return std.math.order(lhs.len, rhs.len); + } + }; + return S.order; +} diff --git a/src/lib.zig b/src/lib.zig index 1ef0e476df96b6c6459235f0f184067edb53dbc0..e555c5989acee0b69ec6ffe983379ee9ba7e2f7a 100644 --- a/src/lib.zig +++ b/src/lib.zig @@ -121,3 +121,4 @@ pub usingnamespace @import("./asciiLower.zig"); pub usingnamespace @import("./parseDigits.zig"); pub usingnamespace @import("./from_hex.zig"); pub usingnamespace @import("./Pointee.zig"); +pub usingnamespace @import("./compareFnSlice.zig"); -- 2.54.0