diff --git a/src/lib.zig b/src/lib.zig index 8a26c8d76e4eef1dc0a027ffb542c45b2d95917f..a9881c735d52514a36f718dbcb8c816ee9572cc0 100644 --- a/src/lib.zig +++ b/src/lib.zig @@ -87,6 +87,7 @@ pub const from_hex = @import("./from_hex.zig").from_hex; pub const Pointee = @import("./Pointee.zig").Pointee; pub const compareFnSlice = @import("./compareFnSlice.zig").compareFnSlice; pub const sumLen = @import("./sumLen.zig").sumLen; +pub const splitScalarN = @import("./splitScalarN.zig").splitScalarN; test { _ = @import("reduceNumber.zig"); @@ -163,4 +164,5 @@ test { _ = @import("Pointee.zig"); _ = @import("compareFnSlice.zig"); _ = @import("sumLen.zig"); + _ = @import("splitScalarN.zig"); } diff --git a/src/splitScalarN.zig b/src/splitScalarN.zig new file mode 100644 index 0000000000000000000000000000000000000000..14fb7f0d20d7e70ca29b8971834f62d64fb28657 --- /dev/null +++ b/src/splitScalarN.zig @@ -0,0 +1,20 @@ +const std = @import("std"); +const extras = @import("./lib.zig"); + +pub fn splitScalarN(comptime T: type, buffer: []const T, delimiter: T, comptime N: usize) ?[N][]const T { + var result: [N][]const T = undefined; + var iter = std.mem.splitScalar(T, buffer, delimiter); + for (&result) |*x| x.* = iter.next() orelse return null; + if (iter.next() != null) return null; + return result; +} + +test { + try std.testing.expectEqualDeep(&[_][]const u8{ "abc", "def" }, &splitScalarN(u8, "abc.def", '.', 2).?); +} +test { + try std.testing.expectEqual(null, splitScalarN(u8, "abcdef", '.', 2)); +} +test { + try std.testing.expectEqual(null, splitScalarN(u8, "ab.cd.ef", '.', 2)); +}