pub struct Access { /* 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 Access
impl Access
Sourcepub fn add_read(&mut self, index: ComponentId)
pub fn add_read(&mut self, index: ComponentId)
Adds access to the component given by index.
Sourcepub fn add_write(&mut self, index: ComponentId)
pub fn add_write(&mut self, index: ComponentId)
Adds exclusive access to the component given by index.
Sourcepub fn remove_read(&mut self, index: ComponentId)
pub fn remove_read(&mut self, index: ComponentId)
Removes read access to the component given by index.
This also removes write access, since if you can’t even read a component, you also can’t write to it.
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 Self::remove_read followed by a call to
Self::extend with a call to Self::extend followed by a call to
Self::remove_read.
Sourcepub fn remove_write(&mut self, index: ComponentId)
pub fn remove_write(&mut self, index: ComponentId)
Removes write access to the component given by index.
Unlike Self::remove_read, this method only removes write access, since it’s reasonable
to “downgrade” write access to only read access.
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_write followed by a call to
extend with a call to extend followed by a call to
remove_write.
Sourcepub fn add_archetypal(&mut self, index: ComponentId)
pub fn add_archetypal(&mut self, index: ComponentId)
Sourcepub fn has_read(&self, index: ComponentId) -> bool
pub fn has_read(&self, index: ComponentId) -> bool
Returns true if this can access the component given by index.
Sourcepub fn has_any_read(&self) -> bool
pub fn has_any_read(&self) -> bool
Returns true if this can access any component.
Sourcepub fn has_write(&self, index: ComponentId) -> bool
pub fn has_write(&self, index: ComponentId) -> bool
Returns true if this can exclusively access the component given by index.
Sourcepub fn has_any_write(&self) -> bool
pub fn has_any_write(&self) -> bool
Returns true if this accesses any component mutably.
Sourcepub fn has_archetypal(&self, index: ComponentId) -> bool
pub fn has_archetypal(&self, index: ComponentId) -> 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(&mut self)
pub fn read_all(&mut self)
Sets this as having access to all components (i.e. EntityRef and &World).
Sourcepub fn write_all(&mut self)
pub fn write_all(&mut self)
Sets this as having mutable access to all components (i.e. EntityMut and &mut World).
Sourcepub fn has_read_all(&self) -> bool
pub fn has_read_all(&self) -> bool
Returns true if this has access to all components (i.e. EntityRef and &World).
Sourcepub fn has_write_all(&self) -> bool
pub fn has_write_all(&self) -> bool
Returns true if this has write access to all components (i.e. EntityMut and &mut World).
Sourcepub fn clear_writes(&mut self)
pub fn clear_writes(&mut self)
Removes all writes.
Sourcepub fn remove_conflicting_access(&mut self, other: &Access)
pub fn remove_conflicting_access(&mut self, other: &Access)
Removes any access from self that would conflict with other.
This removes any reads and writes for any component written by other,
and removes any writes for any component read by other.
Sourcepub fn is_compatible(&self, other: &Access) -> bool
pub fn is_compatible(&self, other: &Access) -> 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) -> bool
pub fn is_subset(&self, other: &Access) -> 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) -> AccessConflicts
pub fn get_conflicts(&self, other: &Access) -> AccessConflicts
Returns a vector of elements that the access and other cannot access at the same time.
Sourcepub fn archetypal(&self) -> &ComponentIdSet
pub fn archetypal(&self) -> &ComponentIdSet
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>.
Sourcepub fn try_reads_and_writes(
&self,
) -> Result<&ComponentIdSet, UnboundedAccessError>
👎Deprecated since 0.20.0: use `reads_and_writes().as_finite_set()
pub fn try_reads_and_writes( &self, ) -> Result<&ComponentIdSet, UnboundedAccessError>
use `reads_and_writes().as_finite_set()
Returns the set of components with read access, or an error if the access is unbounded.
This includes components with write access, since write access also allows you to read the component.
Sourcepub fn reads(&self) -> &InvertibleComponentIdSet
pub fn reads(&self) -> &InvertibleComponentIdSet
Returns the set of components with read or write access.
This includes components with write access, since write access also allows you to read the component.
Sourcepub fn try_writes(&self) -> Result<&ComponentIdSet, UnboundedAccessError>
👎Deprecated since 0.20.0: use `writes().as_finite_set()
pub fn try_writes(&self) -> Result<&ComponentIdSet, UnboundedAccessError>
use `writes().as_finite_set()
Returns the set of components with write access, or an error if the access is unbounded.
Sourcepub fn writes(&self) -> &InvertibleComponentIdSet
pub fn writes(&self) -> &InvertibleComponentIdSet
Returns the set of components with write access.
Sourcepub fn try_iter_access(
&self,
) -> Result<impl Iterator<Item = ComponentAccessKind> + '_, UnboundedAccessError>
pub fn try_iter_access( &self, ) -> Result<impl Iterator<Item = ComponentAccessKind> + '_, UnboundedAccessError>
Returns an iterator over the component IDs and their ComponentAccessKind.
Returns Err(UnboundedAccess) if the access is unbounded.
This typically occurs when an Access is marked as accessing all
components, and then adding exceptions.
§Examples
let mut access = Access::default();
access.add_read(ComponentId::new(1));
access.add_write(ComponentId::new(2));
access.add_archetypal(ComponentId::new(3));
let result = access
.try_iter_access()
.map(Iterator::collect::<Vec<_>>);
assert_eq!(
result,
Ok(vec![
ComponentAccessKind::Shared(ComponentId::new(1)),
ComponentAccessKind::Exclusive(ComponentId::new(2)),
ComponentAccessKind::Archetypal(ComponentId::new(3)),
]),
);Trait Implementations§
impl Eq for Access
impl StructuralPartialEq for Access
Auto Trait Implementations§
impl Freeze for Access
impl RefUnwindSafe for Access
impl Send for Access
impl Sync for Access
impl Unpin for Access
impl UnsafeUnpin for Access
impl UnwindSafe for Access
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,
impl<T> ConditionalSend for Twhere
T: Send,
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>, which can then be
downcast into Box<dyn 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>, which 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> DowncastSend for T
impl<T> DowncastSend for T
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<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> FromTemplate for T
impl<T> FromTemplate for T
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().
Source§impl<T> IntoResult<T> for T
impl<T> IntoResult<T> for T
Source§fn into_result(self) -> Result<T, RunSystemError>
fn into_result(self) -> Result<T, RunSystemError>
Source§impl<T> Template for T
impl<T> Template for T
Source§fn build_template(
&self,
_context: &mut TemplateContext<'_, '_>,
) -> Result<<T as Template>::Output, BevyError>
fn build_template( &self, _context: &mut TemplateContext<'_, '_>, ) -> Result<<T as Template>::Output, BevyError>
entity context to produce a Template::Output.Source§fn clone_template(&self) -> T
fn clone_template(&self) -> T
Clone.