Skip to main content

TaggedVec

Struct TaggedVec 

Source
pub struct TaggedVec<Index, Value> { /* private fields */ }
Expand description

A Vec wrapper that allows indexing only via the given Index type.

For actual operation, Index must implement From<usize> and Into<usize>.

Implementations§

Source§

impl<Index, Value> TaggedVec<Index, Value>

Source

pub fn new() -> Self

Creates a new empty TaggedVec.

Source

pub fn with_capacity(capacity: usize) -> Self

Creates a new empty TaggedVec with at least the specified capacity.

Source

pub fn len(&self) -> usize

Returns the number of elements in the TaggedVec.

Source

pub fn is_empty(&self) -> bool

Returns true if the TaggedVec contains no elements.

Source

pub fn capacity(&self) -> usize

Returns the total number of elements the TaggedVec can hold without reallocating.

Source

pub fn as_untagged_slice(&self) -> &[Value]

Returns the untagged slice of the Vec underlying this TaggedVec.

Source

pub fn as_untagged_mut_slice(&mut self) -> &mut [Value]

Returns the untagged mutable slice of the Vec underlying this TaggedVec.

Source

pub fn push(&mut self, value: Value) -> Index
where Index: From<usize>,

Inserts the given value at the back of the TaggedVec, returning its index.

Source

pub fn push_in_place(&mut self, value: impl FnOnce(Index) -> Value) -> Index
where Index: From<usize>,

Insert a single value into the TaggedVec by constructing it in place.

This method allows to create the value while already knowing its index. Returns the index.

Source

pub fn pop(&mut self) -> Option<(Index, Value)>
where Index: From<usize>,

Removes the value at the back of the TaggedVec and returns it with its index.

Source

pub fn insert(&mut self, index: Index, value: Value)
where Index: Into<usize>,

Inserts the given value at position index, shifting all existing values in range index.. one position to the right.

Source

pub fn splice<I: IntoIterator<Item = Value>>( &mut self, range: impl RangeBounds<Index>, replace_with: I, ) -> Splice<'_, I::IntoIter>
where usize: From<Index>, Index: Copy,

Source

pub fn retain(&mut self, f: impl FnMut(&Value) -> bool)

Retains only the values specified by the predicate.

In other words, remove all values v for which f(&v) returns false. This method operates in place, visiting each value exactly once in the original order, and preserves the order of the retained values.

Source

pub fn remove_multi(&mut self, indices: impl IntoIterator<Item = Index>)
where Index: Into<usize> + Clone,

Removes the elements at the specified indices, shifting other elements to the left to fill gaps as required.

The provided indices must be sorted.

Source

pub fn get(&self, index: Index) -> Option<&Value>
where Index: Into<usize>,

Returns a reference to the value at the given index, or None if the index is out of bounds.

Source

pub fn iter( &self, range: impl RangeBounds<Index>, ) -> impl DoubleEndedIterator<Item = (Index, &Value)> + ExactSizeIterator
where Index: From<usize> + Copy, usize: From<Index>,

Returns an iterator over references to the entries of the TaggedVec.

The range specifies which subset of the entries to iterate over. Iterating over a partial range with this argument is more efficient than iterating over the whole vector and skipping the unwanted entries, because the returned iterator does not support the skip optimisation.

Source

pub fn iter_mut( &mut self, range: impl RangeBounds<Index>, ) -> impl DoubleEndedIterator<Item = (Index, &mut Value)> + ExactSizeIterator
where Index: From<usize> + Copy, usize: From<Index>,

Returns an iterator over mutable references to the entries of the TaggedVec.

The range specifies which subset of the entries to iterate over. Iterating over a partial range with this argument is more efficient than iterating over the whole vector and skipping the unwanted entries, because the returned iterator does not support the skip optimisation.

Source

pub fn iter_values(&self) -> Iter<'_, Value>

Returns an iterator over references to the values of the TaggedVec.

Source

pub fn iter_values_mut(&mut self) -> IterMut<'_, Value>

Returns an iterator over mutable references to the values of the TaggedVec.

Source

pub fn iter_indices( &self, range: impl RangeBounds<Index>, ) -> IndexIterator<Index>
where Index: From<usize> + Copy, usize: From<Index>,

Returns an iterator over the indices of the TaggedVec.

