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 add_component_read(&mut self, index: T)
pub fn add_component_read(&mut self, index: T)
Adds access to the component given by index
.
Sourcepub fn add_component_write(&mut self, index: T)
pub fn add_component_write(&mut self, index: T)
Adds exclusive access to the component given by index
.
Sourcepub fn add_resource_read(&mut self, index: T)
pub fn add_resource_read(&mut self, index: T)
Adds access to the resource given by index
.
Sourcepub fn add_resource_write(&mut self, index: T)
pub fn add_resource_write(&mut self, index: T)
Adds exclusive access to the resource given by index
.
Sourcepub fn remove_component_read(&mut self, index: T)
pub fn remove_component_read(&mut self, index: T)
Removes both read and write access to the component given by index
.
Because this method corresponds to the set difference operator ∖, it can
create complicated logical formulas that you should verify correctness
of. For example, A ∪ (B ∖ A) isn’t equivalent to (A ∪ B) ∖ A, so you
can’t replace a call to remove_component_read
followed by a call to
extend
with a call to extend
followed by a call to
remove_component_read
.
Sourcepub fn remove_component_write(&mut self, index: T)
pub fn remove_component_write(&mut self, index: T)
Removes write access to the component given by index
.
Because this method corresponds to the set difference operator ∖, it can
create complicated logical formulas that you should verify correctness
of. For example, A ∪ (B ∖ A) isn’t equivalent to (A ∪ B) ∖ A, so you
can’t replace a call to remove_component_write
followed by a call to
extend
with a call to extend
followed by a call to
remove_component_write
.
Sourcepub fn add_archetypal(&mut self, index: T)
pub fn add_archetypal(&mut self, index: T)
Adds an archetypal (indirect) access to the component given by index
.
This is for components 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_component_read(&self, index: T) -> bool
pub fn has_component_read(&self, index: T) -> bool
Returns true
if this can access the component given by index
.
Sourcepub fn has_any_component_read(&self) -> bool
pub fn has_any_component_read(&self) -> bool
Returns true
if this can access any component.
Sourcepub fn has_component_write(&self, index: T) -> bool
pub fn has_component_write(&self, index: T) -> bool
Returns true
if this can exclusively access the component given by index
.
Sourcepub fn has_any_component_write(&self) -> bool
pub fn has_any_component_write(&self) -> bool
Returns true
if this accesses any component mutably.
Sourcepub fn has_resource_read(&self, index: T) -> bool
pub fn has_resource_read(&self, index: T) -> bool
Returns true
if this can access the resource given by index
.
Sourcepub fn has_any_resource_read(&self) -> bool
pub fn has_any_resource_read(&self) -> bool
Returns true
if this can access any resource.
Sourcepub fn has_resource_write(&self, index: T) -> bool
pub fn has_resource_write(&self, index: T) -> bool
Returns true
if this can exclusively access the resource given by index
.
Sourcepub fn has_any_resource_write(&self) -> bool
pub fn has_any_resource_write(&self) -> bool
Returns true
if this accesses any resource 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 component given by index
.
This is a component 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 read_all_components(&mut self)
pub fn read_all_components(&mut self)
Sets this as having access to all components (i.e. EntityRef
).
Sourcepub fn write_all_components(&mut self)
pub fn write_all_components(&mut self)
Sets this as having mutable access to all components (i.e. EntityMut
).
Sourcepub fn read_all_resources(&mut self)
pub fn read_all_resources(&mut self)
Sets this as having access to all resources (i.e. &World
).
Sourcepub fn write_all_resources(&mut self)
pub fn write_all_resources(&mut self)
Sets this as having mutable access to all resources (i.e. &mut World
).
Sourcepub fn write_all(&mut self)
pub fn write_all(&mut self)
Sets this as having mutable access to all indexed elements (i.e. &mut World
).
Sourcepub fn has_read_all_components(&self) -> bool
pub fn has_read_all_components(&self) -> bool
Returns true
if this has access to all components (i.e. EntityRef
).
Sourcepub fn has_write_all_components(&self) -> bool
pub fn has_write_all_components(&self) -> bool
Returns true
if this has write access to all components (i.e. EntityMut
).
Sourcepub fn has_read_all_resources(&self) -> bool
pub fn has_read_all_resources(&self) -> bool
Returns true
if this has access to all resources (i.e. EntityRef
).
Sourcepub fn has_write_all_resources(&self) -> bool
pub fn has_write_all_resources(&self) -> bool
Returns true
if this has write access to all resources (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. &mut World
).
Sourcepub fn clear_writes(&mut self)
pub fn clear_writes(&mut self)
Removes all writes.
Sourcepub fn is_components_compatible(&self, other: &Access<T>) -> bool
pub fn is_components_compatible(&self, other: &Access<T>) -> bool
Returns true
if the access and other
can be active at the same time,
only looking at their component access.
Access
instances are incompatible if one can write
an element that the other can read or write.
Sourcepub fn is_resources_compatible(&self, other: &Access<T>) -> bool
pub fn is_resources_compatible(&self, other: &Access<T>) -> bool
Returns true
if the access and other
can be active at the same time,
only looking at their resource access.
Access
instances are incompatible if one can write
an element that the other can read or write.
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_components(&self, other: &Access<T>) -> bool
pub fn is_subset_components(&self, other: &Access<T>) -> bool
Returns true
if the set’s component access is a subset of another, i.e. other
’s component access
contains at least all the values in self
.
Sourcepub fn is_subset_resources(&self, other: &Access<T>) -> bool
pub fn is_subset_resources(&self, other: &Access<T>) -> bool
Returns true
if the set’s resource access is a subset of another, i.e. other
’s resource access
contains at least all the values in self
.
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>) -> AccessConflicts
pub fn get_conflicts(&self, other: &Access<T>) -> AccessConflicts
Returns a vector of elements that the access and other
cannot access at the same time.
Sourcepub fn resource_reads_and_writes(&self) -> impl Iterator<Item = T> + '_
pub fn resource_reads_and_writes(&self) -> impl Iterator<Item = T> + '_
Returns the indices of the resources this has access to.
Sourcepub fn resource_reads(&self) -> impl Iterator<Item = T> + '_
pub fn resource_reads(&self) -> impl Iterator<Item = T> + '_
Returns the indices of the resources this has non-exclusive access to.
Sourcepub fn resource_writes(&self) -> impl Iterator<Item = T> + '_
pub fn resource_writes(&self) -> impl Iterator<Item = T> + '_
Returns the indices of the resources 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 components that this has an archetypal access to.
These are components 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> Clone for Access<T>
impl<T: SparseSetIndex> Clone for Access<T>
Source§impl<T: SparseSetIndex> Default for Access<T>
impl<T: SparseSetIndex> Default for Access<T>
impl<T: Eq + SparseSetIndex> Eq for Access<T>
impl<T: SparseSetIndex> StructuralPartialEq for Access<T>
Auto Trait Implementations§
impl<T> Freeze for Access<T>
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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§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
Creates Self
using default()
.