@@ -12,7 +12,7 @@ use bevy_ecs_macros::SystemParam;
1212
1313use std:: {
1414 fmt:: Debug ,
15- iter:: Cloned ,
15+ iter:: { Cloned , Flatten } ,
1616 marker:: PhantomData ,
1717 ops:: { Deref , DerefMut } ,
1818} ;
@@ -117,27 +117,15 @@ pub struct RemovedComponents<'w, 's, T: Component> {
117117 event_sets : & ' w RemovedComponentEvents ,
118118}
119119
120- pub enum MaybeIter < I : Iterator > {
121- Iter ( I ) ,
122- Empty ,
123- }
120+ type RemovedIter < ' a > = Flatten < std:: option:: IntoIter < Cloned < ManualEventIterator < ' a , Entity > > > > ;
124121
125- impl < I : Iterator > Iterator for MaybeIter < I > {
126- type Item = I :: Item ;
127- fn next ( & mut self ) -> Option < Self :: Item > {
128- match self {
129- MaybeIter :: Iter ( iter) => iter. next ( ) ,
130- MaybeIter :: Empty => None ,
131- }
132- }
133- }
134122impl < ' w , ' s , T : Component > RemovedComponents < ' w , ' s , T > {
135- pub fn iter ( & mut self ) -> MaybeIter < Cloned < ManualEventIterator < ' _ , Entity > > > {
136- if let Some ( events ) = self . event_sets . get ( * * self . component_id ) {
137- MaybeIter :: Iter ( self . reader . iter ( events ) . cloned ( ) )
138- } else {
139- MaybeIter :: Empty
140- }
123+ pub fn iter ( & mut self ) -> RemovedIter < ' _ > {
124+ self . event_sets
125+ . get ( * * self . component_id )
126+ . map ( |events| self . reader . iter ( events ) . cloned ( ) )
127+ . into_iter ( )
128+ . flatten ( )
141129 }
142130}
143131
@@ -146,7 +134,7 @@ where
146134 T : Component ,
147135{
148136 type Item = Entity ;
149- type IntoIter = MaybeIter < Cloned < ManualEventIterator < ' a , Entity > > > ;
137+ type IntoIter = RemovedIter < ' a > ;
150138 fn into_iter ( self ) -> Self :: IntoIter {
151139 self . iter ( )
152140 }
0 commit comments