mirror of
https://github.com/ziglang/zig.git
synced 2026-01-20 14:25:16 +00:00
std: add containsAtLeastScalar to mem (#22826)
This commit is contained in:
parent
8a3aebaee0
commit
13ad984b1f
@ -1611,6 +1611,8 @@ test count {
|
||||
/// Returns true if the haystack contains expected_count or more needles
|
||||
/// needle.len must be > 0
|
||||
/// does not count overlapping needles
|
||||
//
|
||||
/// See also: `containsAtLeastScalar`
|
||||
pub fn containsAtLeast(comptime T: type, haystack: []const T, expected_count: usize, needle: []const T) bool {
|
||||
assert(needle.len > 0);
|
||||
if (expected_count == 0) return true;
|
||||
@ -1642,6 +1644,34 @@ test containsAtLeast {
|
||||
try testing.expect(!containsAtLeast(u8, " radar radar ", 3, "radar"));
|
||||
}
|
||||
|
||||
/// Returns true if the haystack contains expected_count or more needles
|
||||
//
|
||||
/// See also: `containsAtLeast`
|
||||
pub fn containsAtLeastScalar(comptime T: type, haystack: []const T, expected_count: usize, needle: T) bool {
|
||||
if (expected_count == 0) return true;
|
||||
|
||||
var found: usize = 0;
|
||||
|
||||
for (haystack) |item| {
|
||||
if (item == needle) {
|
||||
found += 1;
|
||||
if (found == expected_count) return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
test containsAtLeastScalar {
|
||||
try testing.expect(containsAtLeastScalar(u8, "aa", 0, 'a'));
|
||||
try testing.expect(containsAtLeastScalar(u8, "aa", 1, 'a'));
|
||||
try testing.expect(containsAtLeastScalar(u8, "aa", 2, 'a'));
|
||||
try testing.expect(!containsAtLeastScalar(u8, "aa", 3, 'a'));
|
||||
|
||||
try testing.expect(containsAtLeastScalar(u8, "adadda", 3, 'd'));
|
||||
try testing.expect(!containsAtLeastScalar(u8, "adadda", 4, 'd'));
|
||||
}
|
||||
|
||||
/// Reads an integer from memory with size equal to bytes.len.
|
||||
/// T specifies the return type, which must be large enough to store
|
||||
/// the result.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user