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.