From c714a3250f57817ea565f0390cecf12025655376 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Wed, 5 May 2021 16:55:49 -0700 Subject: [PATCH] std.ArrayList: add clearRetainingCapacity and clearAndFree --- lib/std/array_list.zig | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/lib/std/array_list.zig b/lib/std/array_list.zig index 2ba2e27bba..cd1c09a01b 100644 --- a/lib/std/array_list.zig +++ b/lib/std/array_list.zig @@ -294,6 +294,18 @@ pub fn ArrayListAligned(comptime T: type, comptime alignment: ?u29) type { self.items.len = new_len; } + /// Invalidates all element pointers. + pub fn clearRetainingCapacity(self: *Self) void { + self.items.len = 0; + } + + /// Invalidates all element pointers. + pub fn clearAndFree(self: *Self) void { + self.allocator.free(self.allocatedSlice()); + self.items.len = 0; + self.capacity = 0; + } + /// Deprecated: call `ensureUnusedCapacity` or `ensureTotalCapacity`. pub const ensureCapacity = ensureTotalCapacity; @@ -611,6 +623,18 @@ pub fn ArrayListAlignedUnmanaged(comptime T: type, comptime alignment: ?u29) typ self.items.len = new_len; } + /// Invalidates all element pointers. + pub fn clearRetainingCapacity(self: *Self) void { + self.items.len = 0; + } + + /// Invalidates all element pointers. + pub fn clearAndFree(self: *Self, allocator: *Allocator) void { + allocator.free(self.allocatedSlice()); + self.items.len = 0; + self.capacity = 0; + } + /// Deprecated: call `ensureUnusedCapacity` or `ensureTotalCapacity`. pub const ensureCapacity = ensureTotalCapacity;