pub struct Access<T: SparseSetIndex> { /* private fields */ }
Expand description
Tracks read and write access to specific elements in a collection.
Used internally to ensure soundness during system initialization and execution.
See the is_compatible
and get_conflicts
functions.
Implementations§
source§impl<T: SparseSetIndex> Access<T>
impl<T: SparseSetIndex> Access<T>
sourcepub fn grow(&mut self, capacity: usize)
pub fn grow(&mut self, capacity: usize)
Increases the set capacity to the specified amount.
Does nothing if capacity
is less than or equal to the current value.
sourcepub fn add_archetypal(&mut self, index: T)
pub fn add_archetypal(&mut self, index: T)
Adds an archetypal (indirect) access to the element given by index
.
This is for elements whose values are not accessed (and thus will never cause conflicts), but whose presence in an archetype may affect query results.
Currently, this is only used for Has<T>
.
sourcepub fn has_read(&self, index: T) -> bool
pub fn has_read(&self, index: T) -> bool
Returns true
if this can access the element given by index
.
sourcepub fn has_any_read(&self) -> bool
pub fn has_any_read(&self) -> bool
Returns true
if this can access anything.
sourcepub fn has_write(&self, index: T) -> bool
pub fn has_write(&self, index: T) -> bool
Returns true
if this can exclusively access the element given by index
.
sourcepub fn has_any_write(&self) -> bool
pub fn has_any_write(&self) -> bool
Returns true
if this accesses anything mutably.
sourcepub fn has_archetypal(&self, index: T) -> bool
pub fn has_archetypal(&self, index: T) -> bool
Returns true if this has an archetypal (indirect) access to the element given by index
.
This is an element whose value is not accessed (and thus will never cause conflicts), but whose presence in an archetype may affect query results.
Currently, this is only used for Has<T>
.
sourcepub fn write_all(&mut self)
pub fn write_all(&mut self)
Sets this as having mutable access to all indexed elements (i.e. EntityMut
).
sourcepub fn has_read_all(&self) -> bool
pub fn has_read_all(&self) -> bool
Returns true
if this has access to all indexed elements (i.e. &World
).
sourcepub fn has_write_all(&self) -> bool
pub fn has_write_all(&self) -> bool
Returns true
if this has write access to all indexed elements (i.e. EntityMut
).
sourcepub fn clear_writes(&mut self)
pub fn clear_writes(&mut self)
Removes all writes.
sourcepub fn is_compatible(&self, other: &Access<T>) -> bool
pub fn is_compatible(&self, other: &Access<T>) -> bool
Returns true
if the access and other
can be active at the same time.
Access
instances are incompatible if one can write
an element that the other can read or write.
sourcepub fn is_subset(&self, other: &Access<T>) -> bool
pub fn is_subset(&self, other: &Access<T>) -> bool
Returns true
if the set is a subset of another, i.e. other
contains
at least all the values in self
.
sourcepub fn get_conflicts(&self, other: &Access<T>) -> Vec<T>
pub fn get_conflicts(&self, other: &Access<T>) -> Vec<T>
Returns a vector of elements that the access and other
cannot access at the same time.
sourcepub fn reads_and_writes(&self) -> impl Iterator<Item = T> + '_
pub fn reads_and_writes(&self) -> impl Iterator<Item = T> + '_
Returns the indices of the elements this has access to.
sourcepub fn reads(&self) -> impl Iterator<Item = T> + '_
pub fn reads(&self) -> impl Iterator<Item = T> + '_
Returns the indices of the elements this has non-exclusive access to.
sourcepub fn writes(&self) -> impl Iterator<Item = T> + '_
pub fn writes(&self) -> impl Iterator<Item = T> + '_
Returns the indices of the elements this has exclusive access to.
sourcepub fn archetypal(&self) -> impl Iterator<Item = T> + '_
pub fn archetypal(&self) -> impl Iterator<Item = T> + '_
Returns the indices of the elements that this has an archetypal access to.
These are elements whose values are not accessed (and thus will never cause conflicts), but whose presence in an archetype may affect query results.
Currently, this is only used for Has<T>
.
Trait Implementations§
source§impl<T: SparseSetIndex> Default for Access<T>
impl<T: SparseSetIndex> Default for Access<T>
source§impl<T: PartialEq + SparseSetIndex> PartialEq for Access<T>
impl<T: PartialEq + SparseSetIndex> PartialEq for Access<T>
impl<T: Eq + SparseSetIndex> Eq for Access<T>
impl<T: SparseSetIndex> StructuralEq for Access<T>
impl<T: SparseSetIndex> StructuralPartialEq for Access<T>
Auto Trait Implementations§
impl<T> RefUnwindSafe for Access<T>where
T: RefUnwindSafe,
impl<T> Send for Access<T>where
T: Send,
impl<T> Sync for Access<T>where
T: Sync,
impl<T> Unpin for Access<T>where
T: Unpin,
impl<T> UnwindSafe for Access<T>where
T: UnwindSafe,
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> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.source§impl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere
T: Default,
source§fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Self
using data from the given World
.