Common structures: create and deinit functions.

mess
Karchnu 2020-12-21 03:29:39 +01:00
parent 00eac1ff5f
commit 78080c43a0
1 changed files with 46 additions and 0 deletions

View File

@ -18,6 +18,15 @@ pub const Node = struct {
type_name: [] const u8, type_name: [] const u8,
properties: PropertyHashMap, properties: PropertyHashMap,
children: NodeList, children: NodeList,
pub fn deinit(self: *Node) void {
self.properties.deinit();
for (self.children.items) |k, v| {
v.deinit();
}
self.children.deinit();
}
}; };
const PropertyValueTags = enum { const PropertyValueTags = enum {
@ -38,6 +47,24 @@ pub const PropertyValue = union(PropertyValueTags) {
pub const Root = struct { pub const Root = struct {
definitions: Definitions, definitions: Definitions,
children: NodeList, children: NodeList,
gpa: *Allocator,
pub fn create(allocator: *Allocator) !Root {
return Root{
.definitions = Definitions.init(allocator),
.children = NodeList.init(allocator),
.gpa = allocator,
};
}
pub fn deinit(self: *Root) void {
self.definitions.deinit();
// for (self.children.items) |k, v| {
// k.deinit();
// }
self.children.deinit();
}
}; };
test "simple test about structures" { test "simple test about structures" {
@ -57,3 +84,22 @@ test "simple test about structures" {
} }
test "init a Root structure" {
const allocator = std.heap.page_allocator;
var root = try Root.create(allocator);
defer root.deinit();
std.debug.print("\n", .{});
std.debug.print("root.definitions:\n", .{});
var it = root.definitions.iterator();
while(it.next()) |kv| {
std.debug.print("{} => {}:\n", .{kv.key, root.definitions.get(kv.key)});
}
std.debug.print("root.children:\n", .{});
for(root.children.items) |k, v| {
std.debug.print("{} => {}:\n", .{k, v});
}
}