Implement MapEntities
for arrays, HashMap
, BTreeMap
, IndexMap
(#19908)
# Objective - `MapEntities` is not implemented for arrays, `HashMap`, `BTreeMap`, and `IndexMap`. ## Solution - Implement `MapEntities` for arrays, `HashMap`, `BTreeMap`, `IndexMap` ## Testing - I didn't add a test for this as the implementations seems pretty trivial
This commit is contained in:
parent
9e0c66bd65
commit
ee1807395e
@ -1,5 +1,5 @@
|
|||||||
pub use bevy_ecs_macros::MapEntities;
|
pub use bevy_ecs_macros::MapEntities;
|
||||||
use indexmap::IndexSet;
|
use indexmap::{IndexMap, IndexSet};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
entity::{hash_map::EntityHashMap, Entity},
|
entity::{hash_map::EntityHashMap, Entity},
|
||||||
@ -7,11 +7,14 @@ use crate::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
use alloc::{
|
use alloc::{
|
||||||
collections::{BTreeSet, VecDeque},
|
collections::{BTreeMap, BTreeSet, VecDeque},
|
||||||
vec::Vec,
|
vec::Vec,
|
||||||
};
|
};
|
||||||
use bevy_platform::collections::HashSet;
|
use bevy_platform::collections::{HashMap, HashSet};
|
||||||
use core::{hash::BuildHasher, mem};
|
use core::{
|
||||||
|
hash::{BuildHasher, Hash},
|
||||||
|
mem,
|
||||||
|
};
|
||||||
use smallvec::SmallVec;
|
use smallvec::SmallVec;
|
||||||
|
|
||||||
use super::EntityIndexSet;
|
use super::EntityIndexSet;
|
||||||
@ -72,9 +75,22 @@ impl<T: MapEntities> MapEntities for Option<T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: MapEntities + Eq + core::hash::Hash, S: BuildHasher + Default> MapEntities
|
impl<K: MapEntities + Eq + Hash, V: MapEntities, S: BuildHasher + Default> MapEntities
|
||||||
for HashSet<T, S>
|
for HashMap<K, V, S>
|
||||||
{
|
{
|
||||||
|
fn map_entities<E: EntityMapper>(&mut self, entity_mapper: &mut E) {
|
||||||
|
*self = self
|
||||||
|
.drain()
|
||||||
|
.map(|(mut key_entities, mut value_entities)| {
|
||||||
|
key_entities.map_entities(entity_mapper);
|
||||||
|
value_entities.map_entities(entity_mapper);
|
||||||
|
(key_entities, value_entities)
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: MapEntities + Eq + Hash, S: BuildHasher + Default> MapEntities for HashSet<T, S> {
|
||||||
fn map_entities<E: EntityMapper>(&mut self, entity_mapper: &mut E) {
|
fn map_entities<E: EntityMapper>(&mut self, entity_mapper: &mut E) {
|
||||||
*self = self
|
*self = self
|
||||||
.drain()
|
.drain()
|
||||||
@ -86,9 +102,22 @@ impl<T: MapEntities + Eq + core::hash::Hash, S: BuildHasher + Default> MapEntiti
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: MapEntities + Eq + core::hash::Hash, S: BuildHasher + Default> MapEntities
|
impl<K: MapEntities + Eq + Hash, V: MapEntities, S: BuildHasher + Default> MapEntities
|
||||||
for IndexSet<T, S>
|
for IndexMap<K, V, S>
|
||||||
{
|
{
|
||||||
|
fn map_entities<E: EntityMapper>(&mut self, entity_mapper: &mut E) {
|
||||||
|
*self = self
|
||||||
|
.drain(..)
|
||||||
|
.map(|(mut key_entities, mut value_entities)| {
|
||||||
|
key_entities.map_entities(entity_mapper);
|
||||||
|
value_entities.map_entities(entity_mapper);
|
||||||
|
(key_entities, value_entities)
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: MapEntities + Eq + Hash, S: BuildHasher + Default> MapEntities for IndexSet<T, S> {
|
||||||
fn map_entities<E: EntityMapper>(&mut self, entity_mapper: &mut E) {
|
fn map_entities<E: EntityMapper>(&mut self, entity_mapper: &mut E) {
|
||||||
*self = self
|
*self = self
|
||||||
.drain(..)
|
.drain(..)
|
||||||
@ -109,6 +138,19 @@ impl MapEntities for EntityIndexSet {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<K: MapEntities + Ord, V: MapEntities> MapEntities for BTreeMap<K, V> {
|
||||||
|
fn map_entities<E: EntityMapper>(&mut self, entity_mapper: &mut E) {
|
||||||
|
*self = mem::take(self)
|
||||||
|
.into_iter()
|
||||||
|
.map(|(mut key_entities, mut value_entities)| {
|
||||||
|
key_entities.map_entities(entity_mapper);
|
||||||
|
value_entities.map_entities(entity_mapper);
|
||||||
|
(key_entities, value_entities)
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<T: MapEntities + Ord> MapEntities for BTreeSet<T> {
|
impl<T: MapEntities + Ord> MapEntities for BTreeSet<T> {
|
||||||
fn map_entities<E: EntityMapper>(&mut self, entity_mapper: &mut E) {
|
fn map_entities<E: EntityMapper>(&mut self, entity_mapper: &mut E) {
|
||||||
*self = mem::take(self)
|
*self = mem::take(self)
|
||||||
@ -121,6 +163,14 @@ impl<T: MapEntities + Ord> MapEntities for BTreeSet<T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<T: MapEntities, const N: usize> MapEntities for [T; N] {
|
||||||
|
fn map_entities<E: EntityMapper>(&mut self, entity_mapper: &mut E) {
|
||||||
|
for entities in self.iter_mut() {
|
||||||
|
entities.map_entities(entity_mapper);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<T: MapEntities> MapEntities for Vec<T> {
|
impl<T: MapEntities> MapEntities for Vec<T> {
|
||||||
fn map_entities<E: EntityMapper>(&mut self, entity_mapper: &mut E) {
|
fn map_entities<E: EntityMapper>(&mut self, entity_mapper: &mut E) {
|
||||||
for entities in self.iter_mut() {
|
for entities in self.iter_mut() {
|
||||||
|
Loading…
Reference in New Issue
Block a user