authorgravatar for 15335529+Sobeston@users.noreply.github.comSobeston <15335529+Sobeston@users.noreply.github.com> 2021-01-06 23:56:02+00:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-01-08 18:12:30-08:00
log95e66a915b24cb3763707888ffa9726c01905a37
treeb36d039d6f27420850f3f7d3d8a0a3c1c48b63a3
parent7e0e27e738a894d2c1d37ebe2dc3ca3eaecc55f5

added mem.containsAtLeast


1 files changed, 34 insertions(+), 0 deletions(-)

lib/std/mem.zig+34
......@@ -991,6 +991,40 @@ test "mem.count" {
991991 testing.expect(count(u8, "owowowu", "owowu") == 1);
992992}
993993
994/// Returns true if the haystack contains expected_count or more needles
995/// needle.len must be > 0
996/// does not count overlapping needles
997pub fn containsAtLeast(comptime T: type, haystack: []const T, expected_count: usize, needle: []const T) bool {
998 assert(needle.len > 0);
999 if (expected_count == 0) return true;
1000
1001 var i: usize = 0;
1002 var found: usize = 0;
1003
1004 while (indexOfPos(T, haystack, i, needle)) |idx| {
1005 i = idx + needle.len;
1006 found += 1;
1007 if (found == expected_count) return true;
1008 }
1009 return false;
1010}
1011
1012test "mem.containsAtLeast" {
1013 testing.expect(containsAtLeast(u8, "aa", 0, "a"));
1014 testing.expect(containsAtLeast(u8, "aa", 1, "a"));
1015 testing.expect(containsAtLeast(u8, "aa", 2, "a"));
1016 testing.expect(!containsAtLeast(u8, "aa", 3, "a"));
1017
1018 testing.expect(containsAtLeast(u8, "radaradar", 1, "radar"));
1019 testing.expect(!containsAtLeast(u8, "radaradar", 2, "radar"));
1020
1021 testing.expect(containsAtLeast(u8, "radarradaradarradar", 3, "radar"));
1022 testing.expect(!containsAtLeast(u8, "radarradaradarradar", 4, "radar"));
1023
1024 testing.expect(containsAtLeast(u8, " radar radar ", 2, "radar"));
1025 testing.expect(!containsAtLeast(u8, " radar radar ", 3, "radar"));
1026}
1027
9941028/// Reads an integer from memory with size equal to bytes.len.
9951029/// T specifies the return type, which must be large enough to store
9961030/// the result.