Trait zerocopy::byte_slice::SplitByteSlice
source · pub unsafe trait SplitByteSlice: ByteSlice {
// Required method
unsafe fn split_at_unchecked(self, mid: usize) -> (Self, Self);
// Provided method
fn split_at(self, mid: usize) -> Result<(Self, Self), Self> { ... }
}
Expand description
A ByteSlice
that can be split in two.
§Safety
Unsafe code may depend for its soundness on the assumption that split_at
and split_at_unchecked
are implemented correctly. In particular, given B: SplitByteSlice
and b: B
, if b.deref()
returns a byte slice with address
addr
and length len
, then if split <= len
, both of these
invocations:
b.split_at(split)
b.split_at_unchecked(split)
…will return (first, second)
such that:
first
’s address isaddr
and its length issplit
second
’s address isaddr + split
and its length islen - split
Required Methods§
sourceunsafe fn split_at_unchecked(self, mid: usize) -> (Self, Self)
unsafe fn split_at_unchecked(self, mid: usize) -> (Self, Self)
Splits the slice at the midpoint, possibly omitting bounds checks.
s.split_at_unchecked(mid)
returns s[..mid]
and s[mid..]
.
§Safety
mid
must not be greater than self.deref().len()
.
§Panics
Implementations of this method may choose to perform a bounds check and
panic if mid > self.deref().len()
. They may also panic for any other
reason. Since it is optional, callers must not rely on this behavior for
soundness.
Provided Methods§
sourcefn split_at(self, mid: usize) -> Result<(Self, Self), Self>
fn split_at(self, mid: usize) -> Result<(Self, Self), Self>
Attempts to split self
at the midpoint.
s.split_at(mid)
returns Ok((s[..mid], s[mid..]))
if mid <= s.deref().len()
and otherwise returns Err(s)
.
§Safety
Unsafe code may rely on this function correctly implementing the above functionality.