@@ -349,29 +349,28 @@ impl Iter<'_> {
349349 /// let mut iter = bitmap.iter();
350350 /// let mut buf = [0u32; 32];
351351 ///
352- /// let n = iter.next_many(&mut buf);
353- /// assert_eq!(n , 32);
354- /// assert_eq!(buf [0], 0);
355- /// assert_eq!(buf [31], 31);
352+ /// let out = iter.next_many(&mut buf);
353+ /// assert_eq!(out.len() , 32);
354+ /// assert_eq!(out [0], 0);
355+ /// assert_eq!(out [31], 31);
356356 ///
357357 /// // Iterate remainder
358- /// let n = iter.next_many(&mut buf);
359- /// assert_eq!(n , 32);
360- /// assert_eq!(buf [0], 32);
358+ /// let out = iter.next_many(&mut buf);
359+ /// assert_eq!(out.len() , 32);
360+ /// assert_eq!(out [0], 32);
361361 /// ```
362- pub fn next_many ( & mut self , dst : & mut [ u32 ] ) -> usize {
362+ pub fn next_many < ' a > ( & mut self , dst : & ' a mut [ u32 ] ) -> & ' a [ u32 ] {
363363 if dst. is_empty ( ) {
364- return 0 ;
364+ return & [ ] ;
365365 }
366366
367367 let mut count = 0 ;
368368
369369 // First drain from the front container iterator if present
370370 if let Some ( ref mut front_iter) = self . front {
371- let n = front_iter. next_many ( & mut dst[ count..] ) ;
372- count += n;
371+ count += front_iter. next_many ( & mut dst[ count..] ) . len ( ) ;
373372 if count >= dst. len ( ) {
374- return count;
373+ return & dst [ .. count] ;
375374 }
376375 // Front is exhausted
377376 self . front = None ;
@@ -384,28 +383,28 @@ impl Iter<'_> {
384383 break ;
385384 } ;
386385 let mut container_iter = container. into_iter ( ) ;
387- let n = container_iter. next_many ( & mut dst[ count..] ) ;
388- count += n ;
386+ let out = container_iter. next_many ( & mut dst[ count..] ) ;
387+ count += out . len ( ) ;
389388
390389 // If container still has values, save it as new front
391- if n > 0 && container_iter. len ( ) > 0 {
390+ if !out . is_empty ( ) && container_iter. len ( ) > 0 {
392391 self . front = Some ( container_iter) ;
393- return count;
392+ return & dst [ .. count] ;
394393 }
395394 }
396395
397396 // Finally, try draining from the back iterator if present
398397 if count < dst. len ( ) {
399398 if let Some ( ref mut back_iter) = self . back {
400399 let n = back_iter. next_many ( & mut dst[ count..] ) ;
401- count += n;
400+ count += n. len ( ) ;
402401 if back_iter. len ( ) == 0 {
403402 self . back = None ;
404403 }
405404 }
406405 }
407406
408- count
407+ & dst [ .. count]
409408 }
410409}
411410
@@ -513,29 +512,28 @@ impl IntoIter {
513512 /// let mut iter = bitmap.into_iter();
514513 /// let mut buf = [0u32; 32];
515514 ///
516- /// let n = iter.next_many(&mut buf);
517- /// assert_eq!(n , 32);
518- /// assert_eq!(buf [0], 0);
519- /// assert_eq!(buf [31], 31);
515+ /// let out = iter.next_many(&mut buf);
516+ /// assert_eq!(out.len() , 32);
517+ /// assert_eq!(out [0], 0);
518+ /// assert_eq!(out [31], 31);
520519 ///
521520 /// // Iterate remainder
522- /// let n = iter.next_many(&mut buf);
523- /// assert_eq!(n , 32);
524- /// assert_eq!(buf [0], 32);
521+ /// let out = iter.next_many(&mut buf);
522+ /// assert_eq!(out.len() , 32);
523+ /// assert_eq!(out [0], 32);
525524 /// ```
526- pub fn next_many ( & mut self , dst : & mut [ u32 ] ) -> usize {
525+ pub fn next_many < ' a > ( & mut self , dst : & ' a mut [ u32 ] ) -> & ' a [ u32 ] {
527526 if dst. is_empty ( ) {
528- return 0 ;
527+ return & [ ] ;
529528 }
530529
531530 let mut count = 0 ;
532531
533532 // First drain from the front container iterator if present
534533 if let Some ( ref mut front_iter) = self . front {
535- let n = front_iter. next_many ( & mut dst[ count..] ) ;
536- count += n;
534+ count += front_iter. next_many ( & mut dst[ count..] ) . len ( ) ;
537535 if count >= dst. len ( ) {
538- return count;
536+ return & dst [ .. count] ;
539537 }
540538 // Front is exhausted
541539 self . front = None ;
@@ -548,28 +546,27 @@ impl IntoIter {
548546 break ;
549547 } ;
550548 let mut container_iter = container. into_iter ( ) ;
551- let n = container_iter. next_many ( & mut dst[ count..] ) ;
552- count += n ;
549+ let out = container_iter. next_many ( & mut dst[ count..] ) ;
550+ count += out . len ( ) ;
553551
554552 // If container still has values, save it as new front
555- if n > 0 && container_iter. len ( ) > 0 {
553+ if !out . is_empty ( ) && container_iter. len ( ) > 0 {
556554 self . front = Some ( container_iter) ;
557- return count;
555+ return & dst [ .. count] ;
558556 }
559557 }
560558
561559 // Finally, try draining from the back iterator if present
562560 if count < dst. len ( ) {
563561 if let Some ( ref mut back_iter) = self . back {
564- let n = back_iter. next_many ( & mut dst[ count..] ) ;
565- count += n;
562+ count += back_iter. next_many ( & mut dst[ count..] ) . len ( ) ;
566563 if back_iter. len ( ) == 0 {
567564 self . back = None ;
568565 }
569566 }
570567 }
571568
572- count
569+ & dst [ .. count]
573570 }
574571}
575572
0 commit comments