A simple intrusive Queue structure for Zig
1const std = @import("std");
2const Queue = @This();
3
4start: ?*Node = null,
5end: ?*Node = null,
6
7pub const Node = struct {
8 next: ?*Node = null,
9};
10
11pub fn enqueue(self: *Queue, new_node: *Node) void {
12 if (self.end) |end| {
13 end.next = new_node;
14 } else {
15 self.start = new_node;
16 }
17 self.end = new_node;
18}
19
20pub fn dequeue(self: *Queue) ?*Node {
21 const start = self.start orelse return null;
22 if (start.next) |next| {
23 self.start = next;
24 } else {
25 self.start = null;
26 self.end = null;
27 }
28 return start;
29}