mirror of
https://github.com/tokio-rs/tokio.git
synced 2025-10-01 12:20:39 +00:00
io: add ReadBuf::take
(#2817)
Signed-off-by: Zahari Dichev <zaharidichev@gmail.com>
This commit is contained in:
parent
c9f5bc2915
commit
171cb57fa1
@ -77,6 +77,14 @@ impl<'a> ReadBuf<'a> {
|
|||||||
unsafe { mem::transmute::<&mut [MaybeUninit<u8>], &mut [u8]>(slice) }
|
unsafe { mem::transmute::<&mut [MaybeUninit<u8>], &mut [u8]>(slice) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns a new `ReadBuf` comprised of the unfilled section up to `n`.
|
||||||
|
#[inline]
|
||||||
|
pub fn take(&mut self, n: usize) -> ReadBuf<'_> {
|
||||||
|
let max = std::cmp::min(self.remaining(), n);
|
||||||
|
// Saftey: We don't set any of the `unfilled_mut` with `MaybeUninit::uninit`.
|
||||||
|
unsafe { ReadBuf::uninit(&mut self.unfilled_mut()[..max]) }
|
||||||
|
}
|
||||||
|
|
||||||
/// Returns a shared reference to the initialized portion of the buffer.
|
/// Returns a shared reference to the initialized portion of the buffer.
|
||||||
///
|
///
|
||||||
/// This includes the filled portion.
|
/// This includes the filled portion.
|
||||||
|
@ -85,10 +85,7 @@ impl<R: AsyncRead> AsyncRead for Take<R> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let me = self.project();
|
let me = self.project();
|
||||||
let max = std::cmp::min(buf.remaining() as u64, *me.limit_) as usize;
|
let mut b = buf.take(*me.limit_ as usize);
|
||||||
// Make a ReadBuf of the unfulled section up to max
|
|
||||||
// Saftey: We don't set any of the `unfilled_mut` with `MaybeUninit::uninit`.
|
|
||||||
let mut b = unsafe { ReadBuf::uninit(&mut buf.unfilled_mut()[..max]) };
|
|
||||||
ready!(me.inner.poll_read(cx, &mut b))?;
|
ready!(me.inner.poll_read(cx, &mut b))?;
|
||||||
let n = b.filled().len();
|
let n = b.filled().len();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user