63 lines
1.2 KiB
Zig
63 lines
1.2 KiB
Zig
const std = @import("std");
|
|
|
|
const Digraph = @import("./Digraph.zig");
|
|
|
|
pub const Node = @import("./Node.zig");
|
|
pub const NodeList = std.ArrayList(*Node);
|
|
pub const NodeDigraph = Digraph.Container(*Node, Digraph.lessThanFuncFor(*Node));
|
|
|
|
///
|
|
alloc: std.mem.Allocator,
|
|
|
|
///
|
|
nodes: NodeList,
|
|
|
|
///
|
|
digraph: NodeDigraph,
|
|
|
|
///
|
|
root: *Node,
|
|
|
|
///
|
|
pub fn init(alloc: std.mem.Allocator) !@This() {
|
|
var nodes = NodeList.init(alloc);
|
|
errdefer nodes.deinit();
|
|
|
|
var digraph = try NodeDigraph.init(alloc, &.{});
|
|
errdefer digraph.deinit();
|
|
|
|
var root = try alloc.create(Node);
|
|
errdefer alloc.destroy(root);
|
|
|
|
root.* = try Node.init(alloc, 0, "helloworld");
|
|
errdefer root.deinit(alloc);
|
|
|
|
try nodes.append(root);
|
|
|
|
return .{
|
|
.alloc = alloc,
|
|
.nodes = nodes,
|
|
.digraph = digraph,
|
|
.root = root,
|
|
};
|
|
}
|
|
///
|
|
pub fn deinit(self: *@This()) void {
|
|
for (self.nodes) |node| {
|
|
node.deinit(self.alloc);
|
|
self.alloc.destroy(node);
|
|
}
|
|
self.digraph.deinit();
|
|
self.nodes.deinit();
|
|
}
|
|
|
|
///
|
|
pub fn serialize(self: *const @This(), writer: anytype) !void {
|
|
_ = self;
|
|
_ = writer;
|
|
}
|
|
///
|
|
pub fn deserialize(reader: anytype) !@This() {
|
|
_ = reader;
|
|
}
|