summaryrefslogtreecommitdiff
path: root/src/datastruct/array_list_collection.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/datastruct/array_list_collection.zig')
-rw-r--r--src/datastruct/array_list_collection.zig44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/datastruct/array_list_collection.zig b/src/datastruct/array_list_collection.zig
new file mode 100644
index 000000000..d3fbddb13
--- /dev/null
+++ b/src/datastruct/array_list_collection.zig
@@ -0,0 +1,44 @@
+const std = @import("std");
+const Allocator = std.mem.Allocator;
+
+/// A collection of ArrayLists with methods for bulk operations.
+pub fn ArrayListCollection(comptime T: type) type {
+ return struct {
+ const Self = ArrayListCollection(T);
+ const ArrayListT = std.ArrayListUnmanaged(T);
+
+ // An array containing the lists that belong to this collection.
+ lists: []ArrayListT,
+
+ // The collection will be initialized with empty ArrayLists.
+ pub fn init(
+ alloc: Allocator,
+ list_count: usize,
+ initial_capacity: usize,
+ ) Allocator.Error!Self {
+ const self: Self = .{
+ .lists = try alloc.alloc(ArrayListT, list_count),
+ };
+
+ for (self.lists) |*list| {
+ list.* = try .initCapacity(alloc, initial_capacity);
+ }
+
+ return self;
+ }
+
+ pub fn deinit(self: *Self, alloc: Allocator) void {
+ for (self.lists) |*list| {
+ list.deinit(alloc);
+ }
+ alloc.free(self.lists);
+ }
+
+ /// Clear all lists in the collection, retaining capacity.
+ pub fn reset(self: *Self) void {
+ for (self.lists) |*list| {
+ list.clearRetainingCapacity();
+ }
+ }
+ };
+}