pub struct Vector<I, T>where
I: Idx,{
vector: IndexVec<I, Option<T>>,
real_len: usize,
}
Expand description
Indexed vector. To prevent accidental id reuse, the vector supports reserving a slot to be filled later.
Fields§
§vector: IndexVec<I, Option<T>>
§real_len: usize
The number of non-None
elements.
Implementations§
source§impl<I, T> Vector<I, T>where
I: Idx,
impl<I, T> Vector<I, T>where
I: Idx,
pub fn new() -> Self
pub fn get(&self, i: I) -> Option<&T>
pub fn get_mut(&mut self, i: I) -> Option<&mut T>
pub fn is_empty(&self) -> bool
pub fn len(&self) -> usize
sourcepub fn next_id(&self) -> I
pub fn next_id(&self) -> I
Gets the value of the next available id. Avoid if possible; use reserve_slot
instead.
sourcepub fn reserve_slot(&mut self) -> I
pub fn reserve_slot(&mut self) -> I
Reserve a spot in the vector.
pub fn push(&mut self, x: T) -> I
pub fn push_with(&mut self, f: impl FnOnce(I) -> T) -> I
sourcepub fn map<U>(self, f: impl FnMut(T) -> U) -> Vector<I, U>
pub fn map<U>(self, f: impl FnMut(T) -> U) -> Vector<I, U>
Map each entry to a new one, keeping the same ids.
sourcepub fn map_ref<'a, U>(&'a self, f: impl FnMut(&'a T) -> U) -> Vector<I, U>
pub fn map_ref<'a, U>(&'a self, f: impl FnMut(&'a T) -> U) -> Vector<I, U>
Map each entry to a new one, keeping the same ids.
sourcepub fn map_ref_mut<'a, U>(
&'a mut self,
f: impl FnMut(&'a mut T) -> U,
) -> Vector<I, U>
pub fn map_ref_mut<'a, U>( &'a mut self, f: impl FnMut(&'a mut T) -> U, ) -> Vector<I, U>
Map each entry to a new one, keeping the same ids.
pub fn iter_mut(&mut self) -> impl Iterator<Item = &mut T>
pub fn iter_indexed(&self) -> impl Iterator<Item = (I, &T)>
pub fn into_iter_indexed(self) -> impl Iterator<Item = (I, T)>
pub fn iter_indexed_values(&self) -> impl Iterator<Item = (I, &T)>
pub fn into_iter_indexed_values(self) -> impl Iterator<Item = (I, T)>
sourcepub fn iter_all_slots(&self) -> impl Iterator<Item = &Option<T>>
pub fn iter_all_slots(&self) -> impl Iterator<Item = &Option<T>>
Iterate over all slots, even empty ones.
pub fn iter_indexed_all_slots(&self) -> impl Iterator<Item = (I, &Option<T>)>
pub fn iter_indices(&self) -> impl Iterator<Item = I> + '_
Trait Implementations§
source§impl<'de, I: Idx, T: Deserialize<'de>> Deserialize<'de> for Vector<I, T>
impl<'de, I: Idx, T: Deserialize<'de>> Deserialize<'de> for Vector<I, T>
source§fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
source§impl<I, T> FromIterator<T> for Vector<I, T>where
I: Idx,
impl<I, T> FromIterator<T> for Vector<I, T>where
I: Idx,
source§impl<'a, I, T> IntoIterator for &'a Vector<I, T>where
I: Idx,
impl<'a, I, T> IntoIterator for &'a Vector<I, T>where
I: Idx,
source§impl<'a, I, T> IntoIterator for &'a mut Vector<I, T>where
I: Idx,
impl<'a, I, T> IntoIterator for &'a mut Vector<I, T>where
I: Idx,
source§impl<I, T> IntoIterator for Vector<I, T>where
I: Idx,
impl<I, T> IntoIterator for Vector<I, T>where
I: Idx,
source§impl<I, T: Ord> Ord for Vector<I, T>where
I: Idx + Ord,
impl<I, T: Ord> Ord for Vector<I, T>where
I: Idx + Ord,
1.21.0 · source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Compares and returns the maximum of two values. Read more
source§impl<I, T: PartialOrd> PartialOrd for Vector<I, T>where
I: Idx + PartialOrd,
impl<I, T: PartialOrd> PartialOrd for Vector<I, T>where
I: Idx + PartialOrd,
impl<I, T: Eq> Eq for Vector<I, T>where
I: Idx + Eq,
impl<I, T> StructuralPartialEq for Vector<I, T>where
I: Idx,
Auto Trait Implementations§
impl<I, T> Freeze for Vector<I, T>
impl<I, T> RefUnwindSafe for Vector<I, T>where
T: RefUnwindSafe,
impl<I, T> Send for Vector<I, T>where
T: Send,
impl<I, T> Sync for Vector<I, T>where
T: Sync,
impl<I, T> Unpin for Vector<I, T>where
T: Unpin,
impl<I, T> UnwindSafe for Vector<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> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
§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<I, T> ExtractContext<I, ()> for T
impl<I, T> ExtractContext<I, ()> for T
§fn extract_context(self, _original_input: I)
fn extract_context(self, _original_input: I)
Given the context attached to a nom error, and given the original
input to the nom parser, extract more the useful context information. Read more
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> 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§impl<T> Joinable for Twhere
&'a T: for<'a> IntoIterator,
impl<T> Joinable for Twhere
&'a T: for<'a> IntoIterator,
type Collection = T
§fn join_with<S>(self, sep: S) -> Join<T, S>
fn join_with<S>(self, sep: S) -> Join<T, S>
Combine this object with a separator to create a new [
Join
] instance.
Note that the separator does not have to share the same type as the
iterator’s values. Read more§fn join_concat(self) -> Join<Self::Collection, NoSeparator>
fn join_concat(self) -> Join<Self::Collection, NoSeparator>
Join this object with an empty separator. When rendered
with
Display
, the underlying elements will be directly concatenated.
Note that the separator, while empty, is still present, and will show
up if you iterate this instance. Read more§impl<I> RecreateContext<I> for I
impl<I> RecreateContext<I> for I
§fn recreate_context(_original_input: I, tail: I) -> I
fn recreate_context(_original_input: I, tail: I) -> I
Given the original input, as well as the context reported by nom,
recreate a context in the original string where the error occurred. Read more