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 T
s, 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> Freeze for IndexVec<I, T>
impl<I, T> RefUnwindSafe for IndexVec<I, T>where
T: RefUnwindSafe,
impl<I, T> Sync for IndexVec<I, T>where
T: Sync,
impl<I, T> Unpin for IndexVec<I, T>where
T: Unpin,
impl<I, T> UnwindSafe for IndexVec<I, T>where
T: UnwindSafe,
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,
Source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit
)§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.