Commit c714a3250f

Andrew Kelley <andrew@ziglang.org>
2021-05-06 01:55:49
std.ArrayList: add clearRetainingCapacity and clearAndFree
1 parent 5d7f269
Changed files (1)
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;