const Allocator = @import("std").mem.Allocator; pub fn Stack(comptime T: type) type { return struct { allocator: *Allocator, memory: []T, len: usize, const Self = @This(); pub fn alloc(allocator: *Allocator, size: usize) !Self { return Self{ .allocator = allocator, .memory = try allocator.alloc(T, size), .len = 0, }; } pub fn free(self: *Self) void { self.allocator.free(self.memory); self.* = undefined; } pub fn push(self: *Self, node: T) void { self.memory[self.len] = node; self.len += 1; } pub fn pop(self: *Self) T { self.len -= 1; return self.memory[self.len]; } pub fn reset(self: *Self) void { self.len = 0; } }; }