pub struct Access<T>where
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§
§impl<T> Access<T>where
T: SparseSetIndex,
impl<T> Access<T>where
T: SparseSetIndex,
pub fn add_read(&mut self, index: T)
pub fn add_read(&mut self, index: T)
Adds access to the element given by index
.
pub fn add_write(&mut self, index: T)
pub fn add_write(&mut self, index: T)
Adds exclusive access to the element given by index
.
pub 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>
.
pub fn has_any_read(&self) -> bool
pub fn has_any_read(&self) -> bool
Returns true
if this can access anything.
pub 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
.
pub fn has_any_write(&self) -> bool
pub fn has_any_write(&self) -> bool
Returns true
if this accesses anything mutably.
pub 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>
.
pub fn read_all(&mut self)
pub fn read_all(&mut self)
Sets this as having access to all indexed elements (i.e. &World
).
pub fn write_all(&mut self)
pub fn write_all(&mut self)
Sets this as having mutable access to all indexed elements (i.e. EntityMut
).
pub 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
).
pub 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
).
pub fn clear_writes(&mut self)
pub fn clear_writes(&mut self)
Removes all writes.
pub fn clear(&mut self)
pub fn clear(&mut self)
Removes all accesses.
pub 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.
pub 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
.
pub 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.
pub 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.
pub 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.
pub 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.
pub 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§
§impl<T> Clone for Access<T>where
T: Clone + SparseSetIndex,
impl<T> Clone for Access<T>where
T: Clone + SparseSetIndex,
§impl<T> Debug for Access<T>where
T: SparseSetIndex + Debug,
impl<T> Debug for Access<T>where
T: SparseSetIndex + Debug,
§impl<T> Default for Access<T>where
T: SparseSetIndex,
impl<T> Default for Access<T>where
T: SparseSetIndex,
§impl<T> PartialEq for Access<T>where
T: PartialEq + SparseSetIndex,
impl<T> PartialEq for Access<T>where
T: PartialEq + SparseSetIndex,
impl<T> Eq for Access<T>where
T: Eq + SparseSetIndex,
impl<T> StructuralPartialEq for Access<T>where
T: SparseSetIndex,
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§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)§impl<T> Conv for T
impl<T> Conv for T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§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
.§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
.§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.§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.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere
T: Default,
§fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Self
using data from the given World
.§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.