diff options
| author | Nic Gaffney <gaffney_nic@protonmail.com> | 2025-10-28 20:55:06 -0500 |
|---|---|---|
| committer | Nic Gaffney <gaffney_nic@protonmail.com> | 2025-10-28 20:55:06 -0500 |
| commit | 813b6631de7aa296c23e2471589d66625aa6ce15 (patch) | |
| tree | bfe69e1d47e97dfe95ff22a6e23b5b46680146f7 /src/fold.zig | |
| parent | 99c32737fe07bf7dc6094a1326be418ffd00e36f (diff) | |
| download | funcz-813b6631de7aa296c23e2471589d66625aa6ce15.tar.gz | |
Diffstat (limited to 'src/fold.zig')
| -rw-r--r-- | src/fold.zig | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/fold.zig b/src/fold.zig index ddaf0a9..f967cdf 100644 --- a/src/fold.zig +++ b/src/fold.zig @@ -50,3 +50,24 @@ pub fn foldr1( ) typeVerify(@TypeOf(func), .{ .@"fn" }).@"fn".return_type.? { return foldr(func, items[0], items); } + +pub fn scanlAlloc( + allocator: std.mem.Allocator, + comptime func: anytype, + base: (typeVerify(@TypeOf(func), .{.@"fn"}).@"fn".params[0].type.?), + items: ([]typeVerify(@TypeOf(func), .{.@"fn"}).@"fn".params[1].type.?) +) ![]typeVerify(@TypeOf(func), .{.@"fn"}).@"fn".return_type.? { + var output = try allocator.alloc(typeVerify(@TypeOf(func), .{.@"fn"}).@"fn".return_type.?, items.len); + scanlBuffer(func, base, items, &output); + return output; +} + +pub fn scanlBuffer( + comptime func: anytype, + base: (typeVerify(@TypeOf(func), .{.@"fn"}).@"fn".params[0].type.?), + items: ([]typeVerify(@TypeOf(func), .{.@"fn"}).@"fn".params[1].type.?), + buffer: (*[]typeVerify(@TypeOf(func), .{.@"fn"}).@"fn".return_type.?), +) void { + for (buffer.*, 0..) |*out, i| + out.* = foldl(func, base, items[0..i+1]); +} |
