authorgravatar for mail@linusgroh.deLinus Groh <mail@linusgroh.de> 2026-05-08 22:04:30+01:00
committergravatar for mail@linusgroh.deLinus Groh <mail@linusgroh.de> 2026-05-08 22:04:30+01:00
log33d2e571c763ca1f0d2d97803ece92b49a54aac5
tree2f30aa08cc805242faabb099bb4ddd1910cb9615
parent83da6827fdda6f0304228bba3e78e8624c4540ee

std.mem: Remove containsAtLeastScalar() in favor of new impl


2 files changed, 10 insertions(+), 15 deletions(-)

lib/std/Io/Threaded.zig+1-1
......@@ -14401,7 +14401,7 @@ pub fn setTimestampToPosix(set_ts: File.SetTimestamp) posix.timespec {
1440114401}
1440214402
1440314403pub fn pathToPosix(file_path: []const u8, buffer: *[posix.PATH_MAX]u8) Dir.PathNameError![:0]u8 {
14404 if (std.mem.containsAtLeastScalar2(u8, file_path, 0, 1)) return error.BadPathName;
14404 if (std.mem.containsAtLeastScalar(u8, file_path, 0, 1)) return error.BadPathName;
1440514405 // >= rather than > to make room for the null byte
1440614406 if (file_path.len >= buffer.len) return error.NameTooLong;
1440714407 @memcpy(buffer[0..file_path.len], file_path);
lib/std/mem.zig+9-14
......@@ -1691,7 +1691,7 @@ test countScalar {
16911691//
16921692/// See also: `containsAtLeastScalar`
16931693pub fn containsAtLeast(comptime T: type, haystack: []const T, expected_count: usize, needle: []const T) bool {
1694 if (needle.len == 1) return containsAtLeastScalar(T, haystack, expected_count, needle[0]);
1694 if (needle.len == 1) return containsAtLeastScalar(T, haystack, needle[0], expected_count);
16951695 assert(needle.len > 0);
16961696 if (expected_count == 0) return true;
16971697
......@@ -1722,17 +1722,12 @@ test containsAtLeast {
17221722 try testing.expect(!containsAtLeast(u8, " radar radar ", 3, "radar"));
17231723}
17241724
1725/// Deprecated in favor of `containsAtLeastScalar2`.
1726pub fn containsAtLeastScalar(comptime T: type, list: []const T, minimum: usize, element: T) bool {
1727 return containsAtLeastScalar2(T, list, element, minimum);
1728}
1729
17301725/// Returns true if `element` appears at least `minimum` number of times in `list`.
17311726//
17321727/// Related:
17331728/// * `containsAtLeast`
17341729/// * `countScalar`
1735pub fn containsAtLeastScalar2(comptime T: type, list: []const T, element: T, minimum: usize) bool {
1730pub fn containsAtLeastScalar(comptime T: type, list: []const T, element: T, minimum: usize) bool {
17361731 const n = list.len;
17371732 var i: usize = 0;
17381733 var found: usize = 0;
......@@ -1760,14 +1755,14 @@ pub fn containsAtLeastScalar2(comptime T: type, list: []const T, element: T, min
17601755 return false;
17611756}
17621757
1763test containsAtLeastScalar2 {
1764 try testing.expect(containsAtLeastScalar2(u8, "aa", 'a', 0));
1765 try testing.expect(containsAtLeastScalar2(u8, "aa", 'a', 1));
1766 try testing.expect(containsAtLeastScalar2(u8, "aa", 'a', 2));
1767 try testing.expect(!containsAtLeastScalar2(u8, "aa", 'a', 3));
1758test containsAtLeastScalar {
1759 try testing.expect(containsAtLeastScalar(u8, "aa", 'a', 0));
1760 try testing.expect(containsAtLeastScalar(u8, "aa", 'a', 1));
1761 try testing.expect(containsAtLeastScalar(u8, "aa", 'a', 2));
1762 try testing.expect(!containsAtLeastScalar(u8, "aa", 'a', 3));
17681763
1769 try testing.expect(containsAtLeastScalar2(u8, "adadda", 'd', 3));
1770 try testing.expect(!containsAtLeastScalar2(u8, "adadda", 'd', 4));
1764 try testing.expect(containsAtLeastScalar(u8, "adadda", 'd', 3));
1765 try testing.expect(!containsAtLeastScalar(u8, "adadda", 'd', 4));
17711766}
17721767
17731768/// Reads an integer from memory with size equal to bytes.len.