DoxigAlpha

replaceRangeAssumeCapacity

Grows or shrinks the list as necessary.

Never invalidates element pointers.

Asserts the capacity is enough for additional items.

Function parameters

Parameters

#
self:*Self
start:usize
len:usize
new_items:[]const T

Deprecated.

Functions

#
Managed
Deprecated.
AlignedManaged
Deprecated.
Aligned
A contiguous, growable list of arbitrarily aligned items in memory.

Source

Implementation

#
pub fn replaceRangeAssumeCapacity(self: *Self, start: usize, len: usize, new_items: []const T) void {
    const after_range = start + len;
    const range = self.items[start..after_range];

    if (range.len == new_items.len)
        @memcpy(range[0..new_items.len], new_items)
    else if (range.len < new_items.len) {
        const first = new_items[0..range.len];
        const rest = new_items[range.len..];
        @memcpy(range[0..first.len], first);
        const dst = self.addManyAtAssumeCapacity(after_range, rest.len);
        @memcpy(dst, rest);
    } else {
        const extra = range.len - new_items.len;
        @memcpy(range[0..new_items.len], new_items);
        const src = self.items[after_range..];
        @memmove(self.items[after_range - extra ..][0..src.len], src);
        @memset(self.items[self.items.len - extra ..], undefined);
        self.items.len -= extra;
    }
}