@@ -267,19 +267,22 @@ impl RewriteRuleRegistry {
267267 }
268268
269269 /// Get all typed reduce rules for a given expression ID.
270- pub ( crate ) fn typed_reduce_rules_for ( & self , id : & ExprId ) -> & [ Arc < dyn DynTypedReduceRule > ] {
270+ pub ( crate ) fn typed_reduce_rules_for (
271+ & self ,
272+ id : & ExprId ,
273+ ) -> impl Iterator < Item = & Arc < dyn DynTypedReduceRule > > {
271274 self . typed_reduce_rules
272275 . get ( id)
273- . map ( |v| v . as_slice ( ) )
274- . unwrap_or_default ( )
276+ . into_iter ( )
277+ . flat_map ( |v| v . iter ( ) )
275278 }
276279
277280 /// Get all untyped reduce rules for a given expression ID.
278- pub ( crate ) fn reduce_rules_for ( & self , id : & ExprId ) -> & [ Arc < dyn DynReduceRule > ] {
279- self . reduce_rules
280- . get ( id )
281- . map ( |v| v . as_slice ( ) )
282- . unwrap_or_default ( )
281+ pub ( crate ) fn reduce_rules_for (
282+ & self ,
283+ id : & ExprId ,
284+ ) -> impl Iterator < Item = & Arc < dyn DynReduceRule > > {
285+ self . reduce_rules . get ( id ) . into_iter ( ) . flat_map ( |v| v . iter ( ) )
283286 }
284287
285288 /// Get all untyped parent reduce rules for a given child and parent expression ID pair.
@@ -289,21 +292,20 @@ impl RewriteRuleRegistry {
289292 & self ,
290293 child_id : & ExprId ,
291294 parent_id : & ExprId ,
292- ) -> Vec < Arc < dyn DynParentReduceRule > > {
293- let mut rules = Vec :: new ( ) ;
294-
295- if let Some ( specific) = self
295+ ) -> impl Iterator < Item = & Arc < dyn DynParentReduceRule > > {
296+ let specific = self
296297 . parent_rules
297298 . get ( & ( child_id. clone ( ) , parent_id. clone ( ) ) )
298- {
299- rules. extend_from_slice ( specific) ;
300- }
299+ . into_iter ( )
300+ . flat_map ( |v| v. iter ( ) ) ;
301301
302- if let Some ( wildcard) = self . any_parent_rules . get ( child_id) {
303- rules. extend_from_slice ( wildcard) ;
304- }
302+ let wildcard = self
303+ . any_parent_rules
304+ . get ( child_id)
305+ . into_iter ( )
306+ . flat_map ( |v| v. iter ( ) ) ;
305307
306- rules
308+ specific . chain ( wildcard )
307309 }
308310
309311 /// Get all the typed parent reduce rules for a given child and parent expression ID pair.
@@ -313,20 +315,19 @@ impl RewriteRuleRegistry {
313315 & self ,
314316 child_id : & ExprId ,
315317 parent_id : & ExprId ,
316- ) -> Vec < Arc < dyn DynTypedParentReduceRule > > {
317- let mut rules = Vec :: new ( ) ;
318-
319- if let Some ( specific) = self
318+ ) -> impl Iterator < Item = & Arc < dyn DynTypedParentReduceRule > > {
319+ let specific = self
320320 . typed_parent_rules
321321 . get ( & ( child_id. clone ( ) , parent_id. clone ( ) ) )
322- {
323- rules. extend_from_slice ( specific) ;
324- }
322+ . into_iter ( )
323+ . flat_map ( |v| v. iter ( ) ) ;
325324
326- if let Some ( wildcard) = self . typed_any_parent_rules . get ( child_id) {
327- rules. extend_from_slice ( wildcard) ;
328- }
325+ let wildcard = self
326+ . typed_any_parent_rules
327+ . get ( child_id)
328+ . into_iter ( )
329+ . flat_map ( |v| v. iter ( ) ) ;
329330
330- rules
331+ specific . chain ( wildcard )
331332 }
332333}
0 commit comments