[][src]Crate scanmut

Insert or remove multiple elements from a Vec in O(n) time.

This crate provides two types for versatile and efficient Vec mutation; Inserter and Remover. These two types can be seen as more generic implementations of Vec::insert and Vec::drain, allowing you to for example efficiently insert a slice, conditionally drain elements, or access elements of a Vec while draining from it.

Inserter and Remover requires an ordering of the insert and removal indices; monotonically non-increasing for Inserter and monotonically increasing for Remover.

For convenience, there are also extension traits adding common higher level operations using the Inserter and Remover. See ScanMut, InsertSliceClone, and InsertSliceCopy.

Examples

Inserting a slice into a vec using ScanMut::insert_all:

use scanmut::prelude::*;

let mut v = vec!['a', 'b', 'c'];
v.insert_all(1, ['d', 'e'].iter().cloned());
assert_eq!(v, vec!['a', 'd', 'e', 'b', 'c']);

Removing multiple elements in one scan using ScanMut::multi_remove:

use scanmut::prelude::*;

let mut v = vec!['a', 'b', 'c'];
v.multi_remove([0, 2].iter().cloned(), drop);
assert_eq!(v, vec!['b']);

Modules

prelude

Module of commonly-used traits

Structs

Inserter

An object which can insert multiple elements into a Vec in a single scan through the Vec.

Remover

An object that can remove multiple elements from a Vec in a single scan through the Vec.

Traits

InsertSliceClone

ScanMut extension trait for Vecs with cloneable items.

InsertSliceCopy

ScanMut extension trait for Vecs with copyable items.

ScanMut

Multiple insert/remove functions