pub struct Populated<'w, 's, D, F = ()>(/* private fields */)
where
D: QueryData,
F: QueryFilter;
Expand description
System parameter that works very much like Query
except it always contains at least one matching entity.
This SystemParam
fails validation if no matching entities exist.
This will cause the system to be skipped, according to the rules laid out in SystemParamValidationError
.
Much like Query::is_empty
the worst case runtime will be O(n)
where n
is the number of potential matches.
This can be notably expensive for queries that rely on non-archetypal filters such as Added
,
Changed
of Spawned
which must individually check each query
result for a match.
See Query
for more details.
Implementations§
Source§impl<'w, 's, D, F> Populated<'w, 's, D, F>where
D: QueryData,
F: QueryFilter,
impl<'w, 's, D, F> Populated<'w, 's, D, F>where
D: QueryData,
F: QueryFilter,
Sourcepub fn into_inner(self) -> Query<'w, 's, D, F>
pub fn into_inner(self) -> Query<'w, 's, D, F>
Returns the inner item with ownership.
Methods from Deref<Target = Query<'w, 's, D, F>>§
If the given entity
contains the R
Relationship
component, returns the
target entity of that relationship.
Sourcepub fn relationship_sources<S>(
&'w self,
entity: Entity,
) -> impl Iterator<Item = Entity> + 'w
pub fn relationship_sources<S>( &'w self, entity: Entity, ) -> impl Iterator<Item = Entity> + 'w
If the given entity
contains the S
RelationshipTarget
component, returns the
source entities stored on that component.
Sourcepub fn root_ancestor<R>(&'w self, entity: Entity) -> Entity
pub fn root_ancestor<R>(&'w self, entity: Entity) -> Entity
Recursively walks up the tree defined by the given R
Relationship
until
there are no more related entities, returning the “root entity” of the relationship hierarchy.
§Warning
For relationship graphs that contain loops, this could loop infinitely. If your relationship is not a tree (like Bevy’s hierarchy), be sure to stop if you encounter a duplicate entity.
Sourcepub fn iter_leaves<S>(
&'w self,
entity: Entity,
) -> impl Iterator<Item = Entity> + use<'w, 's, S, D, F>where
S: RelationshipTarget,
<D as QueryData>::ReadOnly: QueryData<Item<'w, 's> = &'w S>,
<<S as RelationshipTarget>::Collection as RelationshipSourceCollection>::SourceIter<'w>: DoubleEndedIterator,
pub fn iter_leaves<S>(
&'w self,
entity: Entity,
) -> impl Iterator<Item = Entity> + use<'w, 's, S, D, F>where
S: RelationshipTarget,
<D as QueryData>::ReadOnly: QueryData<Item<'w, 's> = &'w S>,
<<S as RelationshipTarget>::Collection as RelationshipSourceCollection>::SourceIter<'w>: DoubleEndedIterator,
Iterates all “leaf entities” as defined by the RelationshipTarget
hierarchy.
§Warning
For relationship graphs that contain loops, this could loop infinitely. If your relationship is not a tree (like Bevy’s hierarchy), be sure to stop if you encounter a duplicate entity.
Sourcepub fn iter_siblings<R>(
&'w self,
entity: Entity,
) -> impl Iterator<Item = Entity> + 'wwhere
R: Relationship,
<D as QueryData>::ReadOnly: QueryData<Item<'w, 's> = (Option<&'w R>, Option<&'w <R as Relationship>::RelationshipTarget>)>,
pub fn iter_siblings<R>(
&'w self,
entity: Entity,
) -> impl Iterator<Item = Entity> + 'wwhere
R: Relationship,
<D as QueryData>::ReadOnly: QueryData<Item<'w, 's> = (Option<&'w R>, Option<&'w <R as Relationship>::RelationshipTarget>)>,
Iterates all sibling entities that also have the R
Relationship
with the same target entity.
Sourcepub fn iter_descendants<S>(
&'w self,
entity: Entity,
) -> DescendantIter<'w, 's, D, F, S> ⓘ
pub fn iter_descendants<S>( &'w self, entity: Entity, ) -> DescendantIter<'w, 's, D, F, S> ⓘ
Iterates all descendant entities as defined by the given entity
’s RelationshipTarget
and their recursive
RelationshipTarget
.
§Warning
For relationship graphs that contain loops, this could loop infinitely. If your relationship is not a tree (like Bevy’s hierarchy), be sure to stop if you encounter a duplicate entity.
Sourcepub fn iter_descendants_depth_first<S>(
&'w self,
entity: Entity,
) -> DescendantDepthFirstIter<'w, 's, D, F, S> ⓘwhere
S: RelationshipTarget,
<D as QueryData>::ReadOnly: QueryData<Item<'w, 's> = &'w S>,
<<S as RelationshipTarget>::Collection as RelationshipSourceCollection>::SourceIter<'w>: DoubleEndedIterator,
pub fn iter_descendants_depth_first<S>(
&'w self,
entity: Entity,
) -> DescendantDepthFirstIter<'w, 's, D, F, S> ⓘwhere
S: RelationshipTarget,
<D as QueryData>::ReadOnly: QueryData<Item<'w, 's> = &'w S>,
<<S as RelationshipTarget>::Collection as RelationshipSourceCollection>::SourceIter<'w>: DoubleEndedIterator,
Iterates all descendant entities as defined by the given entity
’s RelationshipTarget
and their recursive
RelationshipTarget
in depth-first order.
§Warning
For relationship graphs that contain loops, this could loop infinitely. If your relationship is not a tree (like Bevy’s hierarchy), be sure to stop if you encounter a duplicate entity.
Sourcepub fn iter_ancestors<R>(
&'w self,
entity: Entity,
) -> AncestorIter<'w, 's, D, F, R> ⓘ
pub fn iter_ancestors<R>( &'w self, entity: Entity, ) -> AncestorIter<'w, 's, D, F, R> ⓘ
Iterates all ancestors of the given entity
as defined by the R
Relationship
.
§Warning
For relationship graphs that contain loops, this could loop infinitely. If your relationship is not a tree (like Bevy’s hierarchy), be sure to stop if you encounter a duplicate entity.
Sourcepub fn as_readonly(&self) -> Query<'_, 's, <D as QueryData>::ReadOnly, F>
pub fn as_readonly(&self) -> Query<'_, 's, <D as QueryData>::ReadOnly, F>
Returns another Query
from this that fetches the read-only version of the query items.
For example, Query<(&mut D1, &D2, &mut D3), With<F>>
will become Query<(&D1, &D2, &D3), With<F>>
.
This can be useful when working around the borrow checker,
or reusing functionality between systems via functions that accept query types.
§See also
into_readonly
for a version that consumes the Query
to return one with the full 'world
lifetime.
Sourcepub fn reborrow(&mut self) -> Query<'_, 's, D, F>
pub fn reborrow(&mut self) -> Query<'_, 's, D, F>
Returns a new Query
reborrowing the access from this one. The current query will be unusable
while the new one exists.
§Example
For example this allows to call other methods or other systems that require an owned Query
without
completely giving up ownership of it.
fn helper_system(query: Query<&ComponentA>) { /* ... */}
fn system(mut query: Query<&ComponentA>) {
helper_system(query.reborrow());
// Can still use query here:
for component in &query {
// ...
}
}
Sourcepub unsafe fn reborrow_unsafe(&self) -> Query<'_, 's, D, F>
pub unsafe fn reborrow_unsafe(&self) -> Query<'_, 's, D, F>
Returns a new Query
reborrowing the access from this one.
The current query will still be usable while the new one exists, but must not be used in a way that violates aliasing.
§Safety
This function makes it possible to violate Rust’s aliasing guarantees. You must make sure this call does not result in a mutable or shared reference to a component with a mutable reference.
§See also
reborrow
for the safe versions.
Sourcepub fn iter(&self) -> QueryIter<'_, 's, <D as QueryData>::ReadOnly, F> ⓘ
pub fn iter(&self) -> QueryIter<'_, 's, <D as QueryData>::ReadOnly, F> ⓘ
Returns an Iterator
over the read-only query items.
This iterator is always guaranteed to return results from each matching entity once and only once. Iteration order is not guaranteed.
§Example
Here, the report_names_system
iterates over the Player
component of every entity that contains it:
fn report_names_system(query: Query<&Player>) {
for player in &query {
println!("Say hello to {}!", player.name);
}
}
§See also
iter_mut
for mutable query items.
Sourcepub fn iter_mut(&mut self) -> QueryIter<'_, 's, D, F> ⓘ
pub fn iter_mut(&mut self) -> QueryIter<'_, 's, D, F> ⓘ
Returns an Iterator
over the query items.
This iterator is always guaranteed to return results from each matching entity once and only once. Iteration order is not guaranteed.
§Example
Here, the gravity_system
updates the Velocity
component of every entity that contains it:
fn gravity_system(mut query: Query<&mut Velocity>) {
const DELTA: f32 = 1.0 / 60.0;
for mut velocity in &mut query {
velocity.y -= 9.8 * DELTA;
}
}
§See also
iter
for read-only query items.
Sourcepub fn iter_combinations<const K: usize>(
&self,
) -> QueryCombinationIter<'_, 's, <D as QueryData>::ReadOnly, F, K> ⓘ
pub fn iter_combinations<const K: usize>( &self, ) -> QueryCombinationIter<'_, 's, <D as QueryData>::ReadOnly, F, K> ⓘ
Returns a QueryCombinationIter
over all combinations of K
read-only query items without repetition.
This iterator is always guaranteed to return results from each unique pair of matching entities. Iteration order is not guaranteed.
§Example
fn some_system(query: Query<&ComponentA>) {
for [a1, a2] in query.iter_combinations() {
// ...
}
}
§See also
iter_combinations_mut
for mutable query item combinations.iter_combinations_inner
for mutable query item combinations with the full'world
lifetime.
Sourcepub fn iter_combinations_mut<const K: usize>(
&mut self,
) -> QueryCombinationIter<'_, 's, D, F, K> ⓘ
pub fn iter_combinations_mut<const K: usize>( &mut self, ) -> QueryCombinationIter<'_, 's, D, F, K> ⓘ
Returns a QueryCombinationIter
over all combinations of K
query items without repetition.
This iterator is always guaranteed to return results from each unique pair of matching entities. Iteration order is not guaranteed.
§Example
fn some_system(mut query: Query<&mut ComponentA>) {
let mut combinations = query.iter_combinations_mut();
while let Some([mut a1, mut a2]) = combinations.fetch_next() {
// mutably access components data
}
}
§See also
iter_combinations
for read-only query item combinations.iter_combinations_inner
for mutable query item combinations with the full'world
lifetime.
Sourcepub fn iter_many<EntityList>(
&self,
entities: EntityList,
) -> QueryManyIter<'_, 's, <D as QueryData>::ReadOnly, F, <EntityList as IntoIterator>::IntoIter> ⓘ
pub fn iter_many<EntityList>( &self, entities: EntityList, ) -> QueryManyIter<'_, 's, <D as QueryData>::ReadOnly, F, <EntityList as IntoIterator>::IntoIter> ⓘ
Returns an Iterator
over the read-only query items generated from an Entity
list.
Items are returned in the order of the list of entities, and may not be unique if the input doesn’t guarantee uniqueness. Entities that don’t match the query are skipped.
§Example
// A component containing an entity list.
#[derive(Component)]
struct Friends {
list: Vec<Entity>,
}
fn system(
friends_query: Query<&Friends>,
counter_query: Query<&Counter>,
) {
for friends in &friends_query {
for counter in counter_query.iter_many(&friends.list) {
println!("Friend's counter: {}", counter.value);
}
}
}
§See also
iter_many_mut
to get mutable query items.iter_many_inner
to get mutable query items with the full'world
lifetime.
Sourcepub fn iter_many_mut<EntityList>(
&mut self,
entities: EntityList,
) -> QueryManyIter<'_, 's, D, F, <EntityList as IntoIterator>::IntoIter> ⓘ
pub fn iter_many_mut<EntityList>( &mut self, entities: EntityList, ) -> QueryManyIter<'_, 's, D, F, <EntityList as IntoIterator>::IntoIter> ⓘ
Returns an iterator over the query items generated from an Entity
list.
Items are returned in the order of the list of entities, and may not be unique if the input doesn’t guarantee uniqueness. Entities that don’t match the query are skipped.
§Examples
#[derive(Component)]
struct Counter {
value: i32
}
#[derive(Component)]
struct Friends {
list: Vec<Entity>,
}
fn system(
friends_query: Query<&Friends>,
mut counter_query: Query<&mut Counter>,
) {
for friends in &friends_query {
let mut iter = counter_query.iter_many_mut(&friends.list);
while let Some(mut counter) = iter.fetch_next() {
println!("Friend's counter: {}", counter.value);
counter.value += 1;
}
}
}
§See also
iter_many
to get read-only query items.iter_many_inner
to get mutable query items with the full'world
lifetime.
Sourcepub fn iter_many_unique<EntityList>(
&self,
entities: EntityList,
) -> QueryManyUniqueIter<'_, 's, <D as QueryData>::ReadOnly, F, <EntityList as IntoIterator>::IntoIter> ⓘwhere
EntityList: EntitySet,
pub fn iter_many_unique<EntityList>(
&self,
entities: EntityList,
) -> QueryManyUniqueIter<'_, 's, <D as QueryData>::ReadOnly, F, <EntityList as IntoIterator>::IntoIter> ⓘwhere
EntityList: EntitySet,
Returns an Iterator
over the unique read-only query items generated from an EntitySet
.
Items are returned in the order of the list of entities. Entities that don’t match the query are skipped.
§Example
// `Friends` ensures that it only lists unique entities.
#[derive(Component)]
struct Friends {
unique_list: Vec<Entity>,
}
impl<'a> IntoIterator for &'a Friends {
type Item = &'a Entity;
type IntoIter = UniqueEntityIter<slice::Iter<'a, Entity>>;
fn into_iter(self) -> Self::IntoIter {
// SAFETY: `Friends` ensures that it unique_list contains only unique entities.
unsafe { UniqueEntityIter::from_iterator_unchecked(self.unique_list.iter()) }
}
}
fn system(
friends_query: Query<&Friends>,
counter_query: Query<&Counter>,
) {
for friends in &friends_query {
for counter in counter_query.iter_many_unique(friends) {
println!("Friend's counter: {:?}", counter.value);
}
}
}
§See also
iter_many_unique_mut
to get mutable query items.iter_many_unique_inner
to get with the actual “inner” world lifetime.
Sourcepub fn iter_many_unique_mut<EntityList>(
&mut self,
entities: EntityList,
) -> QueryManyUniqueIter<'_, 's, D, F, <EntityList as IntoIterator>::IntoIter> ⓘwhere
EntityList: EntitySet,
pub fn iter_many_unique_mut<EntityList>(
&mut self,
entities: EntityList,
) -> QueryManyUniqueIter<'_, 's, D, F, <EntityList as IntoIterator>::IntoIter> ⓘwhere
EntityList: EntitySet,
Returns an iterator over the unique query items generated from an EntitySet
.
Items are returned in the order of the list of entities. Entities that don’t match the query are skipped.
§Examples
#[derive(Component)]
struct Counter {
value: i32
}
// `Friends` ensures that it only lists unique entities.
#[derive(Component)]
struct Friends {
unique_list: Vec<Entity>,
}
impl<'a> IntoIterator for &'a Friends {
type Item = &'a Entity;
type IntoIter = UniqueEntityIter<slice::Iter<'a, Entity>>;
fn into_iter(self) -> Self::IntoIter {
// SAFETY: `Friends` ensures that it unique_list contains only unique entities.
unsafe { UniqueEntityIter::from_iterator_unchecked(self.unique_list.iter()) }
}
}
fn system(
friends_query: Query<&Friends>,
mut counter_query: Query<&mut Counter>,
) {
for friends in &friends_query {
for mut counter in counter_query.iter_many_unique_mut(friends) {
println!("Friend's counter: {:?}", counter.value);
counter.value += 1;
}
}
}
§See also
iter_many_unique
to get read-only query items.iter_many_unique_inner
to get with the actual “inner” world lifetime.
Sourcepub unsafe fn iter_unsafe(&self) -> QueryIter<'_, 's, D, F> ⓘ
pub unsafe fn iter_unsafe(&self) -> QueryIter<'_, 's, D, F> ⓘ
Returns an Iterator
over the query items.
This iterator is always guaranteed to return results from each matching entity once and only once. Iteration order is not guaranteed.
§Safety
This function makes it possible to violate Rust’s aliasing guarantees. You must make sure this call does not result in multiple mutable references to the same component.
§See also
Sourcepub unsafe fn iter_combinations_unsafe<const K: usize>(
&self,
) -> QueryCombinationIter<'_, 's, D, F, K> ⓘ
pub unsafe fn iter_combinations_unsafe<const K: usize>( &self, ) -> QueryCombinationIter<'_, 's, D, F, K> ⓘ
Iterates over all possible combinations of K
query items without repetition.
This iterator is always guaranteed to return results from each unique pair of matching entities. Iteration order is not guaranteed.
§Safety
This allows aliased mutability. You must make sure this call does not result in multiple mutable references to the same component.
§See also
iter_combinations
anditer_combinations_mut
for the safe versions.
Sourcepub unsafe fn iter_many_unsafe<EntityList>(
&self,
entities: EntityList,
) -> QueryManyIter<'_, 's, D, F, <EntityList as IntoIterator>::IntoIter> ⓘ
pub unsafe fn iter_many_unsafe<EntityList>( &self, entities: EntityList, ) -> QueryManyIter<'_, 's, D, F, <EntityList as IntoIterator>::IntoIter> ⓘ
Returns an Iterator
over the query items generated from an Entity
list.
Items are returned in the order of the list of entities, and may not be unique if the input doesnn’t guarantee uniqueness. Entities that don’t match the query are skipped.
§Safety
This allows aliased mutability and does not check for entity uniqueness.
You must make sure this call does not result in multiple mutable references to the same component.
Particular care must be taken when collecting the data (rather than iterating over it one item at a time) such as via Iterator::collect
.
§See also
iter_many_mut
to safely access the query items.
Sourcepub unsafe fn iter_many_unique_unsafe<EntityList>(
&self,
entities: EntityList,
) -> QueryManyUniqueIter<'_, 's, D, F, <EntityList as IntoIterator>::IntoIter> ⓘwhere
EntityList: EntitySet,
pub unsafe fn iter_many_unique_unsafe<EntityList>(
&self,
entities: EntityList,
) -> QueryManyUniqueIter<'_, 's, D, F, <EntityList as IntoIterator>::IntoIter> ⓘwhere
EntityList: EntitySet,
Returns an Iterator
over the unique query items generated from an Entity
list.
Items are returned in the order of the list of entities. Entities that don’t match the query are skipped.
§Safety
This allows aliased mutability. You must make sure this call does not result in multiple mutable references to the same component.
§See also
iter_many_unique
to get read-only query items.iter_many_unique_mut
to get mutable query items.iter_many_unique_inner
to get with the actual “inner” world lifetime.
Sourcepub fn par_iter(&self) -> QueryParIter<'_, 's, <D as QueryData>::ReadOnly, F>
pub fn par_iter(&self) -> QueryParIter<'_, 's, <D as QueryData>::ReadOnly, F>
Returns a parallel iterator over the query results for the given World
.
This parallel iterator is always guaranteed to return results from each matching entity once and only once. Iteration order and thread assignment is not guaranteed.
If the multithreaded
feature is disabled, iterating with this operates identically to Iterator::for_each
on QueryIter
.
This can only be called for read-only queries, see par_iter_mut
for write-queries.
Note that you must use the for_each
method to iterate over the
results, see par_iter_mut
for an example.
Sourcepub fn par_iter_mut(&mut self) -> QueryParIter<'_, 's, D, F>
pub fn par_iter_mut(&mut self) -> QueryParIter<'_, 's, D, F>
Returns a parallel iterator over the query results for the given World
.
This parallel iterator is always guaranteed to return results from each matching entity once and only once. Iteration order and thread assignment is not guaranteed.
If the multithreaded
feature is disabled, iterating with this operates identically to Iterator::for_each
on QueryIter
.
This can only be called for mutable queries, see par_iter
for read-only-queries.
§Example
Here, the gravity_system
updates the Velocity
component of every entity that contains it:
fn gravity_system(mut query: Query<&mut Velocity>) {
const DELTA: f32 = 1.0 / 60.0;
query.par_iter_mut().for_each(|mut velocity| {
velocity.y -= 9.8 * DELTA;
});
}
Sourcepub fn par_iter_many<EntityList>(
&self,
entities: EntityList,
) -> QueryParManyIter<'_, 's, <D as QueryData>::ReadOnly, F, <EntityList as IntoIterator>::Item>
pub fn par_iter_many<EntityList>( &self, entities: EntityList, ) -> QueryParManyIter<'_, 's, <D as QueryData>::ReadOnly, F, <EntityList as IntoIterator>::Item>
Returns a parallel iterator over the read-only query items generated from an Entity
list.
Entities that don’t match the query are skipped. Iteration order and thread assignment is not guaranteed.
If the multithreaded
feature is disabled, iterating with this operates identically to Iterator::for_each
on QueryManyIter
.
This can only be called for read-only queries. To avoid potential aliasing, there is no par_iter_many_mut
equivalent.
See par_iter_many_unique_mut
for an alternative using EntitySet
.
Note that you must use the for_each
method to iterate over the
results, see par_iter_mut
for an example.
Sourcepub fn par_iter_many_unique<EntityList>(
&self,
entities: EntityList,
) -> QueryParManyUniqueIter<'_, 's, <D as QueryData>::ReadOnly, F, <EntityList as IntoIterator>::Item>
pub fn par_iter_many_unique<EntityList>( &self, entities: EntityList, ) -> QueryParManyUniqueIter<'_, 's, <D as QueryData>::ReadOnly, F, <EntityList as IntoIterator>::Item>
Returns a parallel iterator over the unique read-only query items generated from an EntitySet
.
Entities that don’t match the query are skipped. Iteration order and thread assignment is not guaranteed.
If the multithreaded
feature is disabled, iterating with this operates identically to Iterator::for_each
on QueryManyUniqueIter
.
This can only be called for read-only queries, see par_iter_many_unique_mut
for write-queries.
Note that you must use the for_each
method to iterate over the
results, see par_iter_mut
for an example.
Sourcepub fn par_iter_many_unique_mut<EntityList>(
&mut self,
entities: EntityList,
) -> QueryParManyUniqueIter<'_, 's, D, F, <EntityList as IntoIterator>::Item>
pub fn par_iter_many_unique_mut<EntityList>( &mut self, entities: EntityList, ) -> QueryParManyUniqueIter<'_, 's, D, F, <EntityList as IntoIterator>::Item>
Returns a parallel iterator over the unique query items generated from an EntitySet
.
Entities that don’t match the query are skipped. Iteration order and thread assignment is not guaranteed.
If the multithreaded
feature is disabled, iterating with this operates identically to Iterator::for_each
on QueryManyUniqueIter
.
This can only be called for mutable queries, see par_iter_many_unique
for read-only-queries.
Note that you must use the for_each
method to iterate over the
results, see par_iter_mut
for an example.
Sourcepub fn get(
&self,
entity: Entity,
) -> Result<<<D as QueryData>::ReadOnly as QueryData>::Item<'_, 's>, QueryEntityError>
pub fn get( &self, entity: Entity, ) -> Result<<<D as QueryData>::ReadOnly as QueryData>::Item<'_, 's>, QueryEntityError>
Returns the read-only query item for the given Entity
.
In case of a nonexisting entity or mismatched component, a QueryEntityError
is returned instead.
This is always guaranteed to run in O(1)
time.
§Example
Here, get
is used to retrieve the exact query item of the entity specified by the SelectedCharacter
resource.
fn print_selected_character_name_system(
query: Query<&Character>,
selection: Res<SelectedCharacter>
)
{
if let Ok(selected_character) = query.get(selection.entity) {
println!("{}", selected_character.name);
}
}
§See also
get_mut
to get a mutable query item.
Sourcepub fn get_many<const N: usize>(
&self,
entities: [Entity; N],
) -> Result<[<<D as QueryData>::ReadOnly as QueryData>::Item<'_, 's>; N], QueryEntityError>
pub fn get_many<const N: usize>( &self, entities: [Entity; N], ) -> Result<[<<D as QueryData>::ReadOnly as QueryData>::Item<'_, 's>; N], QueryEntityError>
Returns the read-only query items for the given array of Entity
.
The returned query items are in the same order as the input.
In case of a nonexisting entity or mismatched component, a QueryEntityError
is returned instead.
The elements of the array do not need to be unique, unlike get_many_mut
.
§Examples
use bevy_ecs::prelude::*;
use bevy_ecs::query::QueryEntityError;
#[derive(Component, PartialEq, Debug)]
struct A(usize);
let mut world = World::new();
let entity_vec: Vec<Entity> = (0..3).map(|i| world.spawn(A(i)).id()).collect();
let entities: [Entity; 3] = entity_vec.try_into().unwrap();
world.spawn(A(73));
let mut query_state = world.query::<&A>();
let query = query_state.query(&world);
let component_values = query.get_many(entities).unwrap();
assert_eq!(component_values, [&A(0), &A(1), &A(2)]);
let wrong_entity = Entity::from_raw_u32(365).unwrap();
assert_eq!(
match query.get_many([wrong_entity]).unwrap_err() {
QueryEntityError::EntityDoesNotExist(error) => error.entity,
_ => panic!(),
},
wrong_entity
);
§See also
get_many_mut
to get mutable query items.get_many_unique
to only handle unique inputs.
Sourcepub fn get_many_unique<const N: usize>(
&self,
entities: UniqueEntityEquivalentArray<Entity, N>,
) -> Result<[<<D as QueryData>::ReadOnly as QueryData>::Item<'_, 's>; N], QueryEntityError>
pub fn get_many_unique<const N: usize>( &self, entities: UniqueEntityEquivalentArray<Entity, N>, ) -> Result<[<<D as QueryData>::ReadOnly as QueryData>::Item<'_, 's>; N], QueryEntityError>
Returns the read-only query items for the given UniqueEntityArray
.
The returned query items are in the same order as the input.
In case of a nonexisting entity or mismatched component, a QueryEntityError
is returned instead.
§Examples
use bevy_ecs::{prelude::*, query::QueryEntityError, entity::{EntitySetIterator, UniqueEntityArray, UniqueEntityVec}};
#[derive(Component, PartialEq, Debug)]
struct A(usize);
let mut world = World::new();
let entity_set: UniqueEntityVec = world.spawn_batch((0..3).map(A)).collect_set();
let entity_set: UniqueEntityArray<3> = entity_set.try_into().unwrap();
world.spawn(A(73));
let mut query_state = world.query::<&A>();
let query = query_state.query(&world);
let component_values = query.get_many_unique(entity_set).unwrap();
assert_eq!(component_values, [&A(0), &A(1), &A(2)]);
let wrong_entity = Entity::from_raw_u32(365).unwrap();
assert_eq!(
match query.get_many_unique(UniqueEntityArray::from([wrong_entity])).unwrap_err() {
QueryEntityError::EntityDoesNotExist(error) => error.entity,
_ => panic!(),
},
wrong_entity
);
§See also
get_many_unique_mut
to get mutable query items.get_many
to handle inputs with duplicates.
Sourcepub fn get_mut(
&mut self,
entity: Entity,
) -> Result<<D as QueryData>::Item<'_, 's>, QueryEntityError>
pub fn get_mut( &mut self, entity: Entity, ) -> Result<<D as QueryData>::Item<'_, 's>, QueryEntityError>
Returns the query item for the given Entity
.
In case of a nonexisting entity or mismatched component, a QueryEntityError
is returned instead.
This is always guaranteed to run in O(1)
time.
§Example
Here, get_mut
is used to retrieve the exact query item of the entity specified by the PoisonedCharacter
resource.
fn poison_system(mut query: Query<&mut Health>, poisoned: Res<PoisonedCharacter>) {
if let Ok(mut health) = query.get_mut(poisoned.character_id) {
health.0 -= 1;
}
}
§See also
get
to get a read-only query item.
Sourcepub fn get_many_mut<const N: usize>(
&mut self,
entities: [Entity; N],
) -> Result<[<D as QueryData>::Item<'_, 's>; N], QueryEntityError>
pub fn get_many_mut<const N: usize>( &mut self, entities: [Entity; N], ) -> Result<[<D as QueryData>::Item<'_, 's>; N], QueryEntityError>
Returns the query items for the given array of Entity
.
The returned query items are in the same order as the input.
In case of a nonexisting entity, duplicate entities or mismatched component, a QueryEntityError
is returned instead.
§Examples
use bevy_ecs::prelude::*;
use bevy_ecs::query::QueryEntityError;
#[derive(Component, PartialEq, Debug)]
struct A(usize);
let mut world = World::new();
let entities: Vec<Entity> = (0..3).map(|i| world.spawn(A(i)).id()).collect();
let entities: [Entity; 3] = entities.try_into().unwrap();
world.spawn(A(73));
let wrong_entity = Entity::from_raw_u32(57).unwrap();
let invalid_entity = world.spawn_empty().id();
let mut query_state = world.query::<&mut A>();
let mut query = query_state.query_mut(&mut world);
let mut mutable_component_values = query.get_many_mut(entities).unwrap();
for mut a in &mut mutable_component_values {
a.0 += 5;
}
let component_values = query.get_many(entities).unwrap();
assert_eq!(component_values, [&A(5), &A(6), &A(7)]);
assert_eq!(
match query
.get_many_mut([wrong_entity])
.unwrap_err()
{
QueryEntityError::EntityDoesNotExist(error) => error.entity,
_ => panic!(),
},
wrong_entity
);
assert_eq!(
match query
.get_many_mut([invalid_entity])
.unwrap_err()
{
QueryEntityError::QueryDoesNotMatch(entity, _) => entity,
_ => panic!(),
},
invalid_entity
);
assert_eq!(
query
.get_many_mut([entities[0], entities[0]])
.unwrap_err(),
QueryEntityError::AliasedMutability(entities[0])
);
§See also
get_many
to get read-only query items without checking for duplicate entities.
Sourcepub fn get_many_unique_mut<const N: usize>(
&mut self,
entities: UniqueEntityEquivalentArray<Entity, N>,
) -> Result<[<D as QueryData>::Item<'_, 's>; N], QueryEntityError>
pub fn get_many_unique_mut<const N: usize>( &mut self, entities: UniqueEntityEquivalentArray<Entity, N>, ) -> Result<[<D as QueryData>::Item<'_, 's>; N], QueryEntityError>
Returns the query items for the given UniqueEntityArray
.
The returned query items are in the same order as the input.
In case of a nonexisting entity or mismatched component, a QueryEntityError
is returned instead.
§Examples
use bevy_ecs::{prelude::*, query::QueryEntityError, entity::{EntitySetIterator, UniqueEntityArray, UniqueEntityVec}};
#[derive(Component, PartialEq, Debug)]
struct A(usize);
let mut world = World::new();
let entity_set: UniqueEntityVec = world.spawn_batch((0..3).map(A)).collect_set();
let entity_set: UniqueEntityArray<3> = entity_set.try_into().unwrap();
world.spawn(A(73));
let wrong_entity = Entity::from_raw_u32(57).unwrap();
let invalid_entity = world.spawn_empty().id();
let mut query_state = world.query::<&mut A>();
let mut query = query_state.query_mut(&mut world);
let mut mutable_component_values = query.get_many_unique_mut(entity_set).unwrap();
for mut a in &mut mutable_component_values {
a.0 += 5;
}
let component_values = query.get_many_unique(entity_set).unwrap();
assert_eq!(component_values, [&A(5), &A(6), &A(7)]);
assert_eq!(
match query
.get_many_unique_mut(UniqueEntityArray::from([wrong_entity]))
.unwrap_err()
{
QueryEntityError::EntityDoesNotExist(error) => error.entity,
_ => panic!(),
},
wrong_entity
);
assert_eq!(
match query
.get_many_unique_mut(UniqueEntityArray::from([invalid_entity]))
.unwrap_err()
{
QueryEntityError::QueryDoesNotMatch(entity, _) => entity,
_ => panic!(),
},
invalid_entity
);
§See also
get_many_unique
to get read-only query items.
Sourcepub unsafe fn get_unchecked(
&self,
entity: Entity,
) -> Result<<D as QueryData>::Item<'_, 's>, QueryEntityError>
pub unsafe fn get_unchecked( &self, entity: Entity, ) -> Result<<D as QueryData>::Item<'_, 's>, QueryEntityError>
Returns the query item for the given Entity
.
In case of a nonexisting entity or mismatched component, a QueryEntityError
is returned instead.
This is always guaranteed to run in O(1)
time.
§Safety
This function makes it possible to violate Rust’s aliasing guarantees. You must make sure this call does not result in multiple mutable references to the same component.
§See also
get_mut
for the safe version.
Sourcepub fn single(
&self,
) -> Result<<<D as QueryData>::ReadOnly as QueryData>::Item<'_, 's>, QuerySingleError>
pub fn single( &self, ) -> Result<<<D as QueryData>::ReadOnly as QueryData>::Item<'_, 's>, QuerySingleError>
Returns a single read-only query item when there is exactly one entity matching the query.
If the number of query items is not exactly one, a QuerySingleError
is returned instead.
§Example
fn player_scoring_system(query: Query<&PlayerScore>) {
match query.single() {
Ok(PlayerScore(score)) => {
println!("Score: {}", score);
}
Err(QuerySingleError::NoEntities(_)) => {
println!("Error: There is no player!");
}
Err(QuerySingleError::MultipleEntities(_)) => {
println!("Error: There is more than one player!");
}
}
}
§See also
single_mut
to get the mutable query item.
Sourcepub fn single_mut(
&mut self,
) -> Result<<D as QueryData>::Item<'_, 's>, QuerySingleError>
pub fn single_mut( &mut self, ) -> Result<<D as QueryData>::Item<'_, 's>, QuerySingleError>
Returns a single query item when there is exactly one entity matching the query.
If the number of query items is not exactly one, a QuerySingleError
is returned instead.
§Example
fn regenerate_player_health_system(mut query: Query<&mut Health, With<Player>>) {
let mut health = query.single_mut().expect("Error: Could not find a single player.");
health.0 += 1;
}
§See also
single
to get the read-only query item.
Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Returns true
if there are no query items.
This is equivalent to self.iter().next().is_none()
, and thus the worst case runtime will be O(n)
where n
is the number of potential matches. This can be notably expensive for queries that rely
on non-archetypal filters such as Added
, Changed
or Spawned
which must individually check
each query result for a match.
§Example
Here, the score is increased only if an entity with a Player
component is present in the world:
fn update_score_system(query: Query<(), With<Player>>, mut score: ResMut<Score>) {
if !query.is_empty() {
score.0 += 1;
}
}
Sourcepub fn count(&self) -> usize
pub fn count(&self) -> usize
Counts the number of entities that match the query.
This is equivalent to self.iter().count()
but may be more efficient in some cases.
If F::IS_ARCHETYPAL
is true
,
this will do work proportional to the number of matched archetypes or tables, but will not iterate each entity.
If it is false
, it will have to do work for each entity.
§Example
fn targeting_system(in_range_query: Query<&InRange>) {
let count = in_range_query.count();
println!("{count} targets in range!");
}
Sourcepub fn transmute_lens<NewD>(&mut self) -> QueryLens<'_, NewD>where
NewD: QueryData,
pub fn transmute_lens<NewD>(&mut self) -> QueryLens<'_, NewD>where
NewD: QueryData,
Returns a QueryLens
that can be used to construct a new Query
giving more
restrictive access to the entities matched by the current query.
A transmute is valid only if NewD
has a subset of the read, write, and required access
of the current query. A precise description of the access required by each parameter
type is given in the table below, but typical uses are to:
- Remove components, e.g.
Query<(&A, &B)>
toQuery<&A>
. - Retrieve an existing component with reduced or equal access, e.g.
Query<&mut A>
toQuery<&A>
orQuery<&T>
toQuery<Ref<T>>
. - Add parameters with no new access, for example adding an
Entity
parameter.
Note that since filter terms are dropped, non-archetypal filters like
Added
, Changed
and Spawned
will not be respected. To maintain or change filter
terms see Self::transmute_lens_filtered
.
QueryData parameter type | Access required |
---|---|
Entity , EntityLocation , SpawnDetails , &Archetype , Has<T> , PhantomData<T> | No access |
EntityMut | Read and write access to all components, but no required access |
EntityRef | Read access to all components, but no required access |
&T , Ref<T> | Read and required access to T |
&mut T , Mut<T> | Read, write and required access to T |
Option<T> , AnyOf<(D, ...)> | Read and write access to T , but no required access |
Tuples of query data and#[derive(QueryData)] structs | The union of the access of their subqueries |
FilteredEntityRef , FilteredEntityMut | Determined by the QueryBuilder used to construct them. Any query can be transmuted to them, and they will receive the access of the source query. When combined with other QueryData , they will receive any access of the source query that does not conflict with the other data |
transmute_lens
drops filter terms, but Self::transmute_lens_filtered
supports returning a QueryLens
with a new
filter type - the access required by filter parameters are as follows.
QueryFilter parameter type | Access required |
---|---|
Added<T> , Changed<T> | Read and required access to T |
With<T> , Without<T> | No access |
Or<(T, ...)> | Read access of the subqueries, but no required access |
Tuples of query filters and #[derive(QueryFilter)] structs | The union of the access of their subqueries |
§Panics
This will panic if the access required by NewD
is not a subset of that required by
the original fetch D
.
§Example
fn reusable_function(lens: &mut QueryLens<&A>) {
assert_eq!(lens.query().single().unwrap().0, 10);
}
// We can use the function in a system that takes the exact query.
fn system_1(mut query: Query<&A>) {
reusable_function(&mut query.as_query_lens());
}
// We can also use it with a query that does not match exactly
// by transmuting it.
fn system_2(mut query: Query<(&mut A, &B)>) {
let mut lens = query.transmute_lens::<&A>();
reusable_function(&mut lens);
}
§Examples of valid transmutes
// `&mut T` and `Mut<T>` access the same data and can be transmuted to each other,
// `&T` and `Ref<T>` access the same data and can be transmuted to each other,
// and mutable versions can be transmuted to read-only versions
assert_valid_transmute::<&mut T, &T>();
assert_valid_transmute::<&mut T, Mut<T>>();
assert_valid_transmute::<Mut<T>, &mut T>();
assert_valid_transmute::<&T, Ref<T>>();
assert_valid_transmute::<Ref<T>, &T>();
// The structure can be rearranged, or subqueries dropped
assert_valid_transmute::<(&T, &U), &T>();
assert_valid_transmute::<((&T, &U), &V), (&T, (&U, &V))>();
assert_valid_transmute::<Option<(&T, &U)>, (Option<&T>, Option<&U>)>();
// Queries with no access can be freely added
assert_valid_transmute::<
&T,
(&T, Entity, EntityLocation, &Archetype, Has<U>, PhantomData<T>),
>();
// Required access can be transmuted to optional,
// and optional access can be transmuted to other optional access
assert_valid_transmute::<&T, Option<&T>>();
assert_valid_transmute::<AnyOf<(&mut T, &mut U)>, Option<&T>>();
// Note that removing subqueries from `AnyOf` will result
// in an `AnyOf` where all subqueries can yield `None`!
assert_valid_transmute::<AnyOf<(&T, &U, &V)>, AnyOf<(&T, &U)>>();
assert_valid_transmute::<EntityMut, Option<&mut T>>();
// Anything can be transmuted to `FilteredEntityRef` or `FilteredEntityMut`
// This will create a `FilteredEntityMut` that only has read access to `T`
assert_valid_transmute::<&T, FilteredEntityMut>();
// This will create a `FilteredEntityMut` that has no access to `T`,
// read access to `U`, and write access to `V`.
assert_valid_transmute::<(&mut T, &mut U, &mut V), (&mut T, &U, FilteredEntityMut)>();
// `Added<T>` and `Changed<T>` filters have the same access as `&T` data
// Remember that they are only evaluated on the transmuted query, not the original query!
assert_valid_transmute_filtered::<Entity, Changed<T>, &T, ()>();
assert_valid_transmute_filtered::<&mut T, (), &T, Added<T>>();
// Nested inside of an `Or` filter, they have the same access as `Option<&T>`.
assert_valid_transmute_filtered::<Option<&T>, (), Entity, Or<(Changed<T>, With<U>)>>();
Sourcepub fn transmute_lens_filtered<NewD, NewF>(
&mut self,
) -> QueryLens<'_, NewD, NewF>where
NewD: QueryData,
NewF: QueryFilter,
pub fn transmute_lens_filtered<NewD, NewF>(
&mut self,
) -> QueryLens<'_, NewD, NewF>where
NewD: QueryData,
NewF: QueryFilter,
Equivalent to Self::transmute_lens
but also includes a QueryFilter
type.
See Self::transmute_lens
for a description of allowed transmutes.
Note that the lens will iterate the same tables and archetypes as the original query. This means that
additional archetypal query terms like With
and Without
will not necessarily be respected and non-archetypal terms like Added
,
Changed
and Spawned
will only be respected if they
are in the type signature.
Sourcepub fn as_query_lens(&mut self) -> QueryLens<'_, D>
pub fn as_query_lens(&mut self) -> QueryLens<'_, D>
Gets a QueryLens
with the same accesses as the existing query
Sourcepub fn join<'a, OtherD, NewD>(
&'a mut self,
other: &'a mut Query<'_, '_, OtherD>,
) -> QueryLens<'a, NewD>
pub fn join<'a, OtherD, NewD>( &'a mut self, other: &'a mut Query<'_, '_, OtherD>, ) -> QueryLens<'a, NewD>
Returns a QueryLens
that can be used to get a query with the combined fetch.
For example, this can take a Query<&A>
and a Query<&B>
and return a Query<(&A, &B)>
.
The returned query will only return items with both A
and B
. Note that since filters
are dropped, non-archetypal filters like Added
, Changed
and Spawned
will not be respected.
To maintain or change filter terms see Self::join_filtered
.
§Example
fn system(
mut transforms: Query<&Transform>,
mut players: Query<&Player>,
mut enemies: Query<&Enemy>
) {
let mut players_transforms: QueryLens<(&Transform, &Player)> = transforms.join(&mut players);
for (transform, player) in &players_transforms.query() {
// do something with a and b
}
let mut enemies_transforms: QueryLens<(&Transform, &Enemy)> = transforms.join(&mut enemies);
for (transform, enemy) in &enemies_transforms.query() {
// do something with a and b
}
}
§Panics
This will panic if NewD
is not a subset of the union of the original fetch Q
and OtherD
.
§Allowed Transmutes
Like transmute_lens
the query terms can be changed with some restrictions.
See Self::transmute_lens
for more details.
Sourcepub fn join_filtered<'a, OtherD, OtherF, NewD, NewF>(
&'a mut self,
other: &'a mut Query<'_, '_, OtherD, OtherF>,
) -> QueryLens<'a, NewD, NewF>
pub fn join_filtered<'a, OtherD, OtherF, NewD, NewF>( &'a mut self, other: &'a mut Query<'_, '_, OtherD, OtherF>, ) -> QueryLens<'a, NewD, NewF>
Equivalent to Self::join
but also includes a QueryFilter
type.
Note that the lens with iterate a subset of the original queries’ tables
and archetypes. This means that additional archetypal query terms like
With
and Without
will not necessarily be respected and non-archetypal
terms like Added
, Changed
and Spawned
will only be respected if they
are in the type signature.
Sourcepub fn iter_inner(&self) -> QueryIter<'w, 's, <D as QueryData>::ReadOnly, F> ⓘ
pub fn iter_inner(&self) -> QueryIter<'w, 's, <D as QueryData>::ReadOnly, F> ⓘ
Returns an Iterator
over the query items, with the actual “inner” world lifetime.
This can only return immutable data (mutable data will be cast to an immutable form).
See Self::iter_mut
for queries that contain at least one mutable component.
§Example
Here, the report_names_system
iterates over the Player
component of every entity
that contains it:
fn report_names_system(query: Query<&Player>) {
for player in &query {
println!("Say hello to {}!", player.name);
}
}
Trait Implementations§
Source§impl<'a, 'w, 's, D, F> IntoIterator for &'a Populated<'w, 's, D, F>where
D: QueryData,
F: QueryFilter,
impl<'a, 'w, 's, D, F> IntoIterator for &'a Populated<'w, 's, D, F>where
D: QueryData,
F: QueryFilter,
Source§impl<'a, 'w, 's, D, F> IntoIterator for &'a mut Populated<'w, 's, D, F>where
D: QueryData,
F: QueryFilter,
impl<'a, 'w, 's, D, F> IntoIterator for &'a mut Populated<'w, 's, D, F>where
D: QueryData,
F: QueryFilter,
Source§impl<'w, 's, D, F> IntoIterator for Populated<'w, 's, D, F>where
D: QueryData,
F: QueryFilter,
impl<'w, 's, D, F> IntoIterator for Populated<'w, 's, D, F>where
D: QueryData,
F: QueryFilter,
Source§impl<D, F> SystemParam for Populated<'_, '_, D, F>where
D: QueryData + 'static,
F: QueryFilter + 'static,
impl<D, F> SystemParam for Populated<'_, '_, D, F>where
D: QueryData + 'static,
F: QueryFilter + 'static,
Source§type State = QueryState<D, F>
type State = QueryState<D, F>
Source§type Item<'w, 's> = Populated<'w, 's, D, F>
type Item<'w, 's> = Populated<'w, 's, D, F>
Self
, instantiated with new lifetimes. Read moreSource§fn init_state(
world: &mut World,
) -> <Populated<'_, '_, D, F> as SystemParam>::State
fn init_state( world: &mut World, ) -> <Populated<'_, '_, D, F> as SystemParam>::State
State
.Source§fn init_access(
state: &<Populated<'_, '_, D, F> as SystemParam>::State,
system_meta: &mut SystemMeta,
component_access_set: &mut FilteredAccessSet,
world: &mut World,
)
fn init_access( state: &<Populated<'_, '_, D, F> as SystemParam>::State, system_meta: &mut SystemMeta, component_access_set: &mut FilteredAccessSet, world: &mut World, )
World
access used by this SystemParam
Source§unsafe fn get_param<'w, 's>(
state: &'s mut <Populated<'_, '_, D, F> as SystemParam>::State,
system_meta: &SystemMeta,
world: UnsafeWorldCell<'w>,
change_tick: Tick,
) -> <Populated<'_, '_, D, F> as SystemParam>::Item<'w, 's>
unsafe fn get_param<'w, 's>( state: &'s mut <Populated<'_, '_, D, F> as SystemParam>::State, system_meta: &SystemMeta, world: UnsafeWorldCell<'w>, change_tick: Tick, ) -> <Populated<'_, '_, D, F> as SystemParam>::Item<'w, 's>
SystemParamFunction
. Read moreSource§unsafe fn validate_param(
state: &mut <Populated<'_, '_, D, F> as SystemParam>::State,
system_meta: &SystemMeta,
world: UnsafeWorldCell<'_>,
) -> Result<(), SystemParamValidationError>
unsafe fn validate_param( state: &mut <Populated<'_, '_, D, F> as SystemParam>::State, system_meta: &SystemMeta, world: UnsafeWorldCell<'_>, ) -> Result<(), SystemParamValidationError>
Source§fn apply(state: &mut Self::State, system_meta: &SystemMeta, world: &mut World)
fn apply(state: &mut Self::State, system_meta: &SystemMeta, world: &mut World)
SystemParam
’s state.
This is used to apply Commands
during ApplyDeferred
.Source§fn queue(
state: &mut Self::State,
system_meta: &SystemMeta,
world: DeferredWorld<'_>,
)
fn queue( state: &mut Self::State, system_meta: &SystemMeta, world: DeferredWorld<'_>, )
ApplyDeferred
.impl<'w, 's, D, F> ReadOnlySystemParam for Populated<'w, 's, D, F>where
D: ReadOnlyQueryData + 'static,
F: QueryFilter + 'static,
Auto Trait Implementations§
impl<'w, 's, D, F> Freeze for Populated<'w, 's, D, F>
impl<'w, 's, D, F = ()> !RefUnwindSafe for Populated<'w, 's, D, F>
impl<'w, 's, D, F> Send for Populated<'w, 's, D, F>
impl<'w, 's, D, F> Sync for Populated<'w, 's, D, F>
impl<'w, 's, D, F> Unpin for Populated<'w, 's, D, F>
impl<'w, 's, D, F = ()> !UnwindSafe for Populated<'w, 's, D, F>
Blanket Implementations§
Source§impl<T, U> AsBindGroupShaderType<U> for T
impl<T, U> AsBindGroupShaderType<U> for T
Source§fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
T
ShaderType
for self
. When used in AsBindGroup
derives, it is safe to assume that all images in self
exist.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>
, 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> 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> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
Source§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more