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 Id
s 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.
-
IdentityValues
prefers 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. -
IdentityValues
reuses 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
epoch
alongside 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: IdSource
Implementations§
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.