pub(crate) struct IdentityValues {
free: Vec<(u32, u32)>,
next_index: u32,
count: usize,
id_source: IdSource,
}Expand description
A simple structure to allocate Id identifiers.
Calling alloc returns a fresh, never-before-seen id. Calling release
marks an id as dead; it will never be returned again by alloc.
IdentityValues returns Ids whose index values are suitable for use as
indices into a Vec<T> that holds those ids’ referents:
-
Every live id has a distinct index value. Every live id’s index selects a distinct element in the vector.
-
IdentityValuesprefers low index numbers. If you size your vector to accommodate the indices produced here, the vector’s length will reflect the highwater mark of actual occupancy. -
IdentityValuesreuses the index values of freed ids before returning ids with new index values. Freed vector entries get reused. -
The non-reuse property is achieved by storing an
epochalongside the index in anId. Index values are reused, but only with a different epoch.
IdentityValues can also be used to track the count of IDs allocated by
some external allocator. Combining internal and external allocation is not
allowed; calling both alloc and mark_as_used on the same
IdentityValues will result in a panic. The external mode is used when
playing back a trace of wgpu operations.
Fields§
§free: Vec<(u32, u32)>§next_index: u32§count: usize§id_source: IdSourceImplementations§
Source§impl IdentityValues
impl IdentityValues
Sourcepub fn alloc<T: Marker>(&mut self) -> Id<T>
pub fn alloc<T: Marker>(&mut self) -> Id<T>
Allocate a fresh, never-before-seen ID.
§Panics
If mark_as_used has previously been called on this IdentityValues.
Sourcepub fn mark_as_used<T: Marker>(&mut self, id: Id<T>) -> Id<T>
pub fn mark_as_used<T: Marker>(&mut self, id: Id<T>) -> Id<T>
Increment the count of used IDs.
§Panics
If alloc has previously been called on this IdentityValues.
Sourcepub fn release<T: Marker>(&mut self, id: Id<T>)
pub fn release<T: Marker>(&mut self, id: Id<T>)
Free id and/or decrement the count of used IDs.
Freed IDs will never be returned from alloc again.
pub fn count(&self) -> usize
Trait Implementations§
Auto Trait Implementations§
impl Freeze for IdentityValues
impl RefUnwindSafe for IdentityValues
impl Send for IdentityValues
impl Sync for IdentityValues
impl Unpin for IdentityValues
impl UnwindSafe for IdentityValues
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
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>
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>
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