@@ -280,23 +280,14 @@ macro_rules! impl_tuple_collect {
280
280
return None ;
281
281
}
282
282
283
- #[ allow( unused_assignments) ]
284
283
fn collect_from_iter_no_buf<I >( iter: I ) -> Option <Self >
285
284
where I : IntoIterator <Item = $A>
286
285
{
287
286
let mut iter = iter. into_iter( ) ;
288
- loop {
289
- $(
290
- let $Y = if let Some ( $Y) = iter. next( ) {
291
- $Y
292
- } else {
293
- break ;
294
- } ;
295
- ) *
296
- return Some ( ( $( $Y) ,* , ) )
297
- }
298
287
299
- return None ;
288
+ Some ( ( $(
289
+ { let $Y = iter. next( ) ?; $Y } ,
290
+ ) * ) )
300
291
}
301
292
302
293
fn num_items( ) -> usize {
@@ -307,17 +298,37 @@ macro_rules! impl_tuple_collect {
307
298
use std:: mem:: replace;
308
299
309
300
let & mut ( $( ref mut $Y) ,* , ) = self ;
310
- let tmp = item;
311
301
$(
312
- let tmp = replace( $Y_rev, tmp ) ;
302
+ let item = replace( $Y_rev, item ) ;
313
303
) *
314
- drop( tmp ) ;
304
+ drop( item ) ;
315
305
}
316
306
}
317
307
)
318
308
}
319
309
310
+ // This snippet generates the twelve `impl_tuple_collect!` invocations:
311
+ // use core::iter;
312
+ // use itertools::Itertools;
313
+ //
314
+ // for i in 1..=12 {
315
+ // println!("impl_tuple_collect!({arity}; A; {ty}; {idents}; {rev_idents});",
316
+ // arity=i,
317
+ // ty=iter::repeat("A").take(i).join(", "),
318
+ // idents=('a'..='z').take(i).join(", "),
319
+ // rev_idents=('a'..='z').take(i).collect_vec().into_iter().rev().join(", ")
320
+ // );
321
+ // }
322
+ // It could probably be replaced by a bit more macro cleverness.
320
323
impl_tuple_collect ! ( 1 ; A ; A ; a; a) ;
321
324
impl_tuple_collect ! ( 2 ; A ; A , A ; a, b; b, a) ;
322
325
impl_tuple_collect ! ( 3 ; A ; A , A , A ; a, b, c; c, b, a) ;
323
326
impl_tuple_collect ! ( 4 ; A ; A , A , A , A ; a, b, c, d; d, c, b, a) ;
327
+ impl_tuple_collect ! ( 5 ; A ; A , A , A , A , A ; a, b, c, d, e; e, d, c, b, a) ;
328
+ impl_tuple_collect ! ( 6 ; A ; A , A , A , A , A , A ; a, b, c, d, e, f; f, e, d, c, b, a) ;
329
+ impl_tuple_collect ! ( 7 ; A ; A , A , A , A , A , A , A ; a, b, c, d, e, f, g; g, f, e, d, c, b, a) ;
330
+ impl_tuple_collect ! ( 8 ; A ; A , A , A , A , A , A , A , A ; a, b, c, d, e, f, g, h; h, g, f, e, d, c, b, a) ;
331
+ impl_tuple_collect ! ( 9 ; A ; A , A , A , A , A , A , A , A , A ; a, b, c, d, e, f, g, h, i; i, h, g, f, e, d, c, b, a) ;
332
+ impl_tuple_collect ! ( 10 ; A ; A , A , A , A , A , A , A , A , A , A ; a, b, c, d, e, f, g, h, i, j; j, i, h, g, f, e, d, c, b, a) ;
333
+ impl_tuple_collect ! ( 11 ; A ; A , A , A , A , A , A , A , A , A , A , A ; a, b, c, d, e, f, g, h, i, j, k; k, j, i, h, g, f, e, d, c, b, a) ;
334
+ impl_tuple_collect ! ( 12 ; A ; A , A , A , A , A , A , A , A , A , A , A , A ; a, b, c, d, e, f, g, h, i, j, k, l; l, k, j, i, h, g, f, e, d, c, b, a) ;
0 commit comments