DoxigAlpha

growCapacity

Only grows capacity, or retains current capacity.

Function parameters

Parameters

#
self:*Self
new_capacity:usize

This is a stack data structure where pointers to indexes have the same lifetime as the data structure

Functions

#
SegmentedList
This is a stack data structure where pointers to indexes have the same lifetime as the data structure

Source

Implementation

#
pub fn growCapacity(self: *Self, allocator: Allocator, new_capacity: usize) Allocator.Error!void {
    const new_cap_shelf_count = shelfCount(new_capacity);
    const old_shelf_count = @as(ShelfIndex, @intCast(self.dynamic_segments.len));
    if (new_cap_shelf_count <= old_shelf_count) return;

    const new_dynamic_segments = try allocator.alloc([*]T, new_cap_shelf_count);
    errdefer allocator.free(new_dynamic_segments);

    var i: ShelfIndex = 0;
    while (i < old_shelf_count) : (i += 1) {
        new_dynamic_segments[i] = self.dynamic_segments[i];
    }
    errdefer while (i > old_shelf_count) : (i -= 1) {
        allocator.free(new_dynamic_segments[i][0..shelfSize(i)]);
    };
    while (i < new_cap_shelf_count) : (i += 1) {
        new_dynamic_segments[i] = (try allocator.alloc(T, shelfSize(i))).ptr;
    }

    allocator.free(self.dynamic_segments);
    self.dynamic_segments = new_dynamic_segments;
}