diff --git a/src/containsAggregate.zig b/src/containsAggregate.zig index b931fcbffc9a8a7df22d249595a3cf5e2749494d..6dadf2948e0b3380228f2ba0514ace211a9abaae 100644 --- a/src/containsAggregate.zig +++ b/src/containsAggregate.zig @@ -1,14 +1,10 @@ const std = @import("std"); const string = []const u8; const extras = @import("./lib.zig"); +const indexOfAggregate = extras.indexOfAggregate; pub fn containsAggregate(comptime T: type, haystack: []const T, needle: T) bool { - for (haystack) |item| { - if (T.eql(item, needle)) { - return true; - } - } - return false; + return indexOfAggregate(T, haystack, needle) != null; } test { diff --git a/src/indexOfAggregate.zig b/src/indexOfAggregate.zig new file mode 100644 index 0000000000000000000000000000000000000000..46b03823e3b243be20bee32cefe3996aa4876403 --- /dev/null +++ b/src/indexOfAggregate.zig @@ -0,0 +1,35 @@ +const std = @import("std"); +const string = []const u8; +const extras = @import("./lib.zig"); + +pub fn indexOfAggregate(comptime T: type, haystack: []const T, needle: T) ?usize { + for (haystack, 0..) |item, i| { + if (T.eql(item, needle)) { + return i; + } + } + return null; +} + +test { + const S = struct { + a: u8, + + fn eql(this: @This(), other: @This()) bool { + return this.a == other.a; + } + }; + const data = [_]S{ + .{ .a = 8 }, + .{ .a = 6 }, + .{ .a = 7 }, + .{ .a = 2 }, + .{ .a = 4 }, + .{ .a = 1 }, + .{ .a = 9 }, + .{ .a = 3 }, + .{ .a = 5 }, + }; + try std.testing.expect(indexOfAggregate(S, &data, .{ .a = 4 }) == 4); + try std.testing.expect(indexOfAggregate(S, &data, .{ .a = 0 }) == null); +} diff --git a/src/lib.zig b/src/lib.zig index a9881c735d52514a36f718dbcb8c816ee9572cc0..cdb650202ccba376dacbcb97a17f2e2cd07884c7 100644 --- a/src/lib.zig +++ b/src/lib.zig @@ -88,6 +88,7 @@ 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; +pub const indexOfAggregate = @import("./indexOfAggregate.zig").indexOfAggregate; test { _ = @import("reduceNumber.zig"); @@ -165,4 +166,5 @@ test { _ = @import("compareFnSlice.zig"); _ = @import("sumLen.zig"); _ = @import("splitScalarN.zig"); + _ = @import("indexOfAggregate.zig"); }