pub fn shrinkAndFree(self: *Self, allocator: Allocator, new_capacity: usize) void 205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220 pub fn shrinkAndFree(self: *Self, allocator: Allocator, new_capacity: usize) void {
assert(new_capacity <= self.cap);
// Cannot shrink to smaller than the current queue size without invalidating the heap property
assert(new_capacity >= self.items.len);
const old_memory = self.allocatedSlice();
const new_memory = allocator.realloc(old_memory, new_capacity) catch |e| switch (e) {
error.OutOfMemory => { // no problem, capacity is still correct then.
return;
},
};
self.items.ptr = new_memory.ptr;
self.cap = new_memory.len;
}
Reduce allocated capacity to
new_capacity.