Skip to content

Commit cada71e

Browse files
committed
io::Chain: specialize some Read methods
1 parent 4653c93 commit cada71e

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

library/std/src/io/mod.rs

+33
Original file line numberDiff line numberDiff line change
@@ -2389,6 +2389,39 @@ impl<T: Read, U: Read> Read for Chain<T, U> {
23892389
}
23902390
self.second.read_vectored(bufs)
23912391
}
2392+
2393+
#[inline]
2394+
fn is_read_vectored(&self) -> bool {
2395+
self.first.is_read_vectored() || self.second.is_read_vectored()
2396+
}
2397+
2398+
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize> {
2399+
let mut read = 0;
2400+
if !self.done_first {
2401+
read += self.first.read_to_end(buf)?;
2402+
self.done_first = true;
2403+
}
2404+
read += self.second.read_to_end(buf)?;
2405+
Ok(read)
2406+
}
2407+
2408+
fn read_buf(&mut self, mut buf: BorrowedCursor<'_>) -> Result<()> {
2409+
if buf.capacity() == 0 {
2410+
return Ok(());
2411+
}
2412+
2413+
if !self.done_first {
2414+
let old_len = buf.written();
2415+
self.first.read_buf(buf.reborrow())?;
2416+
2417+
if buf.written() != old_len {
2418+
return Ok(());
2419+
} else {
2420+
self.done_first = true;
2421+
}
2422+
}
2423+
self.second.read_buf(buf)
2424+
}
23922425
}
23932426

23942427
#[stable(feature = "chain_bufread", since = "1.9.0")]

0 commit comments

Comments
 (0)