core/io/io_slice/
repr_iovec.rs1use crate::ffi::c_void;
2use crate::marker::PhantomData;
3use crate::slice;
4
5#[derive(#[automatically_derived]
impl crate::marker::Copy for iovec { }Copy, #[automatically_derived]
impl crate::clone::Clone for iovec {
#[inline]
fn clone(&self) -> iovec {
let _: crate::clone::AssertParamIsClone<*mut c_void>;
let _: crate::clone::AssertParamIsClone<usize>;
*self
}
}Clone)]
6#[repr(C)]
7struct iovec {
8 iov_base: *mut c_void,
9 iov_len: usize,
10}
11
12#[derive(#[automatically_derived]
impl<'a> crate::marker::Copy for IoSlice<'a> { }Copy, #[automatically_derived]
impl<'a> crate::clone::Clone for IoSlice<'a> {
#[inline]
fn clone(&self) -> IoSlice<'a> {
let _: crate::clone::AssertParamIsClone<iovec>;
let _: crate::clone::AssertParamIsClone<PhantomData<&'a [u8]>>;
*self
}
}Clone)]
13#[repr(transparent)]
14pub(crate) struct IoSlice<'a> {
15 vec: iovec,
16 _p: PhantomData<&'a [u8]>,
17}
18
19impl<'a> IoSlice<'a> {
20 #[inline]
21 pub(crate) fn new(buf: &'a [u8]) -> IoSlice<'a> {
22 IoSlice {
23 vec: iovec { iov_base: buf.as_ptr() as *mut u8 as *mut c_void, iov_len: buf.len() },
24 _p: PhantomData,
25 }
26 }
27
28 #[inline]
29 pub(crate) fn advance(&mut self, n: usize) {
30 if self.vec.iov_len < n {
31 {
crate::panicking::panic_fmt(format_args!("advancing IoSlice beyond its length"));
};panic!("advancing IoSlice beyond its length");
32 }
33
34 unsafe {
38 self.vec.iov_len -= n;
39 self.vec.iov_base = self.vec.iov_base.add(n);
40 }
41 }
42
43 #[inline]
44 pub(crate) const fn as_slice(&self) -> &'a [u8] {
45 unsafe { slice::from_raw_parts(self.vec.iov_base as *mut u8, self.vec.iov_len) }
48 }
49}
50
51#[repr(transparent)]
52pub(crate) struct IoSliceMut<'a> {
53 vec: iovec,
54 _p: PhantomData<&'a mut [u8]>,
55}
56
57impl<'a> IoSliceMut<'a> {
58 #[inline]
59 pub(crate) fn new(buf: &'a mut [u8]) -> IoSliceMut<'a> {
60 IoSliceMut {
61 vec: iovec { iov_base: buf.as_mut_ptr() as *mut c_void, iov_len: buf.len() },
62 _p: PhantomData,
63 }
64 }
65
66 #[inline]
67 pub(crate) fn advance(&mut self, n: usize) {
68 if self.vec.iov_len < n {
69 {
crate::panicking::panic_fmt(format_args!("advancing IoSliceMut beyond its length"));
};panic!("advancing IoSliceMut beyond its length");
70 }
71
72 unsafe {
76 self.vec.iov_len -= n;
77 self.vec.iov_base = self.vec.iov_base.add(n);
78 }
79 }
80
81 #[inline]
82 pub(crate) fn as_slice(&self) -> &[u8] {
83 unsafe { slice::from_raw_parts(self.vec.iov_base as *mut u8, self.vec.iov_len) }
86 }
87
88 #[inline]
89 pub(crate) const fn into_slice(self) -> &'a mut [u8] {
90 unsafe { slice::from_raw_parts_mut(self.vec.iov_base as *mut u8, self.vec.iov_len) }
93 }
94
95 #[inline]
96 pub(crate) fn as_mut_slice(&mut self) -> &mut [u8] {
97 unsafe { slice::from_raw_parts_mut(self.vec.iov_base as *mut u8, self.vec.iov_len) }
100 }
101}