Skip to content

Commit e6c3008

Browse files
committed
small iter.intersperse.fold() optimization
No need to call into fold when the first item is already None, this avoids some redundant work for empty iterators. "But it uses Fuse" one might want to protest, but Fuse is specialized and may call into the inner iterator anyway.
1 parent 75e7cf5 commit e6c3008

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

library/core/src/iter/adapters/intersperse.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,16 @@ where
223223
{
224224
let mut accum = init;
225225

226-
let first = if started { next_item.take() } else { iter.next() };
226+
let first = if started {
227+
next_item.take()
228+
} else {
229+
let n = iter.next();
230+
// skip invoking fold() for empty iterators
231+
if n.is_none() {
232+
return accum;
233+
}
234+
n
235+
};
227236
if let Some(x) = first {
228237
accum = f(accum, x);
229238
}

0 commit comments

Comments
 (0)