A simple intrusive Queue structure for Zig
at dev 881 B view raw
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};