A simple intrusive Queue structure for Zig
1const std = @import("std");
2// do @import("Queue") in an actual project
3const Queue = @import("Queue.zig");
4
5pub fn main() void {
6 var q: Queue = .{};
7 var item1: Cylinder = .{ .num = 1 };
8 var item2: Cylinder = .{ .num = 2 };
9 var item3: Cylinder = .{ .num = 3 };
10 var item4: Cylinder = .{ .num = 4 };
11 var item5: Cylinder = .{ .num = 5 };
12 var item6: Cylinder = .{ .num = 6 };
13
14 q.enqueue(&item1.node);
15 q.enqueue(&item5.node);
16 q.enqueue(&item3.node);
17 q.enqueue(&item6.node);
18 q.enqueue(&item2.node);
19 q.enqueue(&item4.node);
20
21 std.log.info("Inline 6 Firing Order: ", .{});
22 var node = q.start;
23 while (node) |n| {
24 const firing: *Cylinder = @fieldParentPtr("node", n);
25 std.debug.print("{any}\n", .{firing});
26 node = n.next;
27 }
28}
29
30const Cylinder = struct {
31 num: usize,
32 node: Queue.Node = .{},
33};