DoxigAlpha

writeToSlice

Function parameters

Parameters

#
self:*Self
dest:[]T
start: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 writeToSlice(self: *Self, dest: []T, start: usize) void {
    const end = start + dest.len;
    assert(end <= self.len);

    var i = start;
    if (end <= prealloc_item_count) {
        const src = self.prealloc_segment[i..end];
        @memcpy(dest[i - start ..][0..src.len], src);
        return;
    } else if (i < prealloc_item_count) {
        const src = self.prealloc_segment[i..];
        @memcpy(dest[i - start ..][0..src.len], src);
        i = prealloc_item_count;
    }

    while (i < end) {
        const shelf_index = shelfIndex(i);
        const copy_start = boxIndex(i, shelf_index);
        const copy_end = @min(shelfSize(shelf_index), copy_start + end - i);
        const src = self.dynamic_segments[shelf_index][copy_start..copy_end];
        @memcpy(dest[i - start ..][0..src.len], src);
        i += (copy_end - copy_start);
    }
}