Skip to main content

core/io/io_slice/
repr_generic.rs

1use crate::mem;
2
3#[derive(Copy, Clone)]
4pub(crate) struct IoSlice<'a>(&'a [u8]);
5
6impl<'a> IoSlice<'a> {
7    #[inline]
8    pub(crate) fn new(buf: &'a [u8]) -> IoSlice<'a> {
9        IoSlice(buf)
10    }
11
12    #[inline]
13    pub(crate) fn advance(&mut self, n: usize) {
14        self.0 = &self.0[n..]
15    }
16
17    #[inline]
18    pub(crate) const fn as_slice(&self) -> &'a [u8] {
19        self.0
20    }
21}
22
23pub(crate) struct IoSliceMut<'a>(&'a mut [u8]);
24
25impl<'a> IoSliceMut<'a> {
26    #[inline]
27    pub(crate) fn new(buf: &'a mut [u8]) -> IoSliceMut<'a> {
28        IoSliceMut(buf)
29    }
30
31    #[inline]
32    pub(crate) fn advance(&mut self, n: usize) {
33        let slice = mem::take(&mut self.0);
34        let (_, remaining) = slice.split_at_mut(n);
35        self.0 = remaining;
36    }
37
38    #[inline]
39    pub(crate) fn as_slice(&self) -> &[u8] {
40        self.0
41    }
42
43    #[inline]
44    pub(crate) const fn into_slice(self) -> &'a mut [u8] {
45        self.0
46    }
47
48    #[inline]
49    pub(crate) fn as_mut_slice(&mut self) -> &mut [u8] {
50        self.0
51    }
52}