pub struct RingBuf { /* private fields */ }Expand description
A fixed sized buffer connected end-to-end.
§Examples
use std::io::{Read, Write};
use bytebufrs::RingBuf;
let mut rb = RingBuf::with_capacity(5);
rb.write(&[3, 2, 1]).unwrap();
assert_eq!(rb.len(), 3);
let mut buf = [0u8; 10];
rb.read(&mut buf).unwrap();
assert_eq!(rb.len(), 0);
assert_eq!(buf, [3, 2, 1, 0, 0, 0, 0, 0, 0, 0]);
rb.write(&[4, 5, 6, 7, 8]).unwrap();
assert_eq!(rb.len(), 5);Implementations§
Source§impl RingBuf
impl RingBuf
Sourcepub fn with_capacity(capacity: usize) -> Self
pub fn with_capacity(capacity: usize) -> Self
Constructs a new, empty RingBuf with the specified capacity.
The underlying buffer will be of length capacity + 1;
§Examples
use bytebufrs::RingBuf;
let mut rb = RingBuf::with_capacity(10);
assert_eq!(rb.capacity(), 10);
assert_eq!(rb.len(), 0);
assert!(rb.is_empty());Sourcepub fn capacity(&self) -> usize
pub fn capacity(&self) -> usize
Returns the number of bytes the ring buffer can hold.
use bytebufrs::RingBuf;
let rb = RingBuf::with_capacity(10);
assert_eq!(rb.capacity(), 10);Sourcepub fn clear(&mut self)
pub fn clear(&mut self)
Clears the ring buffer, resetting the read and write position to 0.
§Examples
use bytebufrs::RingBuf;
let mut rb: RingBuf = vec![0, 1, 2, 3, 4].into();
rb.clear();
assert_eq!(rb.len(), 0);
assert!(rb.is_empty());Sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Returns the number of bytes in the ring buffer, also referred to as its ‘length’.
§Examples
use bytebufrs::RingBuf;
let rb: RingBuf = vec![1, 2, 3].into();
assert_eq!(rb.len(), 3);Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Returns true if the ring buffer doesn’t contain any bytes.
§Examples
use std::io::Write;
use bytebufrs::RingBuf;
let mut rb = RingBuf::with_capacity(10);
assert!(rb.is_empty());
rb.write(&[0, 1, 2, 3]).unwrap();
assert!(!rb.is_empty());Sourcepub fn advance_read_pos(&mut self, count: usize) -> Result<()>
pub fn advance_read_pos(&mut self, count: usize) -> Result<()>
Advances the read position by count. The read position can’t go past the write position.
§Examples
use bytebufrs::RingBuf;
let mut rb: RingBuf = vec![0, 1, 2].into();
assert_eq!(rb.len(), 3);
rb.advance_read_pos(3).unwrap();
assert_eq!(rb.len(), 0);Trying to set the read position past the write position will fail:
use bytebufrs::RingBuf;
let mut rb = RingBuf::with_capacity(10);
rb.advance_read_pos(1).unwrap(); // Will panic!Sourcepub fn peek(&self, buf: &mut [u8]) -> Result<usize>
pub fn peek(&self, buf: &mut [u8]) -> Result<usize>
Reads from the ring buffer without advancing the read position. On success,returns the number of bytes peeked.
§Examples
use bytebufrs::RingBuf;
let mut rb: RingBuf = vec![0, 1, 2].into();
assert_eq!(rb.len(), 3);
let mut buf = [0u8; 10];
rb.peek(&mut buf).unwrap();
assert_eq!(buf, [0, 1, 2, 0, 0, 0, 0, 0, 0, 0]);
assert_eq!(rb.len(), 3);Trait Implementations§
Source§impl From<Box<[u8]>> for RingBuf
impl From<Box<[u8]>> for RingBuf
Source§fn from(s: Box<[u8]>) -> Self
fn from(s: Box<[u8]>) -> Self
Creates a ring buffer with the given slice as backing buffer. Note that the ring buffer capacity will be 1 byte less then the length of the slice.
§Examples
use bytebufrs::RingBuf;
let rb: RingBuf = vec![0u8; 5].into_boxed_slice().into();
assert_eq!(rb.capacity(), 4);Source§impl From<Vec<u8>> for RingBuf
impl From<Vec<u8>> for RingBuf
Source§fn from(s: Vec<u8>) -> Self
fn from(s: Vec<u8>) -> Self
Creates a ring buffer from the given vector. The capacity and length of the ring buffer will be equal to the length of the vector i.e. the ring buffer will be full.
§Examples
use bytebufrs::RingBuf;
let rb: RingBuf = vec![0, 1, 2, 3, 4].into();
assert_eq!(rb.capacity(), 5);
assert_eq!(rb.len(), 5);
assert!(!rb.is_empty());Source§impl Read for RingBuf
impl Read for RingBuf
Source§fn read(&mut self, buf: &mut [u8]) -> Result<usize>
fn read(&mut self, buf: &mut [u8]) -> Result<usize>
1.36.0 · Source§fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
read, except that it reads into a slice of buffers. Read moreSource§fn is_read_vectored(&self) -> bool
fn is_read_vectored(&self) -> bool
can_vector)1.0.0 · Source§fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>
buf. Read more1.0.0 · Source§fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
buf. Read more1.6.0 · Source§fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
buf. Read moreSource§fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
read_buf)Source§fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
read_buf)cursor. Read more1.0.0 · Source§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
Read. Read moreSource§impl Write for RingBuf
impl Write for RingBuf
Source§fn write(&mut self, buf: &[u8]) -> Result<usize>
fn write(&mut self, buf: &[u8]) -> Result<usize>
Source§fn flush(&mut self) -> Result<()>
fn flush(&mut self) -> Result<()>
Source§fn is_write_vectored(&self) -> bool
fn is_write_vectored(&self) -> bool
can_vector)1.0.0 · Source§fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
Source§fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
write_all_vectored)