/// Return a new, empty `HandleSet`, sized to hold handles from `arena`. pub fn for_arena(arena: &impl ArenaType<T>) -> Self { let len = arena.len(); Self {
len,
members: bit_set::BitSet::with_capacity(len),
as_keys: core::marker::PhantomData,
}
}
/// Remove all members from `self`. pub fn clear(&mutself) { self.members.make_empty();
}
/// Remove all members from `self`, and reserve space to hold handles from `arena`. pub fn clear_for_arena(&mutself, arena: &>impl ArenaType<T>) { self.members.make_empty(); self.members.reserve_len(arena.len());
}
/// Return an iterator over all handles that could be made members /// of this set. pub fn all_possible(&self) -> impl Iterator<Item = Handle<T>> { super::Range::full_range_from_size(self.len)
}
/// Add `handle` to the set. /// /// Return `true` if `handle` was not already present in the set. pub fn insert(&mutself, handle: Handle<T>) -> bool { self.members.insert(handle.index())
}
/// Remove `handle` from the set. /// /// Returns `true` if `handle` was present in the set. pub fn remove(&mutself, handle: Handle<T>) -> bool { self.members.remove(handle.index())
}
/// Add handles from `iter` to the set. pub fn insert_iter(&mutself, iter: impl IntoIterator<Item = Handle<T>>) {
for handle in iter { self.insert(handle);
}
}
/// Add all of the handles that can be included in this set. pub fn add_all(&mutself) { self.members.get_mut().fill(true);
}
/// Return an iterator over all handles in `self`. pub fn iter(&self) -> impl'_ + Iterator<Item = Handle<T>> { self.members.iter().map(Handle::from_usize)
}
/// Removes and returns the numerically largest handle in the set, or `None` /// if the set is empty. pub fn pop(&mutself) -> Option<Handle<T>> { let members = core::mem::take(&mutself.members); letmut vec = members.into_bit_vec(); let result = vec.iter_mut().enumerate().rev().find_map(|(i, mut bit)| { if *bit {
*bit = false;
Some(i)
} else {
None
}
}); self.members = bit_set::BitSet::from_bit_vec(vec);
result.map(Handle::from_usize)
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.