DoxigAlpha

setCapacity

Modify the array so that it can hold exactly new_capacity items. Invalidates pointers if additional memory is needed. new_capacity must be greater or equal to len.

Function parameters

Parameters

#
self:*Self
new_capacity:usize

A MultiArrayList stores a list of a struct or tagged union type.

Functions

#
MultiArrayList
A MultiArrayList stores a list of a struct or tagged union type.

Source

Implementation

#
pub fn setCapacity(self: *Self, gpa: Allocator, new_capacity: usize) !void {
    assert(new_capacity >= self.len);
    const new_bytes = try gpa.alignedAlloc(u8, .of(Elem), capacityInBytes(new_capacity));
    if (self.len == 0) {
        gpa.free(self.allocatedBytes());
        self.bytes = new_bytes.ptr;
        self.capacity = new_capacity;
        return;
    }
    var other = Self{
        .bytes = new_bytes.ptr,
        .capacity = new_capacity,
        .len = self.len,
    };
    const self_slice = self.slice();
    const other_slice = other.slice();
    inline for (fields, 0..) |field_info, i| {
        if (@sizeOf(field_info.type) != 0) {
            const field = @as(Field, @enumFromInt(i));
            @memcpy(other_slice.items(field), self_slice.items(field));
        }
    }
    gpa.free(self.allocatedBytes());
    self.* = other;
}