Impl more methods and traits for la_arena::ArenaMap
This commit is contained in:
parent
d9e462fd97
commit
1a94193602
1 changed files with 43 additions and 0 deletions
|
@ -21,6 +21,33 @@ impl<T, V> ArenaMap<Idx<T>, V> {
|
|||
Self { v: Vec::with_capacity(capacity), _ty: PhantomData }
|
||||
}
|
||||
|
||||
/// Reserves capacity for at least additional more elements to be inserted in the map.
|
||||
pub fn reserve(&mut self, additional: usize) {
|
||||
self.v.reserve(additional);
|
||||
}
|
||||
|
||||
/// Clears the map, removing all elements.
|
||||
pub fn clear(&mut self) {
|
||||
self.v.clear();
|
||||
}
|
||||
|
||||
/// Shrinks the capacity of the map as much as possible.
|
||||
pub fn shrink_to_fit(&mut self) {
|
||||
let min_len = self.v.iter().rposition(|slot| slot.is_some()).map_or(0, |i| i + 1);
|
||||
self.v.truncate(min_len);
|
||||
self.v.shrink_to_fit();
|
||||
}
|
||||
|
||||
/// Returns whether the map contains a value for the specified index.
|
||||
pub fn contains_idx(&self, idx: Idx<T>) -> bool {
|
||||
matches!(self.v.get(Self::to_idx(idx)), Some(Some(_)))
|
||||
}
|
||||
|
||||
/// Removes an index from the map, returning the value at the index if the index was previously in the map.
|
||||
pub fn remove(&mut self, idx: Idx<T>) -> Option<V> {
|
||||
self.v.get_mut(Self::to_idx(idx))?.take()
|
||||
}
|
||||
|
||||
/// Inserts a value associated with a given arena index into the map.
|
||||
pub fn insert(&mut self, idx: Idx<T>, t: V) {
|
||||
let idx = Self::to_idx(idx);
|
||||
|
@ -94,6 +121,22 @@ impl<T, V> Default for ArenaMap<Idx<V>, T> {
|
|||
}
|
||||
}
|
||||
|
||||
impl<T, V> Extend<(Idx<V>, T)> for ArenaMap<Idx<V>, T> {
|
||||
fn extend<I: IntoIterator<Item = (Idx<V>, T)>>(&mut self, iter: I) {
|
||||
iter.into_iter().for_each(move |(k, v)| {
|
||||
self.insert(k, v);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
impl<T, V> FromIterator<(Idx<V>, T)> for ArenaMap<Idx<V>, T> {
|
||||
fn from_iter<I: IntoIterator<Item = (Idx<V>, T)>>(iter: I) -> Self {
|
||||
let mut this = Self::new();
|
||||
this.extend(iter);
|
||||
this
|
||||
}
|
||||
}
|
||||
|
||||
/// A view into a single entry in a map, which may either be vacant or occupied.
|
||||
///
|
||||
/// This `enum` is constructed from the [`entry`] method on [`ArenaMap`].
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue