Zig utility library
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

add SliceIterator

IamPyu 918a4c38 312eff99

+58 -1
+53
src/SliceIterator.zig
··· 1 + const std = @import("std"); 2 + 3 + pub fn SliceIterator(comptime T: type) type { 4 + return struct { 5 + const Self = @This(); 6 + 7 + slice: []const T, 8 + index: usize = 0, 9 + 10 + pub fn init(slice: []const T) Self { 11 + return Self{ .slice = slice }; 12 + } 13 + 14 + pub fn peek(self: *const Self) ?T { 15 + if (self.index >= self.slice.len) { 16 + return null; 17 + } 18 + return self.slice[self.index]; 19 + } 20 + 21 + pub fn next(self: *Self) ?T { 22 + const v = self.peek(); 23 + self.index += 1; 24 + return v; 25 + } 26 + }; 27 + } 28 + 29 + test "scalar" { 30 + const array = [_]u8{ 1, 2, 3, 4, 5 }; 31 + var iter = SliceIterator(u8).init(&array); 32 + 33 + while (iter.next()) |val| { 34 + std.debug.print("{d} ", .{val}); 35 + } 36 + std.debug.print("\n", .{}); 37 + } 38 + 39 + test "nested" { 40 + const array = [_][3]f32{ 41 + .{ 1, 2, 3 }, 42 + .{ 2, 4, 6 }, 43 + .{ 3, 6, 9 }, 44 + .{ 4, 8, 12 }, 45 + .{ 5, 10, 15 }, 46 + }; 47 + var iter = SliceIterator([3]f32).init(&array); 48 + 49 + while (iter.next()) |val| { 50 + std.debug.print("{any} ", .{val}); 51 + } 52 + std.debug.print("\n", .{}); 53 + }
+1 -1
src/mem.zig
··· 21 21 try std.testing.expectEqualStrings("hello", out[0]); 22 22 try std.testing.expectEqualStrings("world", out[1]); 23 23 24 - const out2 = splitOnce(u8, "hello:", ":") orelse unreachable; 24 + const out2 = splitOnce(u8, "hello:=", ":=") orelse unreachable; 25 25 26 26 try std.testing.expectEqualStrings("hello", out2[0]); 27 27 try std.testing.expectEqualStrings("", out2[1]);
+4
src/root.zig
··· 12 12 pub const path = @import("./path.zig"); 13 13 pub const mem = @import("./mem.zig"); 14 14 15 + const slice_iterator = @import("./SliceIterator.zig"); 16 + pub const SliceIterator = slice_iterator.SliceIterator; 17 + 15 18 test { 16 19 _ = la; 17 20 _ = packet; ··· 19 22 _ = string_builder; 20 23 _ = path; 21 24 _ = mem; 25 + _ = slice_iterator; 22 26 }