48 lines
883 B
Rust
48 lines
883 B
Rust
use crate::mem;
|
|
|
|
#[derive(Copy, Clone)]
|
|
pub struct IoSlice<'a>(&'a [u8]);
|
|
|
|
impl<'a> IoSlice<'a> {
|
|
#[inline]
|
|
pub fn new(buf: &'a [u8]) -> IoSlice<'a> {
|
|
IoSlice(buf)
|
|
}
|
|
|
|
#[inline]
|
|
pub fn advance(&mut self, n: usize) {
|
|
self.0 = &self.0[n..]
|
|
}
|
|
|
|
#[inline]
|
|
pub fn as_slice(&self) -> &[u8] {
|
|
self.0
|
|
}
|
|
}
|
|
|
|
pub struct IoSliceMut<'a>(&'a mut [u8]);
|
|
|
|
impl<'a> IoSliceMut<'a> {
|
|
#[inline]
|
|
pub fn new(buf: &'a mut [u8]) -> IoSliceMut<'a> {
|
|
IoSliceMut(buf)
|
|
}
|
|
|
|
#[inline]
|
|
pub fn advance(&mut self, n: usize) {
|
|
let slice = mem::replace(&mut self.0, &mut []);
|
|
let (_, remaining) = slice.split_at_mut(n);
|
|
self.0 = remaining;
|
|
}
|
|
|
|
#[inline]
|
|
pub fn as_slice(&self) -> &[u8] {
|
|
self.0
|
|
}
|
|
|
|
#[inline]
|
|
pub fn as_mut_slice(&mut self) -> &mut [u8] {
|
|
self.0
|
|
}
|
|
}
|