Files
GopherGate/target/doc/zerocopy/byte_slice/trait.SplitByteSlice.html
2026-02-26 12:00:21 -05:00

36 lines
14 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="A `ByteSlice` that can be split in two."><title>SplitByteSlice in zerocopy::byte_slice - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../static.files/rustdoc-ca0dd0c4.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="zerocopy" data-themes="" data-resource-suffix="" data-rustdoc-version="1.93.1 (01f6ddf75 2026-02-11) (Arch Linux rust 1:1.93.1-1)" data-channel="1.93.1" data-search-js="search-9e2438ea.js" data-stringdex-js="stringdex-a3946164.js" data-settings-js="settings-c38705f0.js" ><script src="../../static.files/storage-e2aeef58.js"></script><script defer src="sidebar-items.js"></script><script defer src="../../static.files/main-a410ff4d.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-263c88ec.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-eab170b8.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-044be391.svg"></head><body class="rustdoc trait"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">SplitByteSlice</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../zerocopy/index.html">zerocopy</a><span class="version">0.8.39</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Split<wbr>Byte<wbr>Slice</a></h2><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#safety" title="Safety">Safety</a></li></ul><h3><a href="#required-methods">Required Methods</a></h3><ul class="block"><li><a href="#tymethod.split_at_unchecked" title="split_at_unchecked">split_at_unchecked</a></li></ul><h3><a href="#provided-methods">Provided Methods</a></h3><ul class="block"><li><a href="#method.split_at" title="split_at">split_at</a></li></ul><h3><a href="#foreign-impls">Implementations on Foreign Types</a></h3><ul class="block"><li><a href="#impl-SplitByteSlice-for-%26%5Bu8%5D" title="&#38;[u8]">&#38;[u8]</a></li><li><a href="#impl-SplitByteSlice-for-%26mut+%5Bu8%5D" title="&#38;mut [u8]">&#38;mut [u8]</a></li><li><a href="#impl-SplitByteSlice-for-Ref%3C'_,+%5Bu8%5D%3E" title="Ref&#60;&#39;_, [u8]&#62;">Ref&#60;&#39;_, [u8]&#62;</a></li><li><a href="#impl-SplitByteSlice-for-RefMut%3C'_,+%5Bu8%5D%3E" title="RefMut&#60;&#39;_, [u8]&#62;">RefMut&#60;&#39;_, [u8]&#62;</a></li></ul><h3><a href="#dyn-compatibility">Dyn Compatibility</a></h3><h3><a href="#implementors">Implementors</a></h3></section><div id="rustdoc-modnav"><h2><a href="index.html">In zerocopy::<wbr>byte_<wbr>slice</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../index.html">zerocopy</a>::<wbr><a href="index.html">byte_slice</a></div><h1>Trait <span class="trait">Split<wbr>Byte<wbr>Slice</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../src/zerocopy/byte_slice.rs.html#99-140">Source</a> </span></div><pre class="rust item-decl"><code>pub unsafe trait SplitByteSlice: <a class="trait" href="trait.ByteSlice.html" title="trait zerocopy::byte_slice::ByteSlice">ByteSlice</a> {
// Required method
unsafe fn <a href="#tymethod.split_at_unchecked" class="fn">split_at_unchecked</a>(self, mid: <a class="primitive" href="https://doc.rust-lang.org/1.93.1/core/primitive.usize.html">usize</a>) -&gt; (Self, Self);
// Provided method
fn <a href="#method.split_at" class="fn">split_at</a>(self, mid: <a class="primitive" href="https://doc.rust-lang.org/1.93.1/core/primitive.usize.html">usize</a>) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.93.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;(Self, Self), Self&gt; { ... }
}</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>A <a href="trait.ByteSlice.html" title="trait zerocopy::byte_slice::ByteSlice"><code>ByteSlice</code></a> that can be split in two.</p>
<h2 id="safety"><a class="doc-anchor" href="#safety">§</a>Safety</h2>
<p>Unsafe code may depend for its soundness on the assumption that <code>split_at</code>
and <code>split_at_unchecked</code> are implemented correctly. In particular, given <code>B: SplitByteSlice</code> and <code>b: B</code>, if <code>b.deref()</code> returns a byte slice with address
<code>addr</code> and length <code>len</code>, then if <code>split &lt;= len</code>, both of these
invocations:</p>
<ul>
<li><code>b.split_at(split)</code></li>
<li><code>b.split_at_unchecked(split)</code></li>
</ul>
<p>…will return <code>(first, second)</code> such that:</p>
<ul>
<li><code>first</code>s address is <code>addr</code> and its length is <code>split</code></li>
<li><code>second</code>s address is <code>addr + split</code> and its length is <code>len - split</code></li>
</ul>
</div></details><h2 id="required-methods" class="section-header">Required Methods<a href="#required-methods" class="anchor">§</a></h2><div class="methods"><details class="toggle method-toggle" open><summary><section id="tymethod.split_at_unchecked" class="method"><a class="src rightside" href="../../src/zerocopy/byte_slice.rs.html#139">Source</a><h4 class="code-header">unsafe fn <a href="#tymethod.split_at_unchecked" class="fn">split_at_unchecked</a>(self, mid: <a class="primitive" href="https://doc.rust-lang.org/1.93.1/core/primitive.usize.html">usize</a>) -&gt; (Self, Self)</h4></section></summary><div class="docblock"><p>Splits the slice at the midpoint, possibly omitting bounds checks.</p>
<p><code>s.split_at_unchecked(mid)</code> returns <code>s[..mid]</code> and <code>s[mid..]</code>.</p>
<h5 id="safety-1"><a class="doc-anchor" href="#safety-1">§</a>Safety</h5>
<p><code>mid</code> must not be greater than <code>self.deref().len()</code>.</p>
<h5 id="panics"><a class="doc-anchor" href="#panics">§</a>Panics</h5>
<p>Implementations of this method may choose to perform a bounds check and
panic if <code>mid &gt; self.deref().len()</code>. They may also panic for any other
reason. Since it is optional, callers must not rely on this behavior for
soundness.</p>
</div></details></div><h2 id="provided-methods" class="section-header">Provided Methods<a href="#provided-methods" class="anchor">§</a></h2><div class="methods"><details class="toggle method-toggle" open><summary><section id="method.split_at" class="method"><a class="src rightside" href="../../src/zerocopy/byte_slice.rs.html#110-122">Source</a><h4 class="code-header">fn <a href="#method.split_at" class="fn">split_at</a>(self, mid: <a class="primitive" href="https://doc.rust-lang.org/1.93.1/core/primitive.usize.html">usize</a>) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.93.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;(Self, Self), Self&gt;</h4></section></summary><div class="docblock"><p>Attempts to split <code>self</code> at the midpoint.</p>
<p><code>s.split_at(mid)</code> returns <code>Ok((s[..mid], s[mid..]))</code> if <code>mid &lt;= s.deref().len()</code> and otherwise returns <code>Err(s)</code>.</p>
<h5 id="safety-2"><a class="doc-anchor" href="#safety-2">§</a>Safety</h5>
<p>Unsafe code may rely on this function correctly implementing the above
functionality.</p>
</div></details></div><h2 id="dyn-compatibility" class="section-header">Dyn Compatibility<a href="#dyn-compatibility" class="anchor">§</a></h2><div class="dyn-compatibility-info"><p>This trait is <b>not</b> <a href="https://doc.rust-lang.org/1.93.1/reference/items/traits.html#dyn-compatibility">dyn compatible</a>.</p><p><i>In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.</i></p></div><h2 id="foreign-impls" class="section-header">Implementations on Foreign Types<a href="#foreign-impls" class="anchor">§</a></h2><details class="toggle implementors-toggle"><summary><section id="impl-SplitByteSlice-for-%26%5Bu8%5D" class="impl"><a class="src rightside" href="../../src/zerocopy/byte_slice.rs.html#210-220">Source</a><a href="#impl-SplitByteSlice-for-%26%5Bu8%5D" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="trait.SplitByteSlice.html" title="trait zerocopy::byte_slice::SplitByteSlice">SplitByteSlice</a> for &amp;[<a class="primitive" href="https://doc.rust-lang.org/1.93.1/core/primitive.u8.html">u8</a>]</h3></section></summary><div class="impl-items"><section id="method.split_at_unchecked" class="method trait-impl"><a class="src rightside" href="../../src/zerocopy/byte_slice.rs.html#212-219">Source</a><a href="#method.split_at_unchecked" class="anchor">§</a><h4 class="code-header">unsafe fn <a href="#tymethod.split_at_unchecked" class="fn">split_at_unchecked</a>(self, mid: <a class="primitive" href="https://doc.rust-lang.org/1.93.1/core/primitive.usize.html">usize</a>) -&gt; (Self, Self)</h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-SplitByteSlice-for-%26mut+%5Bu8%5D" class="impl"><a class="src rightside" href="../../src/zerocopy/byte_slice.rs.html#241-296">Source</a><a href="#impl-SplitByteSlice-for-%26mut+%5Bu8%5D" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="trait.SplitByteSlice.html" title="trait zerocopy::byte_slice::SplitByteSlice">SplitByteSlice</a> for &amp;mut [<a class="primitive" href="https://doc.rust-lang.org/1.93.1/core/primitive.u8.html">u8</a>]</h3></section></summary><div class="impl-items"><section id="method.split_at_unchecked-1" class="method trait-impl"><a class="src rightside" href="../../src/zerocopy/byte_slice.rs.html#243-295">Source</a><a href="#method.split_at_unchecked-1" class="anchor">§</a><h4 class="code-header">unsafe fn <a href="#tymethod.split_at_unchecked" class="fn">split_at_unchecked</a>(self, mid: <a class="primitive" href="https://doc.rust-lang.org/1.93.1/core/primitive.usize.html">usize</a>) -&gt; (Self, Self)</h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-SplitByteSlice-for-Ref%3C'_,+%5Bu8%5D%3E" class="impl"><a class="src rightside" href="../../src/zerocopy/byte_slice.rs.html#330-340">Source</a><a href="#impl-SplitByteSlice-for-Ref%3C'_,+%5Bu8%5D%3E" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="trait.SplitByteSlice.html" title="trait zerocopy::byte_slice::SplitByteSlice">SplitByteSlice</a> for <a class="struct" href="https://doc.rust-lang.org/1.93.1/core/cell/struct.Ref.html" title="struct core::cell::Ref">Ref</a>&lt;'_, [<a class="primitive" href="https://doc.rust-lang.org/1.93.1/core/primitive.u8.html">u8</a>]&gt;</h3></section></summary><div class="impl-items"><section id="method.split_at_unchecked-2" class="method trait-impl"><a class="src rightside" href="../../src/zerocopy/byte_slice.rs.html#332-339">Source</a><a href="#method.split_at_unchecked-2" class="anchor">§</a><h4 class="code-header">unsafe fn <a href="#tymethod.split_at_unchecked" class="fn">split_at_unchecked</a>(self, mid: <a class="primitive" href="https://doc.rust-lang.org/1.93.1/core/primitive.usize.html">usize</a>) -&gt; (Self, Self)</h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-SplitByteSlice-for-RefMut%3C'_,+%5Bu8%5D%3E" class="impl"><a class="src rightside" href="../../src/zerocopy/byte_slice.rs.html#350-360">Source</a><a href="#impl-SplitByteSlice-for-RefMut%3C'_,+%5Bu8%5D%3E" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="trait.SplitByteSlice.html" title="trait zerocopy::byte_slice::SplitByteSlice">SplitByteSlice</a> for <a class="struct" href="https://doc.rust-lang.org/1.93.1/core/cell/struct.RefMut.html" title="struct core::cell::RefMut">RefMut</a>&lt;'_, [<a class="primitive" href="https://doc.rust-lang.org/1.93.1/core/primitive.u8.html">u8</a>]&gt;</h3></section></summary><div class="impl-items"><section id="method.split_at_unchecked-3" class="method trait-impl"><a class="src rightside" href="../../src/zerocopy/byte_slice.rs.html#352-359">Source</a><a href="#method.split_at_unchecked-3" class="anchor">§</a><h4 class="code-header">unsafe fn <a href="#tymethod.split_at_unchecked" class="fn">split_at_unchecked</a>(self, mid: <a class="primitive" href="https://doc.rust-lang.org/1.93.1/core/primitive.usize.html">usize</a>) -&gt; (Self, Self)</h4></section></div></details><h2 id="implementors" class="section-header">Implementors<a href="#implementors" class="anchor">§</a></h2><div id="implementors-list"></div><script src="../../trait.impl/zerocopy/byte_slice/trait.SplitByteSlice.js" data-ignore-extern-crates="core" async></script></section></div></main></body></html>