Skip to content

Commit 3fbf5d9

Browse files
committed
Make grid's fromiter a little better.
1 parent 5df33e5 commit 3fbf5d9

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

src/util/mod.rs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,21 @@ pub struct Grid<T> {
1515
line_count: usize,
1616
}
1717

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> {
1919
#[inline]
2020
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();
2222

2323
let (low, high) = iter.size_hint();
2424
let mut data = Vec::with_capacity(high.map_or(low, |x| x));
2525

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+
}
2832

29-
data.extend(iter.flatten());
3033
debug_assert!(data.len() % line_length == 0);
3134
let line_count = data.len() / line_length;
3235

0 commit comments

Comments
 (0)