File tree Expand file tree Collapse file tree 1 file changed +8
-5
lines changed Expand file tree Collapse file tree 1 file changed +8
-5
lines changed Original file line number Diff line number Diff line change @@ -15,18 +15,21 @@ pub struct Grid<T> {
15
15
line_count : usize ,
16
16
}
17
17
18
- impl < T , I2 : Iterator < Item = T > > std:: iter:: FromIterator < I2 > for Grid < T > {
18
+ impl < T , I2 : ExactSizeIterator < Item = T > > std:: iter:: FromIterator < I2 > for Grid < T > {
19
19
#[ inline]
20
20
fn from_iter < I : IntoIterator < Item = I2 > > ( iter : I ) -> Self {
21
- let mut iter = iter. into_iter ( ) ;
21
+ let mut iter = iter. into_iter ( ) . peekable ( ) ;
22
22
23
23
let ( low, high) = iter. size_hint ( ) ;
24
24
let mut data = Vec :: with_capacity ( high. map_or ( low, |x| x) ) ;
25
25
26
- data. extend ( iter. next ( ) . unwrap ( ) ) ;
27
- let line_length = data. len ( ) ;
26
+ let line_length = iter. peek ( ) . unwrap ( ) . len ( ) ;
27
+
28
+ // This is significantly faster than data.extend(i.flatten()). Dunno why.
29
+ for i in iter {
30
+ data. extend ( i) ;
31
+ }
28
32
29
- data. extend ( iter. flatten ( ) ) ;
30
33
debug_assert ! ( data. len( ) % line_length == 0 ) ;
31
34
let line_count = data. len ( ) / line_length;
32
35
You can’t perform that action at this time.
0 commit comments