DoxigAlpha

orderedRemoveMany

Remove the elements indexed by sorted_indexes. The indexes to be removed correspond to the array list before deletion.

Asserts:

  • Each index to be removed is in bounds.
  • The indexes to be removed are sorted ascending.

Duplicates in sorted_indexes are allowed.

This operation is O(N).

Invalidates element pointers beyond the first deleted index.

Function parameters

Parameters

#
self:*Self
sorted_indexes:[]const usize

Deprecated.

Functions

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

Source

Implementation

#
pub fn orderedRemoveMany(self: *Self, sorted_indexes: []const usize) void {
    if (sorted_indexes.len == 0) return;
    var shift: usize = 1;
    for (sorted_indexes[0 .. sorted_indexes.len - 1], sorted_indexes[1..]) |removed, end| {
        if (removed == end) continue; // allows duplicates in `sorted_indexes`
        const start = removed + 1;
        const len = end - start; // safety checks `sorted_indexes` are sorted
        @memmove(self.items[start - shift ..][0..len], self.items[start..][0..len]); // safety checks initial `sorted_indexes` are in range
        shift += 1;
    }
    const start = sorted_indexes[sorted_indexes.len - 1] + 1;
    const end = self.items.len;
    const len = end - start; // safety checks final `sorted_indexes` are in range
    @memmove(self.items[start - shift ..][0..len], self.items[start..][0..len]);
    self.items.len = end - shift;
}