@@ -87,9 +87,11 @@ impl NullBuffer {
8787 /// Computes the union of the nulls in multiple optional [`NullBuffer`]s
8888 ///
8989 /// See [`union`](Self::union)
90- pub fn union_many ( nulls : & [ Option < & NullBuffer > ] ) -> Option < NullBuffer > {
90+ pub fn union_many < ' a > (
91+ nulls : impl IntoIterator < Item = Option < & ' a NullBuffer > > ,
92+ ) -> Option < NullBuffer > {
9193 // Unwrap to BooleanBuffer because BitAndAssign is not implemented for NullBuffer
92- let mut buffers = nulls. iter ( ) . filter_map ( |nb| nb. map ( NullBuffer :: inner) ) ;
94+ let mut buffers = nulls. into_iter ( ) . filter_map ( |nb| nb. map ( NullBuffer :: inner) ) ;
9395 let first = buffers. next ( ) ?;
9496 let mut result = first. clone ( ) ;
9597 for buf in buffers {
@@ -353,22 +355,22 @@ mod tests {
353355
354356 #[ test]
355357 fn test_union_many_all_none ( ) {
356- let result = NullBuffer :: union_many ( & [ None , None , None ] ) ;
358+ let result = NullBuffer :: union_many ( [ None , None , None ] ) ;
357359 assert ! ( result. is_none( ) ) ;
358360 }
359361
360362 #[ test]
361363 fn test_union_many_single_some ( ) {
362364 let a = NullBuffer :: from ( & [ true , false , true , true ] ) ;
363- let result = NullBuffer :: union_many ( & [ Some ( & a) ] ) ;
365+ let result = NullBuffer :: union_many ( [ Some ( & a) ] ) ;
364366 assert_eq ! ( result, Some ( a) ) ;
365367 }
366368
367369 #[ test]
368370 fn test_union_many_two_inputs ( ) {
369371 let a = NullBuffer :: from ( & [ true , false , true , true ] ) ;
370372 let b = NullBuffer :: from ( & [ true , true , false , true ] ) ;
371- let result = NullBuffer :: union_many ( & [ Some ( & a) , Some ( & b) ] ) ;
373+ let result = NullBuffer :: union_many ( [ Some ( & a) , Some ( & b) ] ) ;
372374 let expected = NullBuffer :: union ( Some ( & a) , Some ( & b) ) ;
373375 assert_eq ! ( result, expected) ;
374376 }
@@ -378,7 +380,7 @@ mod tests {
378380 let a = NullBuffer :: from ( & [ true , false , true , true ] ) ;
379381 let b = NullBuffer :: from ( & [ true , true , false , true ] ) ;
380382 let c = NullBuffer :: from ( & [ false , true , true , true ] ) ;
381- let result = NullBuffer :: union_many ( & [ Some ( & a) , Some ( & b) , Some ( & c) ] ) ;
383+ let result = NullBuffer :: union_many ( [ Some ( & a) , Some ( & b) , Some ( & c) ] ) ;
382384 let expected = NullBuffer :: from ( & [ false , false , false , true ] ) ;
383385 assert_eq ! ( result, Some ( expected) ) ;
384386 }
@@ -387,14 +389,14 @@ mod tests {
387389 fn test_union_many_mixed_none ( ) {
388390 let a = NullBuffer :: from ( & [ true , false , true , true ] ) ;
389391 let b = NullBuffer :: from ( & [ false , true , true , true ] ) ;
390- let result = NullBuffer :: union_many ( & [ Some ( & a) , None , Some ( & b) ] ) ;
392+ let result = NullBuffer :: union_many ( [ Some ( & a) , None , Some ( & b) ] ) ;
391393 let expected = NullBuffer :: union ( Some ( & a) , Some ( & b) ) ;
392394 assert_eq ! ( result, expected) ;
393395 }
394396
395397 #[ test]
396398 fn test_union_many_empty_slice ( ) {
397- let result = NullBuffer :: union_many ( & [ ] ) ;
399+ let result = NullBuffer :: union_many ( [ ] as [ Option < & NullBuffer > ; 0 ] ) ;
398400 assert ! ( result. is_none( ) ) ;
399401 }
400402}
0 commit comments