-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathfor_each.zig
34 lines (29 loc) · 867 Bytes
/
for_each.zig
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
const zignite = @import("../zignite.zig");
const expect = @import("std").testing.expect;
const Fold = @import("fold.zig").Fold;
test "for_each:" {
const sum = struct {
var acc: i32 = 0;
pub fn add(x: i32) void {
acc += x;
}
};
sum.acc = 0;
zignite.range(i32, 1, 4).forEach(sum.add);
try expect(sum.acc == 10);
sum.acc = 0;
zignite.empty(i32).forEach(sum.add);
try expect(sum.acc == 0);
}
pub fn ForEach(comptime T: type, transformer: fn (value: T) void) type {
return struct {
const F = Fold(void, T, t);
pub fn t(_: void, value: T) void {
@call(.{ .modifier = .always_inline }, transformer, .{value});
}
pub const Type = F.Type;
pub const init = F.init({});
pub const next = F.next;
pub const deinit = F.deinit;
};
}