Skip to content

Commit

Permalink
Allow Buffer methods to inline
Browse files Browse the repository at this point in the history
  • Loading branch information
saethlin committed Jul 24, 2022
1 parent 761ddf3 commit b9497be
Showing 1 changed file with 9 additions and 0 deletions.
9 changes: 9 additions & 0 deletions library/std/src/io/buffered/bufreader/buffer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,43 +10,52 @@ pub struct Buffer {
}

impl Buffer {
#[inline]
pub fn with_capacity(capacity: usize) -> Self {
let buf = Box::new_uninit_slice(capacity);
Self { buf, pos: 0, cap: 0, init: 0 }
}

#[inline]
pub fn buffer(&self) -> &[u8] {
// SAFETY: self.cap is always <= self.init, so self.buf[self.pos..self.cap] is always init
// Additionally, both self.pos and self.cap are valid and and self.cap => self.pos, and
// that region is initialized because those are all invariants of this type.
unsafe { MaybeUninit::slice_assume_init_ref(&self.buf.get_unchecked(self.pos..self.cap)) }
}

#[inline]
pub fn capacity(&self) -> usize {
self.buf.len()
}

#[inline]
pub fn cap(&self) -> usize {
self.cap
}

#[inline]
pub fn pos(&self) -> usize {
self.pos
}

#[inline]
pub fn discard_buffer(&mut self) {
self.pos = 0;
self.cap = 0;
}

#[inline]
pub fn consume(&mut self, amt: usize) {
self.pos = cmp::min(self.pos + amt, self.cap);
}

#[inline]
pub fn unconsume(&mut self, amt: usize) {
self.pos = self.pos.saturating_sub(amt);
}

#[inline]
pub fn fill_buf(&mut self, mut reader: impl Read) -> io::Result<&[u8]> {
// If we've reached the end of our internal buffer then we need to fetch
// some more data from the underlying reader.
Expand Down

0 comments on commit b9497be

Please sign in to comment.