DoxigAlpha

insertAssumeCapacity

Inserts an item into an ordered list which has room for it. Shifts all elements after and including the specified index back by one and sets the given index to the specified element. Will not reallocate the array, does not invalidate iterators.

Function parameters

Parameters

#
self:*Self
index:usize
elem:T

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 insertAssumeCapacity(self: *Self, index: usize, elem: T) void {
    assert(self.len < self.capacity);
    assert(index <= self.len);
    self.len += 1;
    const entry = switch (@typeInfo(T)) {
        .@"struct" => elem,
        .@"union" => Elem.fromT(elem),
        else => unreachable,
    };
    const slices = self.slice();
    inline for (fields, 0..) |field_info, field_index| {
        const field_slice = slices.items(@as(Field, @enumFromInt(field_index)));
        var i: usize = self.len - 1;
        while (i > index) : (i -= 1) {
            field_slice[i] = field_slice[i - 1];
        }
        field_slice[index] = @field(entry, field_info.name);
    }
}