Struct IndexVec
#[repr(transparent)]pub struct IndexVec<I, T>where
I: Idx,{
pub raw: Vec<T>,
_marker: PhantomData<fn(&I)>,
}Expand description
An owned contiguous collection of Ts, indexed by I rather than by usize.
§Why use this instead of a Vec?
An IndexVec allows element access only via a specific associated index type, meaning that
trying to use the wrong index type (possibly accessing an invalid element) will fail at
compile time.
It also documents what the index is indexing: in a HashMap<usize, Something> it’s not
immediately clear what the usize means, while a HashMap<FieldIdx, Something> makes it obvious.
ⓘ
use rustc_index::{Idx, IndexVec};
fn f<I1: Idx, I2: Idx>(vec1: IndexVec<I1, u8>, idx1: I1, idx2: I2) {
&vec1[idx1]; // Ok
&vec1[idx2]; // Compile error!
}While it’s possible to use u32 or usize directly for I,
you almost certainly want to use a newtype_index!-generated type instead.
This allows to index the IndexVec with the new index type.
Fields§
§raw: Vec<T>§_marker: PhantomData<fn(&I)>Auto Trait Implementations§
impl<I, T> DynSend for IndexVec<I, T>
impl<I, T> DynSync for IndexVec<I, T>
impl<I, T> Freeze for IndexVec<I, T>
impl<I, T> RefUnwindSafe for IndexVec<I, T>
impl<I, T> Sync for IndexVec<I, T>
impl<I, T> Unpin for IndexVec<I, T>
impl<I, T> UnsafeUnpin for IndexVec<I, T>
impl<I, T> UnwindSafe for IndexVec<I, T>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> Dedup for T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Checks if this value is equivalent to the given key. Read more
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key and return true if they are equal.impl<T> HashConsable for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more