The range specifies which subset of the entries to iterate over. Iterating over a partial range with this argument is more efficient than iterating over the whole vector and skipping the unwanted entries, because the returned iterator does not support the skip optimisation.

Source

pub fn into_iter( self, range: impl RangeBounds<Index>, ) -> impl DoubleEndedIterator<Item = (Index, Value)> + ExactSizeIterator
where Index: From<usize> + Copy, usize: From<Index>,

Consumes the TaggedVec, returning an iterator over the entries.

The range specifies which subset of the entries to iterate over. Iterating over a partial range with this argument is more efficient than iterating over the whole vector and skipping the unwanted entries, because the returned iterator does not support the skip optimisation.

Source

pub fn into_values_iter(self) -> IntoIter<Value>

Consumes the TaggedVec, returning an iterator over the values.

Source

pub fn clear(&mut self)

Removes all values from the TaggedVec.

Trait Implementations§

Source§

impl<Index, Value: Clone> Clone for TaggedVec<Index, Value>

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<Index, Value: Debug> Debug for TaggedVec<Index, Value>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<Index, Value> Default for TaggedVec<Index, Value>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<Index, Value> Extend<Value> for TaggedVec<Index, Value>

Source§

fn extend<T: IntoIterator<Item = Value>>(&mut self, iter: T)

Extends a collection with the contents of an iterator. Read more
Source§

fn extend_one(&mut self, item: A)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
Source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
Source§

impl<Index, Value> From<TaggedVec<Index, Value>> for Vec<Value>

Source§

fn from(value: TaggedVec<Index, Value>) -> Self

Converts to this type from the input type.
Source§

impl<Index, Value> From<Vec<Value>> for TaggedVec<Index, Value>

Source§

fn from(value: Vec<Value>) -> Self

Converts to this type from the input type.
Source§

impl<Index: From<usize> + Eq + Debug, Value> FromIterator<(Index, Value)> for TaggedVec<Index, Value>

Source§

fn from_iter<T: IntoIterator<Item = (Index, Value)>>(iter: T) -> Self

Creates a value from an iterator. Read more
Source§

impl<Index, Value> FromIterator<Value> for TaggedVec<Index, Value>

Source§

fn from_iter<T: IntoIterator<Item = Value>>(iter: T) -> Self

Creates a value from an iterator. Read more
Source§

impl<Index, Value: Hash> Hash for TaggedVec<Index, Value>

Source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl<Index: Into<usize>, Value> Index<Index> for TaggedVec<Index, Value>

Source§

type Output = Value

The returned type after indexing.
Source§

fn index(&self, index: Index) -> &Self::Output

Performs the indexing (container[index]) operation. Read more
Source§

impl<Index: Into<usize>, Value> IndexMut<Index> for TaggedVec<Index, Value>

Source§

fn index_mut(&mut self, index: Index) -> &mut Self::Output

Performs the mutable indexing (container[index]) operation. Read more
Source§

impl<Index, Value: Ord> Ord for TaggedVec<Index, Value>

Source§

fn cmp(&self, other: &Self) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 (const: unstable) · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 (const: unstable) · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 (const: unstable) · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl<Index, Value: PartialEq> PartialEq for TaggedVec<Index, Value>

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<Index, Value: PartialOrd> PartialOrd for TaggedVec<Index, Value>

Source§

fn partial_cmp(&self, other: &Self) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 (const: unstable) · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 (const: unstable) · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 (const: unstable) · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 (const: unstable) · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl<Index, Value: Eq> Eq for TaggedVec<Index, Value>

Auto Trait Implementations§

§

impl<Index, Value> Freeze for TaggedVec<Index, Value>

§

impl<Index, Value> RefUnwindSafe for TaggedVec<Index, Value>
where Index: RefUnwindSafe, Value: RefUnwindSafe,

§

impl<Index, Value> Send for TaggedVec<Index, Value>
where Index: Send, Value: Send,

§

impl<Index, Value> Sync for TaggedVec<Index, Value>
where Index: Sync, Value: Sync,

§

impl<Index, Value> Unpin for TaggedVec<Index, Value>
where Index: Unpin, Value: Unpin,

§

impl<Index, Value> UnsafeUnpin for TaggedVec<Index, Value>

§

impl<Index, Value> UnwindSafe for TaggedVec<Index, Value>
where Index: UnwindSafe, Value: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.