1
1
pub use bevy_ecs_macros:: MapEntities ;
2
- use indexmap:: IndexSet ;
2
+ use indexmap:: { IndexMap , IndexSet } ;
3
3
4
4
use crate :: {
5
5
entity:: { hash_map:: EntityHashMap , Entity } ,
6
6
world:: World ,
7
7
} ;
8
8
9
9
use alloc:: {
10
- collections:: { BTreeSet , VecDeque } ,
10
+ collections:: { BTreeMap , BTreeSet , VecDeque } ,
11
11
vec:: Vec ,
12
12
} ;
13
- use bevy_platform:: collections:: HashSet ;
14
- use core:: { hash:: BuildHasher , mem} ;
13
+ use bevy_platform:: collections:: { HashMap , HashSet } ;
14
+ use core:: {
15
+ hash:: { BuildHasher , Hash } ,
16
+ mem,
17
+ } ;
15
18
use smallvec:: SmallVec ;
16
19
17
20
use super :: EntityIndexSet ;
@@ -72,9 +75,22 @@ impl<T: MapEntities> MapEntities for Option<T> {
72
75
}
73
76
}
74
77
75
- impl < T : MapEntities + Eq + core :: hash :: Hash , S : BuildHasher + Default > MapEntities
76
- for HashSet < T , S >
78
+ impl < K : MapEntities + Eq + Hash , V : MapEntities , S : BuildHasher + Default > MapEntities
79
+ for HashMap < K , V , S >
77
80
{
81
+ fn map_entities < E : EntityMapper > ( & mut self , entity_mapper : & mut E ) {
82
+ * self = self
83
+ . drain ( )
84
+ . map ( |( mut key_entities, mut value_entities) | {
85
+ key_entities. map_entities ( entity_mapper) ;
86
+ value_entities. map_entities ( entity_mapper) ;
87
+ ( key_entities, value_entities)
88
+ } )
89
+ . collect ( ) ;
90
+ }
91
+ }
92
+
93
+ impl < T : MapEntities + Eq + Hash , S : BuildHasher + Default > MapEntities for HashSet < T , S > {
78
94
fn map_entities < E : EntityMapper > ( & mut self , entity_mapper : & mut E ) {
79
95
* self = self
80
96
. drain ( )
@@ -86,9 +102,22 @@ impl<T: MapEntities + Eq + core::hash::Hash, S: BuildHasher + Default> MapEntiti
86
102
}
87
103
}
88
104
89
- impl < T : MapEntities + Eq + core :: hash :: Hash , S : BuildHasher + Default > MapEntities
90
- for IndexSet < T , S >
105
+ impl < K : MapEntities + Eq + Hash , V : MapEntities , S : BuildHasher + Default > MapEntities
106
+ for IndexMap < K , V , S >
91
107
{
108
+ fn map_entities < E : EntityMapper > ( & mut self , entity_mapper : & mut E ) {
109
+ * self = self
110
+ . drain ( ..)
111
+ . map ( |( mut key_entities, mut value_entities) | {
112
+ key_entities. map_entities ( entity_mapper) ;
113
+ value_entities. map_entities ( entity_mapper) ;
114
+ ( key_entities, value_entities)
115
+ } )
116
+ . collect ( ) ;
117
+ }
118
+ }
119
+
120
+ impl < T : MapEntities + Eq + Hash , S : BuildHasher + Default > MapEntities for IndexSet < T , S > {
92
121
fn map_entities < E : EntityMapper > ( & mut self , entity_mapper : & mut E ) {
93
122
* self = self
94
123
. drain ( ..)
@@ -109,6 +138,19 @@ impl MapEntities for EntityIndexSet {
109
138
}
110
139
}
111
140
141
+ impl < K : MapEntities + Ord , V : MapEntities > MapEntities for BTreeMap < K , V > {
142
+ fn map_entities < E : EntityMapper > ( & mut self , entity_mapper : & mut E ) {
143
+ * self = mem:: take ( self )
144
+ . into_iter ( )
145
+ . map ( |( mut key_entities, mut value_entities) | {
146
+ key_entities. map_entities ( entity_mapper) ;
147
+ value_entities. map_entities ( entity_mapper) ;
148
+ ( key_entities, value_entities)
149
+ } )
150
+ . collect ( ) ;
151
+ }
152
+ }
153
+
112
154
impl < T : MapEntities + Ord > MapEntities for BTreeSet < T > {
113
155
fn map_entities < E : EntityMapper > ( & mut self , entity_mapper : & mut E ) {
114
156
* self = mem:: take ( self )
@@ -121,6 +163,14 @@ impl<T: MapEntities + Ord> MapEntities for BTreeSet<T> {
121
163
}
122
164
}
123
165
166
+ impl < T : MapEntities , const N : usize > MapEntities for [ T ; N ] {
167
+ fn map_entities < E : EntityMapper > ( & mut self , entity_mapper : & mut E ) {
168
+ for entities in self . iter_mut ( ) {
169
+ entities. map_entities ( entity_mapper) ;
170
+ }
171
+ }
172
+ }
173
+
124
174
impl < T : MapEntities > MapEntities for Vec < T > {
125
175
fn map_entities < E : EntityMapper > ( & mut self , entity_mapper : & mut E ) {
126
176
for entities in self . iter_mut ( ) {
0 commit comments