| <!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="Generic image buffer"><meta name="keywords" content="rust, rustlang, rust-lang, ImageBuffer"><title>ImageBuffer in image - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../normalize.css"><link rel="stylesheet" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../ayu.css" disabled><link rel="stylesheet" href="../dark.css" disabled><link rel="stylesheet" href="../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../storage.js"></script><script defer src="sidebar-items.js"></script><script defer src="../main.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../favicon.svg"></head><body class="rustdoc struct"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">☰</button><a class="sidebar-logo" href="../image/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><h2></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="../image/index.html"><div class="logo-container"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></div></a><h2 class="location"><a href="#">ImageBuffer</a></h2><div class="sidebar-elems"><section><h3><a href="#implementations">Methods</a></h3><ul class="block"><li><a href="#method.as_flat_samples">as_flat_samples</a></li><li><a href="#method.as_flat_samples_mut">as_flat_samples_mut</a></li><li><a href="#method.as_raw">as_raw</a></li><li><a href="#method.dimensions">dimensions</a></li><li><a href="#method.enumerate_pixels">enumerate_pixels</a></li><li><a href="#method.enumerate_pixels_mut">enumerate_pixels_mut</a></li><li><a href="#method.enumerate_rows">enumerate_rows</a></li><li><a href="#method.enumerate_rows_mut">enumerate_rows_mut</a></li><li><a href="#method.expand_palette">expand_palette</a></li><li><a href="#method.from_fn">from_fn</a></li><li><a href="#method.from_pixel">from_pixel</a></li><li><a href="#method.from_raw">from_raw</a></li><li><a href="#method.from_vec">from_vec</a></li><li><a href="#method.get_pixel">get_pixel</a></li><li><a href="#method.get_pixel_mut">get_pixel_mut</a></li><li><a href="#method.height">height</a></li><li><a href="#method.into_flat_samples">into_flat_samples</a></li><li><a href="#method.into_raw">into_raw</a></li><li><a href="#method.into_vec">into_vec</a></li><li><a href="#method.new">new</a></li><li><a href="#method.pixels">pixels</a></li><li><a href="#method.pixels_mut">pixels_mut</a></li><li><a href="#method.put_pixel">put_pixel</a></li><li><a href="#method.rows">rows</a></li><li><a href="#method.rows_mut">rows_mut</a></li><li><a href="#method.sample_layout">sample_layout</a></li><li><a href="#method.save">save</a></li><li><a href="#method.save_with_format">save_with_format</a></li><li><a href="#method.width">width</a></li></ul><h3><a href="#deref-methods-%5BP%3A%3ASubpixel%5D">Methods from Deref<Target=[P::Subpixel]></a></h3><ul class="block"><li><a href="#method.align_to">align_to</a></li><li><a href="#method.align_to_mut">align_to_mut</a></li><li><a href="#method.array_chunks">array_chunks</a></li><li><a href="#method.array_chunks_mut">array_chunks_mut</a></li><li><a href="#method.array_windows">array_windows</a></li><li><a href="#method.as_chunks">as_chunks</a></li><li><a href="#method.as_chunks_mut">as_chunks_mut</a></li><li><a href="#method.as_chunks_unchecked">as_chunks_unchecked</a></li><li><a href="#method.as_chunks_unchecked_mut">as_chunks_unchecked_mut</a></li><li><a href="#method.as_mut_ptr">as_mut_ptr</a></li><li><a href="#method.as_mut_ptr_range">as_mut_ptr_range</a></li><li><a href="#method.as_ptr">as_ptr</a></li><li><a href="#method.as_ptr_range">as_ptr_range</a></li><li><a href="#method.as_rchunks">as_rchunks</a></li><li><a href="#method.as_rchunks_mut">as_rchunks_mut</a></li><li><a href="#method.as_simd">as_simd</a></li><li><a href="#method.as_simd_mut">as_simd_mut</a></li><li><a href="#method.binary_search">binary_search</a></li><li><a href="#method.binary_search_by">binary_search_by</a></li><li><a href="#method.binary_search_by_key">binary_search_by_key</a></li><li><a href="#method.chunks">chunks</a></li><li><a href="#method.chunks_exact">chunks_exact</a></li><li><a href="#method.chunks_exact_mut">chunks_exact_mut</a></li><li><a href="#method.chunks_mut">chunks_mut</a></li><li><a href="#method.clone_from_slice">clone_from_slice</a></li><li><a href="#method.concat">concat</a></li><li><a href="#method.connect">connect</a></li><li><a href="#method.contains">contains</a></li><li><a href="#method.copy_from_slice">copy_from_slice</a></li><li><a href="#method.copy_within">copy_within</a></li><li><a href="#method.ends_with">ends_with</a></li><li><a href="#method.eq_ignore_ascii_case">eq_ignore_ascii_case</a></li><li><a href="#method.escape_ascii">escape_ascii</a></li><li><a href="#method.fill">fill</a></li><li><a href="#method.fill_with">fill_with</a></li><li><a href="#method.first">first</a></li><li><a href="#method.first_mut">first_mut</a></li><li><a href="#method.flatten">flatten</a></li><li><a href="#method.flatten_mut">flatten_mut</a></li><li><a href="#method.get">get</a></li><li><a href="#method.get_mut">get_mut</a></li><li><a href="#method.get_unchecked">get_unchecked</a></li><li><a href="#method.get_unchecked_mut">get_unchecked_mut</a></li><li><a href="#method.group_by">group_by</a></li><li><a href="#method.group_by_mut">group_by_mut</a></li><li><a href="#method.is_ascii">is_ascii</a></li><li><a href="#method.is_empty">is_empty</a></li><li><a href="#method.is_sorted">is_sorted</a></li><li><a href="#method.is_sorted_by">is_sorted_by</a></li><li><a href="#method.is_sorted_by_key">is_sorted_by_key</a></li><li><a href="#method.iter">iter</a></li><li><a href="#method.iter_mut">iter_mut</a></li><li><a href="#method.join">join</a></li><li><a href="#method.last">last</a></li><li><a href="#method.last_mut">last_mut</a></li><li><a href="#method.len">len</a></li><li><a href="#method.make_ascii_lowercase">make_ascii_lowercase</a></li><li><a href="#method.make_ascii_uppercase">make_ascii_uppercase</a></li><li><a href="#method.partition_dedup">partition_dedup</a></li><li><a href="#method.partition_dedup_by">partition_dedup_by</a></li><li><a href="#method.partition_dedup_by_key">partition_dedup_by_key</a></li><li><a href="#method.partition_point">partition_point</a></li><li><a href="#method.rchunks">rchunks</a></li><li><a href="#method.rchunks_exact">rchunks_exact</a></li><li><a href="#method.rchunks_exact_mut">rchunks_exact_mut</a></li><li><a href="#method.rchunks_mut">rchunks_mut</a></li><li><a href="#method.repeat">repeat</a></li><li><a href="#method.reverse">reverse</a></li><li><a href="#method.rotate_left">rotate_left</a></li><li><a href="#method.rotate_right">rotate_right</a></li><li><a href="#method.rsplit">rsplit</a></li><li><a href="#method.rsplit_array_mut">rsplit_array_mut</a></li><li><a href="#method.rsplit_array_ref">rsplit_array_ref</a></li><li><a href="#method.rsplit_mut">rsplit_mut</a></li><li><a href="#method.rsplitn">rsplitn</a></li><li><a href="#method.rsplitn_mut">rsplitn_mut</a></li><li><a href="#method.select_nth_unstable">select_nth_unstable</a></li><li><a href="#method.select_nth_unstable_by">select_nth_unstable_by</a></li><li><a href="#method.select_nth_unstable_by_key">select_nth_unstable_by_key</a></li><li><a href="#method.sort">sort</a></li><li><a href="#method.sort_by">sort_by</a></li><li><a href="#method.sort_by_cached_key">sort_by_cached_key</a></li><li><a href="#method.sort_by_key">sort_by_key</a></li><li><a href="#method.sort_floats">sort_floats</a></li><li><a href="#method.sort_floats-1">sort_floats</a></li><li><a href="#method.sort_unstable">sort_unstable</a></li><li><a href="#method.sort_unstable_by">sort_unstable_by</a></li><li><a href="#method.sort_unstable_by_key">sort_unstable_by_key</a></li><li><a href="#method.split">split</a></li><li><a href="#method.split_array_mut">split_array_mut</a></li><li><a href="#method.split_array_ref">split_array_ref</a></li><li><a href="#method.split_at">split_at</a></li><li><a href="#method.split_at_mut">split_at_mut</a></li><li><a href="#method.split_at_mut_unchecked">split_at_mut_unchecked</a></li><li><a href="#method.split_at_unchecked">split_at_unchecked</a></li><li><a href="#method.split_first">split_first</a></li><li><a href="#method.split_first_mut">split_first_mut</a></li><li><a href="#method.split_inclusive">split_inclusive</a></li><li><a href="#method.split_inclusive_mut">split_inclusive_mut</a></li><li><a href="#method.split_last">split_last</a></li><li><a href="#method.split_last_mut">split_last_mut</a></li><li><a href="#method.split_mut">split_mut</a></li><li><a href="#method.splitn">splitn</a></li><li><a href="#method.splitn_mut">splitn_mut</a></li><li><a href="#method.starts_with">starts_with</a></li><li><a href="#method.strip_prefix">strip_prefix</a></li><li><a href="#method.strip_suffix">strip_suffix</a></li><li><a href="#method.swap">swap</a></li><li><a href="#method.swap_unchecked">swap_unchecked</a></li><li><a href="#method.swap_with_slice">swap_with_slice</a></li><li><a href="#method.take">take</a></li><li><a href="#method.take_first">take_first</a></li><li><a href="#method.take_first_mut">take_first_mut</a></li><li><a href="#method.take_last">take_last</a></li><li><a href="#method.take_last_mut">take_last_mut</a></li><li><a href="#method.take_mut">take_mut</a></li><li><a href="#method.to_ascii_lowercase">to_ascii_lowercase</a></li><li><a href="#method.to_ascii_uppercase">to_ascii_uppercase</a></li><li><a href="#method.to_vec">to_vec</a></li><li><a href="#method.to_vec_in">to_vec_in</a></li><li><a href="#method.trim_ascii">trim_ascii</a></li><li><a href="#method.trim_ascii_end">trim_ascii_end</a></li><li><a href="#method.trim_ascii_start">trim_ascii_start</a></li><li><a href="#method.windows">windows</a></li></ul><h3><a href="#trait-implementations">Trait Implementations</a></h3><ul class="block"><li><a href="#impl-Clone-for-ImageBuffer%3CP%2C%20Container%3E">Clone</a></li><li><a href="#impl-ConvertBuffer%3CImageBuffer%3CToType%2C%20Vec%3C%3CToType%20as%20Pixel%3E%3A%3ASubpixel%2C%20Global%3E%3E%3E-for-ImageBuffer%3CFromType%2C%20Container%3E">ConvertBuffer<ImageBuffer<ToType, Vec<<ToType as Pixel>::Subpixel, Global>>></a></li><li><a href="#impl-Debug-for-ImageBuffer%3CP%2C%20Container%3E">Debug</a></li><li><a href="#impl-Default-for-ImageBuffer%3CP%2C%20Container%3E">Default</a></li><li><a href="#impl-Deref-for-ImageBuffer%3CP%2C%20Container%3E">Deref</a></li><li><a href="#impl-DerefMut-for-ImageBuffer%3CP%2C%20Container%3E">DerefMut</a></li><li><a href="#impl-Eq-for-ImageBuffer%3CP%2C%20Container%3E">Eq</a></li><li><a href="#impl-GenericImage-for-ImageBuffer%3CP%2C%20Container%3E">GenericImage</a></li><li><a href="#impl-GenericImageView-for-ImageBuffer%3CP%2C%20Container%3E">GenericImageView</a></li><li><a href="#impl-Hash-for-ImageBuffer%3CP%2C%20Container%3E">Hash</a></li><li><a href="#impl-Index%3C(u32%2C%20u32)%3E-for-ImageBuffer%3CP%2C%20Container%3E">Index<(u32, u32)></a></li><li><a href="#impl-IndexMut%3C(u32%2C%20u32)%3E-for-ImageBuffer%3CP%2C%20Container%3E">IndexMut<(u32, u32)></a></li><li><a href="#impl-PartialEq%3CImageBuffer%3CP%2C%20Container%3E%3E-for-ImageBuffer%3CP%2C%20Container%3E">PartialEq<ImageBuffer<P, Container>></a></li><li><a href="#impl-StructuralEq-for-ImageBuffer%3CP%2C%20Container%3E">StructuralEq</a></li><li><a href="#impl-StructuralPartialEq-for-ImageBuffer%3CP%2C%20Container%3E">StructuralPartialEq</a></li></ul><h3><a href="#synthetic-implementations">Auto Trait Implementations</a></h3><ul class="block"><li><a href="#impl-RefUnwindSafe-for-ImageBuffer%3CP%2C%20Container%3E">RefUnwindSafe</a></li><li><a href="#impl-Send-for-ImageBuffer%3CP%2C%20Container%3E">Send</a></li><li><a href="#impl-Sync-for-ImageBuffer%3CP%2C%20Container%3E">Sync</a></li><li><a href="#impl-Unpin-for-ImageBuffer%3CP%2C%20Container%3E">Unpin</a></li><li><a href="#impl-UnwindSafe-for-ImageBuffer%3CP%2C%20Container%3E">UnwindSafe</a></li></ul><h3><a href="#blanket-implementations">Blanket Implementations</a></h3><ul class="block"><li><a href="#impl-Any-for-ImageBuffer%3CP%2C%20Container%3E">Any</a></li><li><a href="#impl-Borrow%3CT%3E-for-ImageBuffer%3CP%2C%20Container%3E">Borrow<T></a></li><li><a href="#impl-BorrowMut%3CT%3E-for-ImageBuffer%3CP%2C%20Container%3E">BorrowMut<T></a></li><li><a href="#impl-From%3CT%3E-for-ImageBuffer%3CP%2C%20Container%3E">From<T></a></li><li><a href="#impl-Into%3CU%3E-for-ImageBuffer%3CP%2C%20Container%3E">Into<U></a></li><li><a href="#impl-ToOwned-for-ImageBuffer%3CP%2C%20Container%3E">ToOwned</a></li><li><a href="#impl-TryFrom%3CU%3E-for-ImageBuffer%3CP%2C%20Container%3E">TryFrom<U></a></li><li><a href="#impl-TryInto%3CU%3E-for-ImageBuffer%3CP%2C%20Container%3E">TryInto<U></a></li></ul></section><h2><a href="index.html">In image</a></h2></div></nav><main><div class="width-limiter"><nav class="sub"><form class="search-form"><div class="search-container"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../wheel.svg"></a></div></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Struct <a href="index.html">image</a>::<wbr><a class="struct" href="#">ImageBuffer</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../clipboard.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="srclink" href="../src/image/buffer.rs.html#609-614">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">−</span>]</a></span></div><div class="item-decl"><pre class="rust struct"><code>pub struct ImageBuffer<P: <a class="trait" href="trait.Pixel.html" title="trait image::Pixel">Pixel</a>, Container> { /* private fields */ }</code></pre></div><details class="rustdoc-toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Generic image buffer</p> |
| <p>This is an image parameterised by its Pixel types, represented by a width and height and a |
| container of channel data. It provides direct access to its pixels and implements the |
| <a href="trait.GenericImageView.html"><code>GenericImageView</code></a> and <a href="trait.GenericImage.html"><code>GenericImage</code></a> traits. In many ways, this is the standard buffer |
| implementing those traits. Using this concrete type instead of a generic type parameter has |
| been shown to improve performance.</p> |
| <p>The crate defines a few type aliases with regularly used pixel types for your convenience, such |
| as <code>RgbImage</code>, <code>GrayImage</code> etc.</p> |
| <p>To convert between images of different Pixel types use <a href="enum.DynamicImage.html"><code>DynamicImage</code></a>.</p> |
| <p>You can retrieve a complete description of the buffer’s layout and contents through |
| <a href="#method.as_flat_samples"><code>as_flat_samples</code></a> and <a href="#method.as_flat_samples_mut"><code>as_flat_samples_mut</code></a>. This can be handy to also use the contents in |
| a foreign language, map it as a GPU host buffer or other similar tasks.</p> |
| <h3 id="examples"><a href="#examples">Examples</a></h3> |
| <p>Create a simple canvas and paint a small cross.</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>image::{RgbImage, Rgb}; |
| |
| <span class="kw">let </span><span class="kw-2">mut </span>img = RgbImage::new(<span class="number">32</span>, <span class="number">32</span>); |
| |
| <span class="kw">for </span>x <span class="kw">in </span><span class="number">15</span>..=<span class="number">17 </span>{ |
| <span class="kw">for </span>y <span class="kw">in </span><span class="number">8</span>..<span class="number">24 </span>{ |
| img.put_pixel(x, y, Rgb([<span class="number">255</span>, <span class="number">0</span>, <span class="number">0</span>])); |
| img.put_pixel(y, x, Rgb([<span class="number">255</span>, <span class="number">0</span>, <span class="number">0</span>])); |
| } |
| }</code></pre></div> |
| <p>Overlays an image on top of a larger background raster.</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>image::{GenericImage, GenericImageView, ImageBuffer, open}; |
| |
| <span class="kw">let </span>on_top = open(<span class="string">"path/to/some.png"</span>).unwrap().into_rgb(); |
| <span class="kw">let </span><span class="kw-2">mut </span>img = ImageBuffer::from_fn(<span class="number">512</span>, <span class="number">512</span>, |x, y| { |
| <span class="kw">if </span>(x + y) % <span class="number">2 </span>== <span class="number">0 </span>{ |
| image::Rgb([<span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>]) |
| } <span class="kw">else </span>{ |
| image::Rgb([<span class="number">255</span>, <span class="number">255</span>, <span class="number">255</span>]) |
| } |
| }); |
| |
| image::imageops::overlay(<span class="kw-2">&mut </span>img, <span class="kw-2">&</span>on_top, <span class="number">128</span>, <span class="number">128</span>);</code></pre></div> |
| <p>Convert an RgbaImage to a GrayImage.</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>image::{open, DynamicImage}; |
| |
| <span class="kw">let </span>rgba = open(<span class="string">"path/to/some.png"</span>).unwrap().into_rgba(); |
| <span class="kw">let </span>gray = DynamicImage::ImageRgba8(rgba).into_luma();</code></pre></div> |
| </div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor"></a></h2><div id="implementations-list"><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-ImageBuffer%3CP%2C%20Container%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#620-813">source</a><a href="#impl-ImageBuffer%3CP%2C%20Container%3E" class="anchor"></a><h3 class="code-header">impl<P, Container> <a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><P, Container><span class="where fmt-newline">where<br> P: <a class="trait" href="trait.Pixel.html" title="trait image::Pixel">Pixel</a> + 'static,<br> P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>: 'static,<br> Container: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a><Target = [P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>]>,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.from_raw" class="method has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#631-642">source</a><h4 class="code-header">pub fn <a href="#method.from_raw" class="fnname">from_raw</a>(<br> width: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>,<br> height: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>,<br> buf: Container<br>) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><P, Container>></h4></section></summary><div class="docblock"><p>Contructs a buffer from a generic container |
| (for example a <code>Vec</code> or a slice)</p> |
| <p>Returns <code>None</code> if the container is not big enough (including when the image dimensions |
| necessitate an allocation of more bytes than supported by the container).</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.into_raw" class="method has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#645-647">source</a><h4 class="code-header">pub fn <a href="#method.into_raw" class="fnname">into_raw</a>(self) -> Container</h4></section></summary><div class="docblock"><p>Returns the underlying raw buffer</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.as_raw" class="method has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#650-652">source</a><h4 class="code-header">pub fn <a href="#method.as_raw" class="fnname">as_raw</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>Container</h4></section></summary><div class="docblock"><p>Returns the underlying raw buffer</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.dimensions" class="method has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#655-657">source</a><h4 class="code-header">pub fn <a href="#method.dimensions" class="fnname">dimensions</a>(&self) -> (<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>)</h4></section></summary><div class="docblock"><p>The width and height of this image.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.width" class="method has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#660-662">source</a><h4 class="code-header">pub fn <a href="#method.width" class="fnname">width</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a></h4></section></summary><div class="docblock"><p>The width of this image.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.height" class="method has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#665-667">source</a><h4 class="code-header">pub fn <a href="#method.height" class="fnname">height</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a></h4></section></summary><div class="docblock"><p>The height of this image.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.pixels" class="method has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#677-681">source</a><h4 class="code-header">pub fn <a href="#method.pixels" class="fnname">pixels</a>(&self) -> <a class="struct" href="buffer/struct.Pixels.html" title="struct image::buffer::Pixels">Pixels</a><'_, P><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<span class="notable-traits-tooltiptext"><span class="docblock"><span class="notable">Notable traits for <a class="struct" href="buffer/struct.Pixels.html" title="struct image::buffer::Pixels">Pixels</a><'a, P></span><code class="content"><span class="where fmt-newline">impl<'a, P: <a class="trait" href="trait.Pixel.html" title="trait image::Pixel">Pixel</a> + 'a> <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html" title="trait core::iter::traits::iterator::Iterator">Iterator</a> for <a class="struct" href="buffer/struct.Pixels.html" title="struct image::buffer::Pixels">Pixels</a><'a, P><span class="where fmt-newline">where<br> P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>: 'a,</span></span><span class="where fmt-newline"> type <a href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item" class="associatedtype">Item</a> = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&'a </a>P;</span></code></span></span></span></span></h4></section></summary><div class="docblock"><p>Returns an iterator over the pixels of this image. |
| The iteration order is x = 0 to width then y = 0 to height</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.rows" class="method has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#688-690">source</a><h4 class="code-header">pub fn <a href="#method.rows" class="fnname">rows</a>(&self) -> <a class="struct" href="buffer/struct.Rows.html" title="struct image::buffer::Rows">Rows</a><'_, P><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<span class="notable-traits-tooltiptext"><span class="docblock"><span class="notable">Notable traits for <a class="struct" href="buffer/struct.Rows.html" title="struct image::buffer::Rows">Rows</a><'a, P></span><code class="content"><span class="where fmt-newline">impl<'a, P: <a class="trait" href="trait.Pixel.html" title="trait image::Pixel">Pixel</a> + 'a> <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html" title="trait core::iter::traits::iterator::Iterator">Iterator</a> for <a class="struct" href="buffer/struct.Rows.html" title="struct image::buffer::Rows">Rows</a><'a, P><span class="where fmt-newline">where<br> P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>: 'a,</span></span><span class="where fmt-newline"> type <a href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item" class="associatedtype">Item</a> = <a class="struct" href="buffer/struct.Pixels.html" title="struct image::buffer::Pixels">Pixels</a><'a, P>;</span></code></span></span></span></span></h4></section></summary><div class="docblock"><p>Returns an iterator over the rows of this image.</p> |
| <p>Only non-empty rows can be iterated in this manner. In particular the iterator will not |
| yield any item when the width of the image is <code>0</code> or a pixel type without any channels is |
| used. This ensures that its length can always be represented by <code>usize</code>.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.enumerate_pixels" class="method has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#697-704">source</a><h4 class="code-header">pub fn <a href="#method.enumerate_pixels" class="fnname">enumerate_pixels</a>(&self) -> <a class="struct" href="buffer/struct.EnumeratePixels.html" title="struct image::buffer::EnumeratePixels">EnumeratePixels</a><'_, P><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<span class="notable-traits-tooltiptext"><span class="docblock"><span class="notable">Notable traits for <a class="struct" href="buffer/struct.EnumeratePixels.html" title="struct image::buffer::EnumeratePixels">EnumeratePixels</a><'a, P></span><code class="content"><span class="where fmt-newline">impl<'a, P: <a class="trait" href="trait.Pixel.html" title="trait image::Pixel">Pixel</a> + 'a> <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html" title="trait core::iter::traits::iterator::Iterator">Iterator</a> for <a class="struct" href="buffer/struct.EnumeratePixels.html" title="struct image::buffer::EnumeratePixels">EnumeratePixels</a><'a, P><span class="where fmt-newline">where<br> P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>: 'a,</span></span><span class="where fmt-newline"> type <a href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item" class="associatedtype">Item</a> = (<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&'a </a>P);</span></code></span></span></span></span></h4></section></summary><div class="docblock"><p>Enumerates over the pixels of the image. |
| The iterator yields the coordinates of each pixel |
| along with a reference to them. |
| The iteration order is x = 0 to width then y = 0 to height |
| Starting from the top left.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.enumerate_rows" class="method has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#709-715">source</a><h4 class="code-header">pub fn <a href="#method.enumerate_rows" class="fnname">enumerate_rows</a>(&self) -> <a class="struct" href="buffer/struct.EnumerateRows.html" title="struct image::buffer::EnumerateRows">EnumerateRows</a><'_, P><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<span class="notable-traits-tooltiptext"><span class="docblock"><span class="notable">Notable traits for <a class="struct" href="buffer/struct.EnumerateRows.html" title="struct image::buffer::EnumerateRows">EnumerateRows</a><'a, P></span><code class="content"><span class="where fmt-newline">impl<'a, P: <a class="trait" href="trait.Pixel.html" title="trait image::Pixel">Pixel</a> + 'a> <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html" title="trait core::iter::traits::iterator::Iterator">Iterator</a> for <a class="struct" href="buffer/struct.EnumerateRows.html" title="struct image::buffer::EnumerateRows">EnumerateRows</a><'a, P><span class="where fmt-newline">where<br> P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>: 'a,</span></span><span class="where fmt-newline"> type <a href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item" class="associatedtype">Item</a> = (<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>, <a class="struct" href="buffer/struct.EnumeratePixels.html" title="struct image::buffer::EnumeratePixels">EnumeratePixels</a><'a, P>);</span></code></span></span></span></span></h4></section></summary><div class="docblock"><p>Enumerates over the rows of the image. |
| The iterator yields the y-coordinate of each row |
| along with a reference to them.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.get_pixel" class="method has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#722-727">source</a><h4 class="code-header">pub fn <a href="#method.get_pixel" class="fnname">get_pixel</a>(&self, x: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>, y: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>P</h4></section></summary><div class="docblock"><p>Gets a reference to the pixel at location <code>(x, y)</code></p> |
| <h5 id="panics"><a href="#panics">Panics</a></h5> |
| <p>Panics if <code>(x, y)</code> is out of the bounds <code>(width, height)</code>.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.sample_layout" class="method has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#763-766">source</a><h4 class="code-header">pub fn <a href="#method.sample_layout" class="fnname">sample_layout</a>(&self) -> <a class="struct" href="flat/struct.SampleLayout.html" title="struct image::flat::SampleLayout">SampleLayout</a></h4></section></summary><div class="docblock"><p>Get the format of the buffer when viewed as a matrix of samples.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.into_flat_samples" class="method has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#774-784">source</a><h4 class="code-header">pub fn <a href="#method.into_flat_samples" class="fnname">into_flat_samples</a>(self) -> <a class="struct" href="flat/struct.FlatSamples.html" title="struct image::flat::FlatSamples">FlatSamples</a><Container><span class="where fmt-newline">where<br> Container: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html" title="trait core::convert::AsRef">AsRef</a><[P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>]>,</span></h4></section></summary><div class="docblock"><p>Return the raw sample buffer with its stride an dimension information.</p> |
| <p>The returned buffer is guaranteed to be well formed in all cases. It is layed out by |
| colors, width then height, meaning <code>channel_stride <= width_stride <= height_stride</code>. All |
| strides are in numbers of elements but those are mostly <code>u8</code> in which case the strides are |
| also byte strides.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.as_flat_samples" class="method has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#789-798">source</a><h4 class="code-header">pub fn <a href="#method.as_flat_samples" class="fnname">as_flat_samples</a>(&self) -> <a class="struct" href="flat/struct.FlatSamples.html" title="struct image::flat::FlatSamples">FlatSamples</a><&[P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>]><span class="where fmt-newline">where<br> Container: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html" title="trait core::convert::AsRef">AsRef</a><[P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>]>,</span></h4></section></summary><div class="docblock"><p>Return a view on the raw sample buffer.</p> |
| <p>See <a href="#method.into_flat_samples"><code>into_flat_samples</code></a> for more details.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.as_flat_samples_mut" class="method has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#803-812">source</a><h4 class="code-header">pub fn <a href="#method.as_flat_samples_mut" class="fnname">as_flat_samples_mut</a>(&mut self) -> <a class="struct" href="flat/struct.FlatSamples.html" title="struct image::flat::FlatSamples">FlatSamples</a><&mut [P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>]><span class="where fmt-newline">where<br> Container: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsMut.html" title="trait core::convert::AsMut">AsMut</a><[P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>]>,</span></h4></section></summary><div class="docblock"><p>Return a mutable view on the raw sample buffer.</p> |
| <p>See <a href="#method.into_flat_samples"><code>into_flat_samples</code></a> for more details.</p> |
| </div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-ImageBuffer%3CP%2C%20Container%3E-1" class="impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#815-888">source</a><a href="#impl-ImageBuffer%3CP%2C%20Container%3E-1" class="anchor"></a><h3 class="code-header">impl<P, Container> <a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><P, Container><span class="where fmt-newline">where<br> P: <a class="trait" href="trait.Pixel.html" title="trait image::Pixel">Pixel</a> + 'static,<br> P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>: 'static,<br> Container: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a><Target = [P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>]> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.DerefMut.html" title="trait core::ops::deref::DerefMut">DerefMut</a>,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.pixels_mut" class="method has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#828-832">source</a><h4 class="code-header">pub fn <a href="#method.pixels_mut" class="fnname">pixels_mut</a>(&mut self) -> <a class="struct" href="buffer/struct.PixelsMut.html" title="struct image::buffer::PixelsMut">PixelsMut</a><'_, P><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<span class="notable-traits-tooltiptext"><span class="docblock"><span class="notable">Notable traits for <a class="struct" href="buffer/struct.PixelsMut.html" title="struct image::buffer::PixelsMut">PixelsMut</a><'a, P></span><code class="content"><span class="where fmt-newline">impl<'a, P: <a class="trait" href="trait.Pixel.html" title="trait image::Pixel">Pixel</a> + 'a> <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html" title="trait core::iter::traits::iterator::Iterator">Iterator</a> for <a class="struct" href="buffer/struct.PixelsMut.html" title="struct image::buffer::PixelsMut">PixelsMut</a><'a, P><span class="where fmt-newline">where<br> P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>: 'a,</span></span><span class="where fmt-newline"> type <a href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item" class="associatedtype">Item</a> = <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&'a mut </a>P;</span></code></span></span></span></span></h4></section></summary><div class="docblock"><p>Returns an iterator over the mutable pixels of this image.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.rows_mut" class="method has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#839-841">source</a><h4 class="code-header">pub fn <a href="#method.rows_mut" class="fnname">rows_mut</a>(&mut self) -> <a class="struct" href="buffer/struct.RowsMut.html" title="struct image::buffer::RowsMut">RowsMut</a><'_, P><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<span class="notable-traits-tooltiptext"><span class="docblock"><span class="notable">Notable traits for <a class="struct" href="buffer/struct.RowsMut.html" title="struct image::buffer::RowsMut">RowsMut</a><'a, P></span><code class="content"><span class="where fmt-newline">impl<'a, P: <a class="trait" href="trait.Pixel.html" title="trait image::Pixel">Pixel</a> + 'a> <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html" title="trait core::iter::traits::iterator::Iterator">Iterator</a> for <a class="struct" href="buffer/struct.RowsMut.html" title="struct image::buffer::RowsMut">RowsMut</a><'a, P><span class="where fmt-newline">where<br> P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>: 'a,</span></span><span class="where fmt-newline"> type <a href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item" class="associatedtype">Item</a> = <a class="struct" href="buffer/struct.PixelsMut.html" title="struct image::buffer::PixelsMut">PixelsMut</a><'a, P>;</span></code></span></span></span></span></h4></section></summary><div class="docblock"><p>Returns an iterator over the mutable rows of this image.</p> |
| <p>Only non-empty rows can be iterated in this manner. In particular the iterator will not |
| yield any item when the width of the image is <code>0</code> or a pixel type without any channels is |
| used. This ensures that its length can always be represented by <code>usize</code>.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.enumerate_pixels_mut" class="method has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#846-854">source</a><h4 class="code-header">pub fn <a href="#method.enumerate_pixels_mut" class="fnname">enumerate_pixels_mut</a>(&mut self) -> <a class="struct" href="buffer/struct.EnumeratePixelsMut.html" title="struct image::buffer::EnumeratePixelsMut">EnumeratePixelsMut</a><'_, P><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<span class="notable-traits-tooltiptext"><span class="docblock"><span class="notable">Notable traits for <a class="struct" href="buffer/struct.EnumeratePixelsMut.html" title="struct image::buffer::EnumeratePixelsMut">EnumeratePixelsMut</a><'a, P></span><code class="content"><span class="where fmt-newline">impl<'a, P: <a class="trait" href="trait.Pixel.html" title="trait image::Pixel">Pixel</a> + 'a> <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html" title="trait core::iter::traits::iterator::Iterator">Iterator</a> for <a class="struct" href="buffer/struct.EnumeratePixelsMut.html" title="struct image::buffer::EnumeratePixelsMut">EnumeratePixelsMut</a><'a, P><span class="where fmt-newline">where<br> P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>: 'a,</span></span><span class="where fmt-newline"> type <a href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item" class="associatedtype">Item</a> = (<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&'a mut </a>P);</span></code></span></span></span></span></h4></section></summary><div class="docblock"><p>Enumerates over the pixels of the image. |
| The iterator yields the coordinates of each pixel |
| along with a mutable reference to them.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.enumerate_rows_mut" class="method has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#859-866">source</a><h4 class="code-header">pub fn <a href="#method.enumerate_rows_mut" class="fnname">enumerate_rows_mut</a>(&mut self) -> <a class="struct" href="buffer/struct.EnumerateRowsMut.html" title="struct image::buffer::EnumerateRowsMut">EnumerateRowsMut</a><'_, P><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<span class="notable-traits-tooltiptext"><span class="docblock"><span class="notable">Notable traits for <a class="struct" href="buffer/struct.EnumerateRowsMut.html" title="struct image::buffer::EnumerateRowsMut">EnumerateRowsMut</a><'a, P></span><code class="content"><span class="where fmt-newline">impl<'a, P: <a class="trait" href="trait.Pixel.html" title="trait image::Pixel">Pixel</a> + 'a> <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html" title="trait core::iter::traits::iterator::Iterator">Iterator</a> for <a class="struct" href="buffer/struct.EnumerateRowsMut.html" title="struct image::buffer::EnumerateRowsMut">EnumerateRowsMut</a><'a, P><span class="where fmt-newline">where<br> P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>: 'a,</span></span><span class="where fmt-newline"> type <a href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item" class="associatedtype">Item</a> = (<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>, <a class="struct" href="buffer/struct.EnumeratePixelsMut.html" title="struct image::buffer::EnumeratePixelsMut">EnumeratePixelsMut</a><'a, P>);</span></code></span></span></span></span></h4></section></summary><div class="docblock"><p>Enumerates over the rows of the image. |
| The iterator yields the y-coordinate of each row |
| along with a mutable reference to them.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.get_pixel_mut" class="method has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#873-878">source</a><h4 class="code-header">pub fn <a href="#method.get_pixel_mut" class="fnname">get_pixel_mut</a>(&mut self, x: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>, y: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&mut </a>P</h4></section></summary><div class="docblock"><p>Gets a reference to the mutable pixel at location <code>(x, y)</code></p> |
| <h5 id="panics-1"><a href="#panics-1">Panics</a></h5> |
| <p>Panics if <code>(x, y)</code> is out of the bounds <code>(width, height)</code>.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.put_pixel" class="method has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#885-887">source</a><h4 class="code-header">pub fn <a href="#method.put_pixel" class="fnname">put_pixel</a>(&mut self, x: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>, y: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>, pixel: P)</h4></section></summary><div class="docblock"><p>Puts a pixel at location <code>(x, y)</code></p> |
| <h5 id="panics-2"><a href="#panics-2">Panics</a></h5> |
| <p>Panics if <code>(x, y)</code> is out of the bounds <code>(width, height)</code>.</p> |
| </div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-ImageBuffer%3CP%2C%20Container%3E-2" class="impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#890-913">source</a><a href="#impl-ImageBuffer%3CP%2C%20Container%3E-2" class="anchor"></a><h3 class="code-header">impl<P, Container> <a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><P, Container><span class="where fmt-newline">where<br> P: <a class="trait" href="trait.Pixel.html" title="trait image::Pixel">Pixel</a> + 'static,<br> [P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>]: <a class="trait" href="trait.EncodableLayout.html" title="trait image::EncodableLayout">EncodableLayout</a>,<br> Container: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a><Target = [P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>]>,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.save" class="method has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#900-912">source</a><h4 class="code-header">pub fn <a href="#method.save" class="fnname">save</a><Q>(&self, path: Q) -> <a class="type" href="error/type.ImageResult.html" title="type image::error::ImageResult">ImageResult</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>><span class="where fmt-newline">where<br> Q: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html" title="trait core::convert::AsRef">AsRef</a><<a class="struct" href="https://doc.rust-lang.org/nightly/std/path/struct.Path.html" title="struct std::path::Path">Path</a>>,</span></h4></section></summary><div class="docblock"><p>Saves the buffer to a file at the path specified.</p> |
| <p>The image format is derived from the file extension. |
| Currently only jpeg and png files are supported.</p> |
| </div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-ImageBuffer%3CP%2C%20Container%3E-3" class="impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#915-940">source</a><a href="#impl-ImageBuffer%3CP%2C%20Container%3E-3" class="anchor"></a><h3 class="code-header">impl<P, Container> <a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><P, Container><span class="where fmt-newline">where<br> P: <a class="trait" href="trait.Pixel.html" title="trait image::Pixel">Pixel</a> + 'static,<br> [P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>]: <a class="trait" href="trait.EncodableLayout.html" title="trait image::EncodableLayout">EncodableLayout</a>,<br> Container: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a><Target = [P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>]>,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.save_with_format" class="method has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#926-939">source</a><h4 class="code-header">pub fn <a href="#method.save_with_format" class="fnname">save_with_format</a><Q>(&self, path: Q, format: <a class="enum" href="enum.ImageFormat.html" title="enum image::ImageFormat">ImageFormat</a>) -> <a class="type" href="error/type.ImageResult.html" title="type image::error::ImageResult">ImageResult</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>><span class="where fmt-newline">where<br> Q: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html" title="trait core::convert::AsRef">AsRef</a><<a class="struct" href="https://doc.rust-lang.org/nightly/std/path/struct.Path.html" title="struct std::path::Path">Path</a>>,</span></h4></section></summary><div class="docblock"><p>Saves the buffer to a file at the specified path in |
| the specified format.</p> |
| <p>See <a href="fn.save_buffer_with_format.html"><code>save_buffer_with_format</code></a> for |
| supported types.</p> |
| </div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-ImageBuffer%3CP%2C%20Vec%3CP%3A%3ASubpixel%3E%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#1145-1211">source</a><a href="#impl-ImageBuffer%3CP%2C%20Vec%3CP%3A%3ASubpixel%3E%3E" class="anchor"></a><h3 class="code-header">impl<P: <a class="trait" href="trait.Pixel.html" title="trait image::Pixel">Pixel</a> + 'static> <a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><P, <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a><P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>>><span class="where fmt-newline">where<br> P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>: 'static,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.new" class="method has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#1154-1163">source</a><h4 class="code-header">pub fn <a href="#method.new" class="fnname">new</a>(width: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>, height: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>) -> <a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><P, <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a><P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>>></h4></section></summary><div class="docblock"><p>Creates a new image buffer based on a <code>Vec<P::Subpixel></code>.</p> |
| <h5 id="panics-3"><a href="#panics-3">Panics</a></h5> |
| <p>Panics when the resulting image is larger the the maximum size of a vector.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.from_pixel" class="method has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#1170-1176">source</a><h4 class="code-header">pub fn <a href="#method.from_pixel" class="fnname">from_pixel</a>(<br> width: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>,<br> height: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>,<br> pixel: P<br>) -> <a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><P, <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a><P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>>></h4></section></summary><div class="docblock"><p>Constructs a new ImageBuffer by copying a pixel</p> |
| <h5 id="panics-4"><a href="#panics-4">Panics</a></h5> |
| <p>Panics when the resulting image is larger the the maximum size of a vector.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.from_fn" class="method has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#1185-1194">source</a><h4 class="code-header">pub fn <a href="#method.from_fn" class="fnname">from_fn</a><F>(<br> width: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>,<br> height: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>,<br> f: F<br>) -> <a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><P, <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a><P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>>><span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>) -> P,</span></h4></section></summary><div class="docblock"><p>Constructs a new ImageBuffer by repeated application of the supplied function.</p> |
| <p>The arguments to the function are the pixel’s x and y coordinates.</p> |
| <h5 id="panics-5"><a href="#panics-5">Panics</a></h5> |
| <p>Panics when the resulting image is larger the the maximum size of a vector.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.from_vec" class="method has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#1198-1204">source</a><h4 class="code-header">pub fn <a href="#method.from_vec" class="fnname">from_vec</a>(<br> width: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>,<br> height: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>,<br> buf: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a><P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>><br>) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><P, <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a><P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>>>></h4></section></summary><div class="docblock"><p>Creates an image buffer out of an existing buffer. |
| Returns None if the buffer is not big enough.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.into_vec" class="method has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#1208-1210">source</a><h4 class="code-header">pub fn <a href="#method.into_vec" class="fnname">into_vec</a>(self) -> <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a><P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>></h4></section></summary><div class="docblock"><p>Consumes the image buffer and returns the underlying data |
| as an owned buffer</p> |
| </div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-ImageBuffer%3CLuma%3Cu8%3E%2C%20Vec%3Cu8%2C%20Global%3E%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#1223-1255">source</a><a href="#impl-ImageBuffer%3CLuma%3Cu8%3E%2C%20Vec%3Cu8%2C%20Global%3E%3E" class="anchor"></a><h3 class="code-header">impl <a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><<a class="struct" href="struct.Luma.html" title="struct image::Luma">Luma</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>>, <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>, <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/alloc/struct.Global.html" title="struct alloc::alloc::Global">Global</a>>></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.expand_palette" class="method has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#1227-1254">source</a><h4 class="code-header">pub fn <a href="#method.expand_palette" class="fnname">expand_palette</a>(<br> self,<br> palette: &[(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>)],<br> transparent_idx: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>><br>) -> <a class="type" href="type.RgbaImage.html" title="type image::RgbaImage">RgbaImage</a></h4></section></summary><div class="docblock"><p>Expands a color palette by re-using the existing buffer. |
| Assumes 8 bit per pixel. Uses an optionally transparent index to |
| adjust it’s alpha value accordingly.</p> |
| </div></details></div></details></div><h2 id="deref-methods-%5BP%3A%3ASubpixel%5D" class="small-section-header"><span>Methods from <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a><Target = [P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>]></span><a href="#deref-methods-%5BP%3A%3ASubpixel%5D" class="anchor"></a></h2><div id="deref-methods-%5BP%3A%3ASubpixel%5D-1"><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.len" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#129">source</a></span><h4 class="code-header">pub fn <a href="#method.len" class="fnname">len</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a></h4></section></summary><div class="docblock"><p>Returns the number of elements in the slice.</p> |
| <h5 id="examples-1"><a href="#examples-1">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>a = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>]; |
| <span class="macro">assert_eq!</span>(a.len(), <span class="number">3</span>);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.is_empty" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#152">source</a></span><h4 class="code-header">pub fn <a href="#method.is_empty" class="fnname">is_empty</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Returns <code>true</code> if the slice has a length of 0.</p> |
| <h5 id="examples-2"><a href="#examples-2">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>a = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>]; |
| <span class="macro">assert!</span>(!a.is_empty());</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.first" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#171">source</a></span><h4 class="code-header">pub fn <a href="#method.first" class="fnname">first</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>T></h4></section></summary><div class="docblock"><p>Returns the first element of the slice, or <code>None</code> if it is empty.</p> |
| <h5 id="examples-3"><a href="#examples-3">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = [<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>]; |
| <span class="macro">assert_eq!</span>(<span class="prelude-val">Some</span>(<span class="kw-2">&</span><span class="number">10</span>), v.first()); |
| |
| <span class="kw">let </span>w: <span class="kw-2">&</span>[i32] = <span class="kw-2">&</span>[]; |
| <span class="macro">assert_eq!</span>(<span class="prelude-val">None</span>, w.first());</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.first_mut" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#191">source</a></span><h4 class="code-header">pub fn <a href="#method.first_mut" class="fnname">first_mut</a>(&mut self) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&mut </a>T></h4></section></summary><div class="docblock"><p>Returns a mutable pointer to the first element of the slice, or <code>None</code> if it is empty.</p> |
| <h5 id="examples-4"><a href="#examples-4">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>x = <span class="kw-2">&mut </span>[<span class="number">0</span>, <span class="number">1</span>, <span class="number">2</span>]; |
| |
| <span class="kw">if let </span><span class="prelude-val">Some</span>(first) = x.first_mut() { |
| <span class="kw-2">*</span>first = <span class="number">5</span>; |
| } |
| <span class="macro">assert_eq!</span>(x, <span class="kw-2">&</span>[<span class="number">5</span>, <span class="number">1</span>, <span class="number">2</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.split_first" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.5.0">1.5.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#211">source</a></span><h4 class="code-header">pub fn <a href="#method.split_first" class="fnname">split_first</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>T, &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>)></h4></section></summary><div class="docblock"><p>Returns the first and all the rest of the elements of the slice, or <code>None</code> if it is empty.</p> |
| <h5 id="examples-5"><a href="#examples-5">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>x = <span class="kw-2">&</span>[<span class="number">0</span>, <span class="number">1</span>, <span class="number">2</span>]; |
| |
| <span class="kw">if let </span><span class="prelude-val">Some</span>((first, elements)) = x.split_first() { |
| <span class="macro">assert_eq!</span>(first, <span class="kw-2">&</span><span class="number">0</span>); |
| <span class="macro">assert_eq!</span>(elements, <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">2</span>]); |
| }</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.split_first_mut" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.5.0">1.5.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#233">source</a></span><h4 class="code-header">pub fn <a href="#method.split_first_mut" class="fnname">split_first_mut</a>(&mut self) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&mut </a>T, &mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>)></h4></section></summary><div class="docblock"><p>Returns the first and all the rest of the elements of the slice, or <code>None</code> if it is empty.</p> |
| <h5 id="examples-6"><a href="#examples-6">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>x = <span class="kw-2">&mut </span>[<span class="number">0</span>, <span class="number">1</span>, <span class="number">2</span>]; |
| |
| <span class="kw">if let </span><span class="prelude-val">Some</span>((first, elements)) = x.split_first_mut() { |
| <span class="kw-2">*</span>first = <span class="number">3</span>; |
| elements[<span class="number">0</span>] = <span class="number">4</span>; |
| elements[<span class="number">1</span>] = <span class="number">5</span>; |
| } |
| <span class="macro">assert_eq!</span>(x, <span class="kw-2">&</span>[<span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.split_last" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.5.0">1.5.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#253">source</a></span><h4 class="code-header">pub fn <a href="#method.split_last" class="fnname">split_last</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>T, &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>)></h4></section></summary><div class="docblock"><p>Returns the last and all the rest of the elements of the slice, or <code>None</code> if it is empty.</p> |
| <h5 id="examples-7"><a href="#examples-7">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>x = <span class="kw-2">&</span>[<span class="number">0</span>, <span class="number">1</span>, <span class="number">2</span>]; |
| |
| <span class="kw">if let </span><span class="prelude-val">Some</span>((last, elements)) = x.split_last() { |
| <span class="macro">assert_eq!</span>(last, <span class="kw-2">&</span><span class="number">2</span>); |
| <span class="macro">assert_eq!</span>(elements, <span class="kw-2">&</span>[<span class="number">0</span>, <span class="number">1</span>]); |
| }</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.split_last_mut" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.5.0">1.5.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#275">source</a></span><h4 class="code-header">pub fn <a href="#method.split_last_mut" class="fnname">split_last_mut</a>(&mut self) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&mut </a>T, &mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>)></h4></section></summary><div class="docblock"><p>Returns the last and all the rest of the elements of the slice, or <code>None</code> if it is empty.</p> |
| <h5 id="examples-8"><a href="#examples-8">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>x = <span class="kw-2">&mut </span>[<span class="number">0</span>, <span class="number">1</span>, <span class="number">2</span>]; |
| |
| <span class="kw">if let </span><span class="prelude-val">Some</span>((last, elements)) = x.split_last_mut() { |
| <span class="kw-2">*</span>last = <span class="number">3</span>; |
| elements[<span class="number">0</span>] = <span class="number">4</span>; |
| elements[<span class="number">1</span>] = <span class="number">5</span>; |
| } |
| <span class="macro">assert_eq!</span>(x, <span class="kw-2">&</span>[<span class="number">4</span>, <span class="number">5</span>, <span class="number">3</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.last" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#294">source</a></span><h4 class="code-header">pub fn <a href="#method.last" class="fnname">last</a>(&self) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>T></h4></section></summary><div class="docblock"><p>Returns the last element of the slice, or <code>None</code> if it is empty.</p> |
| <h5 id="examples-9"><a href="#examples-9">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = [<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>]; |
| <span class="macro">assert_eq!</span>(<span class="prelude-val">Some</span>(<span class="kw-2">&</span><span class="number">30</span>), v.last()); |
| |
| <span class="kw">let </span>w: <span class="kw-2">&</span>[i32] = <span class="kw-2">&</span>[]; |
| <span class="macro">assert_eq!</span>(<span class="prelude-val">None</span>, w.last());</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.last_mut" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#314">source</a></span><h4 class="code-header">pub fn <a href="#method.last_mut" class="fnname">last_mut</a>(&mut self) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&mut </a>T></h4></section></summary><div class="docblock"><p>Returns a mutable pointer to the last item in the slice.</p> |
| <h5 id="examples-10"><a href="#examples-10">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>x = <span class="kw-2">&mut </span>[<span class="number">0</span>, <span class="number">1</span>, <span class="number">2</span>]; |
| |
| <span class="kw">if let </span><span class="prelude-val">Some</span>(last) = x.last_mut() { |
| <span class="kw-2">*</span>last = <span class="number">10</span>; |
| } |
| <span class="macro">assert_eq!</span>(x, <span class="kw-2">&</span>[<span class="number">0</span>, <span class="number">1</span>, <span class="number">10</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.get" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#339-341">source</a></span><h4 class="code-header">pub fn <a href="#method.get" class="fnname">get</a><I>(&self, index: I) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><&<I as <a class="trait" href="https://doc.rust-lang.org/nightly/core/slice/index/trait.SliceIndex.html" title="trait core::slice::index::SliceIndex">SliceIndex</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>>>::<a class="associatedtype" href="https://doc.rust-lang.org/nightly/core/slice/index/trait.SliceIndex.html#associatedtype.Output" title="type core::slice::index::SliceIndex::Output">Output</a>><span class="where fmt-newline">where<br> I: <a class="trait" href="https://doc.rust-lang.org/nightly/core/slice/index/trait.SliceIndex.html" title="trait core::slice::index::SliceIndex">SliceIndex</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>>,</span></h4></section></summary><div class="docblock"><p>Returns a reference to an element or subslice depending on the type of |
| index.</p> |
| <ul> |
| <li>If given a position, returns a reference to the element at that |
| position or <code>None</code> if out of bounds.</li> |
| <li>If given a range, returns the subslice corresponding to that range, |
| or <code>None</code> if out of bounds.</li> |
| </ul> |
| <h5 id="examples-11"><a href="#examples-11">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = [<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>]; |
| <span class="macro">assert_eq!</span>(<span class="prelude-val">Some</span>(<span class="kw-2">&</span><span class="number">40</span>), v.get(<span class="number">1</span>)); |
| <span class="macro">assert_eq!</span>(<span class="prelude-val">Some</span>(<span class="kw-2">&</span>[<span class="number">10</span>, <span class="number">40</span>][..]), v.get(<span class="number">0</span>..<span class="number">2</span>)); |
| <span class="macro">assert_eq!</span>(<span class="prelude-val">None</span>, v.get(<span class="number">3</span>)); |
| <span class="macro">assert_eq!</span>(<span class="prelude-val">None</span>, v.get(<span class="number">0</span>..<span class="number">4</span>));</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.get_mut" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#365-367">source</a></span><h4 class="code-header">pub fn <a href="#method.get_mut" class="fnname">get_mut</a><I>(<br> &mut self,<br> index: I<br>) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><&mut <I as <a class="trait" href="https://doc.rust-lang.org/nightly/core/slice/index/trait.SliceIndex.html" title="trait core::slice::index::SliceIndex">SliceIndex</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>>>::<a class="associatedtype" href="https://doc.rust-lang.org/nightly/core/slice/index/trait.SliceIndex.html#associatedtype.Output" title="type core::slice::index::SliceIndex::Output">Output</a>><span class="where fmt-newline">where<br> I: <a class="trait" href="https://doc.rust-lang.org/nightly/core/slice/index/trait.SliceIndex.html" title="trait core::slice::index::SliceIndex">SliceIndex</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>>,</span></h4></section></summary><div class="docblock"><p>Returns a mutable reference to an element or subslice depending on the |
| type of index (see <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.get"><code>get</code></a>) or <code>None</code> if the index is out of bounds.</p> |
| <h5 id="examples-12"><a href="#examples-12">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>x = <span class="kw-2">&mut </span>[<span class="number">0</span>, <span class="number">1</span>, <span class="number">2</span>]; |
| |
| <span class="kw">if let </span><span class="prelude-val">Some</span>(elem) = x.get_mut(<span class="number">1</span>) { |
| <span class="kw-2">*</span>elem = <span class="number">42</span>; |
| } |
| <span class="macro">assert_eq!</span>(x, <span class="kw-2">&</span>[<span class="number">0</span>, <span class="number">42</span>, <span class="number">2</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.get_unchecked" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#398-400">source</a></span><h4 class="code-header">pub unsafe fn <a href="#method.get_unchecked" class="fnname">get_unchecked</a><I>(<br> &self,<br> index: I<br>) -> &<I as <a class="trait" href="https://doc.rust-lang.org/nightly/core/slice/index/trait.SliceIndex.html" title="trait core::slice::index::SliceIndex">SliceIndex</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>>>::<a class="associatedtype" href="https://doc.rust-lang.org/nightly/core/slice/index/trait.SliceIndex.html#associatedtype.Output" title="type core::slice::index::SliceIndex::Output">Output</a><span class="where fmt-newline">where<br> I: <a class="trait" href="https://doc.rust-lang.org/nightly/core/slice/index/trait.SliceIndex.html" title="trait core::slice::index::SliceIndex">SliceIndex</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>>,</span></h4></section></summary><div class="docblock"><p>Returns a reference to an element or subslice, without doing bounds |
| checking.</p> |
| <p>For a safe alternative see <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.get"><code>get</code></a>.</p> |
| <h5 id="safety"><a href="#safety">Safety</a></h5> |
| <p>Calling this method with an out-of-bounds index is <em><a href="https://doc.rust-lang.org/reference/behavior-considered-undefined.html">undefined behavior</a></em> |
| even if the resulting reference is not used.</p> |
| <h5 id="examples-13"><a href="#examples-13">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>x = <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">4</span>]; |
| |
| <span class="kw">unsafe </span>{ |
| <span class="macro">assert_eq!</span>(x.get_unchecked(<span class="number">1</span>), <span class="kw-2">&</span><span class="number">2</span>); |
| }</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.get_unchecked_mut" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#436-438">source</a></span><h4 class="code-header">pub unsafe fn <a href="#method.get_unchecked_mut" class="fnname">get_unchecked_mut</a><I>(<br> &mut self,<br> index: I<br>) -> &mut <I as <a class="trait" href="https://doc.rust-lang.org/nightly/core/slice/index/trait.SliceIndex.html" title="trait core::slice::index::SliceIndex">SliceIndex</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>>>::<a class="associatedtype" href="https://doc.rust-lang.org/nightly/core/slice/index/trait.SliceIndex.html#associatedtype.Output" title="type core::slice::index::SliceIndex::Output">Output</a><span class="where fmt-newline">where<br> I: <a class="trait" href="https://doc.rust-lang.org/nightly/core/slice/index/trait.SliceIndex.html" title="trait core::slice::index::SliceIndex">SliceIndex</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>>,</span></h4></section></summary><div class="docblock"><p>Returns a mutable reference to an element or subslice, without doing |
| bounds checking.</p> |
| <p>For a safe alternative see <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.get_mut"><code>get_mut</code></a>.</p> |
| <h5 id="safety-1"><a href="#safety-1">Safety</a></h5> |
| <p>Calling this method with an out-of-bounds index is <em><a href="https://doc.rust-lang.org/reference/behavior-considered-undefined.html">undefined behavior</a></em> |
| even if the resulting reference is not used.</p> |
| <h5 id="examples-14"><a href="#examples-14">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>x = <span class="kw-2">&mut </span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">4</span>]; |
| |
| <span class="kw">unsafe </span>{ |
| <span class="kw">let </span>elem = x.get_unchecked_mut(<span class="number">1</span>); |
| <span class="kw-2">*</span>elem = <span class="number">13</span>; |
| } |
| <span class="macro">assert_eq!</span>(x, <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">13</span>, <span class="number">4</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.as_ptr" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#476">source</a></span><h4 class="code-header">pub fn <a href="#method.as_ptr" class="fnname">as_ptr</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.pointer.html">*const T</a></h4></section></summary><div class="docblock"><p>Returns a raw pointer to the slice’s buffer.</p> |
| <p>The caller must ensure that the slice outlives the pointer this |
| function returns, or else it will end up pointing to garbage.</p> |
| <p>The caller must also ensure that the memory the pointer (non-transitively) points to |
| is never written to (except inside an <code>UnsafeCell</code>) using this pointer or any pointer |
| derived from it. If you need to mutate the contents of the slice, use <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.as_mut_ptr"><code>as_mut_ptr</code></a>.</p> |
| <p>Modifying the container referenced by this slice may cause its buffer |
| to be reallocated, which would also make any pointers to it invalid.</p> |
| <h5 id="examples-15"><a href="#examples-15">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>x = <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">4</span>]; |
| <span class="kw">let </span>x_ptr = x.as_ptr(); |
| |
| <span class="kw">unsafe </span>{ |
| <span class="kw">for </span>i <span class="kw">in </span><span class="number">0</span>..x.len() { |
| <span class="macro">assert_eq!</span>(x.get_unchecked(i), <span class="kw-2">&*</span>x_ptr.add(i)); |
| } |
| }</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.as_mut_ptr" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#506">source</a></span><h4 class="code-header">pub fn <a href="#method.as_mut_ptr" class="fnname">as_mut_ptr</a>(&mut self) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.pointer.html">*mut T</a></h4></section></summary><div class="docblock"><p>Returns an unsafe mutable pointer to the slice’s buffer.</p> |
| <p>The caller must ensure that the slice outlives the pointer this |
| function returns, or else it will end up pointing to garbage.</p> |
| <p>Modifying the container referenced by this slice may cause its buffer |
| to be reallocated, which would also make any pointers to it invalid.</p> |
| <h5 id="examples-16"><a href="#examples-16">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>x = <span class="kw-2">&mut </span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">4</span>]; |
| <span class="kw">let </span>x_ptr = x.as_mut_ptr(); |
| |
| <span class="kw">unsafe </span>{ |
| <span class="kw">for </span>i <span class="kw">in </span><span class="number">0</span>..x.len() { |
| <span class="kw-2">*</span>x_ptr.add(i) += <span class="number">2</span>; |
| } |
| } |
| <span class="macro">assert_eq!</span>(x, <span class="kw-2">&</span>[<span class="number">3</span>, <span class="number">4</span>, <span class="number">6</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.as_ptr_range" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.48.0">1.48.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#542">source</a></span><h4 class="code-header">pub fn <a href="#method.as_ptr_range" class="fnname">as_ptr_range</a>(&self) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/ops/range/struct.Range.html" title="struct core::ops::range::Range">Range</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.pointer.html">*const T</a>></h4></section></summary><div class="docblock"><p>Returns the two raw pointers spanning the slice.</p> |
| <p>The returned range is half-open, which means that the end pointer |
| points <em>one past</em> the last element of the slice. This way, an empty |
| slice is represented by two equal pointers, and the difference between |
| the two pointers represents the size of the slice.</p> |
| <p>See <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.as_ptr"><code>as_ptr</code></a> for warnings on using these pointers. The end pointer |
| requires extra caution, as it does not point to a valid element in the |
| slice.</p> |
| <p>This function is useful for interacting with foreign interfaces which |
| use two pointers to refer to a range of elements in memory, as is |
| common in C++.</p> |
| <p>It can also be useful to check if a pointer to an element refers to an |
| element of this slice:</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>a = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>]; |
| <span class="kw">let </span>x = <span class="kw-2">&</span>a[<span class="number">1</span>] <span class="kw">as </span><span class="kw-2">*const </span><span class="kw">_</span>; |
| <span class="kw">let </span>y = <span class="kw-2">&</span><span class="number">5 </span><span class="kw">as </span><span class="kw-2">*const </span><span class="kw">_</span>; |
| |
| <span class="macro">assert!</span>(a.as_ptr_range().contains(<span class="kw-2">&</span>x)); |
| <span class="macro">assert!</span>(!a.as_ptr_range().contains(<span class="kw-2">&</span>y));</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.as_mut_ptr_range" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.48.0">1.48.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#586">source</a></span><h4 class="code-header">pub fn <a href="#method.as_mut_ptr_range" class="fnname">as_mut_ptr_range</a>(&mut self) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/ops/range/struct.Range.html" title="struct core::ops::range::Range">Range</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.pointer.html">*mut T</a>></h4></section></summary><div class="docblock"><p>Returns the two unsafe mutable pointers spanning the slice.</p> |
| <p>The returned range is half-open, which means that the end pointer |
| points <em>one past</em> the last element of the slice. This way, an empty |
| slice is represented by two equal pointers, and the difference between |
| the two pointers represents the size of the slice.</p> |
| <p>See <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.as_mut_ptr"><code>as_mut_ptr</code></a> for warnings on using these pointers. The end |
| pointer requires extra caution, as it does not point to a valid element |
| in the slice.</p> |
| <p>This function is useful for interacting with foreign interfaces which |
| use two pointers to refer to a range of elements in memory, as is |
| common in C++.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.swap" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#615">source</a></span><h4 class="code-header">pub fn <a href="#method.swap" class="fnname">swap</a>(&mut self, a: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>, b: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>)</h4></section></summary><div class="docblock"><p>Swaps two elements in the slice.</p> |
| <h5 id="arguments"><a href="#arguments">Arguments</a></h5> |
| <ul> |
| <li>a - The index of the first element</li> |
| <li>b - The index of the second element</li> |
| </ul> |
| <h5 id="panics-6"><a href="#panics-6">Panics</a></h5> |
| <p>Panics if <code>a</code> or <code>b</code> are out of bounds.</p> |
| <h5 id="examples-17"><a href="#examples-17">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>v = [<span class="string">"a"</span>, <span class="string">"b"</span>, <span class="string">"c"</span>, <span class="string">"d"</span>, <span class="string">"e"</span>]; |
| v.swap(<span class="number">2</span>, <span class="number">4</span>); |
| <span class="macro">assert!</span>(v == [<span class="string">"a"</span>, <span class="string">"b"</span>, <span class="string">"e"</span>, <span class="string">"d"</span>, <span class="string">"c"</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.swap_unchecked" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#658">source</a><h4 class="code-header">pub unsafe fn <a href="#method.swap_unchecked" class="fnname">swap_unchecked</a>(&mut self, a: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>, b: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>)</h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_swap_unchecked</code>)</span></div></span></summary><div class="docblock"><p>Swaps two elements in the slice, without doing bounds checking.</p> |
| <p>For a safe alternative see <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.swap"><code>swap</code></a>.</p> |
| <h5 id="arguments-1"><a href="#arguments-1">Arguments</a></h5> |
| <ul> |
| <li>a - The index of the first element</li> |
| <li>b - The index of the second element</li> |
| </ul> |
| <h5 id="safety-2"><a href="#safety-2">Safety</a></h5> |
| <p>Calling this method with an out-of-bounds index is <em><a href="https://doc.rust-lang.org/reference/behavior-considered-undefined.html">undefined behavior</a></em>. |
| The caller has to ensure that <code>a < self.len()</code> and <code>b < self.len()</code>.</p> |
| <h5 id="examples-18"><a href="#examples-18">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(slice_swap_unchecked)] |
| |
| </span><span class="kw">let </span><span class="kw-2">mut </span>v = [<span class="string">"a"</span>, <span class="string">"b"</span>, <span class="string">"c"</span>, <span class="string">"d"</span>]; |
| <span class="comment">// SAFETY: we know that 1 and 3 are both indices of the slice |
| </span><span class="kw">unsafe </span>{ v.swap_unchecked(<span class="number">1</span>, <span class="number">3</span>) }; |
| <span class="macro">assert!</span>(v == [<span class="string">"a"</span>, <span class="string">"d"</span>, <span class="string">"c"</span>, <span class="string">"b"</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.reverse" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#680">source</a></span><h4 class="code-header">pub fn <a href="#method.reverse" class="fnname">reverse</a>(&mut self)</h4></section></summary><div class="docblock"><p>Reverses the order of elements in the slice, in place.</p> |
| <h5 id="examples-19"><a href="#examples-19">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>v = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>]; |
| v.reverse(); |
| <span class="macro">assert!</span>(v == [<span class="number">3</span>, <span class="number">2</span>, <span class="number">1</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.iter" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#738">source</a></span><h4 class="code-header">pub fn <a href="#method.iter" class="fnname">iter</a>(&self) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/slice/iter/struct.Iter.html" title="struct core::slice::iter::Iter">Iter</a><'_, T></h4></section></summary><div class="docblock"><p>Returns an iterator over the slice.</p> |
| <p>The iterator yields all items from start to end.</p> |
| <h5 id="examples-20"><a href="#examples-20">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>x = <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">4</span>]; |
| <span class="kw">let </span><span class="kw-2">mut </span>iterator = x.iter(); |
| |
| <span class="macro">assert_eq!</span>(iterator.next(), <span class="prelude-val">Some</span>(<span class="kw-2">&</span><span class="number">1</span>)); |
| <span class="macro">assert_eq!</span>(iterator.next(), <span class="prelude-val">Some</span>(<span class="kw-2">&</span><span class="number">2</span>)); |
| <span class="macro">assert_eq!</span>(iterator.next(), <span class="prelude-val">Some</span>(<span class="kw-2">&</span><span class="number">4</span>)); |
| <span class="macro">assert_eq!</span>(iterator.next(), <span class="prelude-val">None</span>);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.iter_mut" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#757">source</a></span><h4 class="code-header">pub fn <a href="#method.iter_mut" class="fnname">iter_mut</a>(&mut self) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/slice/iter/struct.IterMut.html" title="struct core::slice::iter::IterMut">IterMut</a><'_, T></h4></section></summary><div class="docblock"><p>Returns an iterator that allows modifying each value.</p> |
| <p>The iterator yields all items from start to end.</p> |
| <h5 id="examples-21"><a href="#examples-21">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>x = <span class="kw-2">&mut </span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">4</span>]; |
| <span class="kw">for </span>elem <span class="kw">in </span>x.iter_mut() { |
| <span class="kw-2">*</span>elem += <span class="number">2</span>; |
| } |
| <span class="macro">assert_eq!</span>(x, <span class="kw-2">&</span>[<span class="number">3</span>, <span class="number">4</span>, <span class="number">6</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.windows" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#789">source</a></span><h4 class="code-header">pub fn <a href="#method.windows" class="fnname">windows</a>(&self, size: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/slice/iter/struct.Windows.html" title="struct core::slice::iter::Windows">Windows</a><'_, T></h4></section></summary><div class="docblock"><p>Returns an iterator over all contiguous windows of length |
| <code>size</code>. The windows overlap. If the slice is shorter than |
| <code>size</code>, the iterator returns no values.</p> |
| <h5 id="panics-7"><a href="#panics-7">Panics</a></h5> |
| <p>Panics if <code>size</code> is 0.</p> |
| <h5 id="examples-22"><a href="#examples-22">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>slice = [<span class="string">'r'</span>, <span class="string">'u'</span>, <span class="string">'s'</span>, <span class="string">'t'</span>]; |
| <span class="kw">let </span><span class="kw-2">mut </span>iter = slice.windows(<span class="number">2</span>); |
| <span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="string">'r'</span>, <span class="string">'u'</span>]); |
| <span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="string">'u'</span>, <span class="string">'s'</span>]); |
| <span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="string">'s'</span>, <span class="string">'t'</span>]); |
| <span class="macro">assert!</span>(iter.next().is_none());</code></pre></div> |
| <p>If the slice is shorter than <code>size</code>:</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>slice = [<span class="string">'f'</span>, <span class="string">'o'</span>, <span class="string">'o'</span>]; |
| <span class="kw">let </span><span class="kw-2">mut </span>iter = slice.windows(<span class="number">4</span>); |
| <span class="macro">assert!</span>(iter.next().is_none());</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.chunks" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#823">source</a></span><h4 class="code-header">pub fn <a href="#method.chunks" class="fnname">chunks</a>(&self, chunk_size: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/slice/iter/struct.Chunks.html" title="struct core::slice::iter::Chunks">Chunks</a><'_, T></h4></section></summary><div class="docblock"><p>Returns an iterator over <code>chunk_size</code> elements of the slice at a time, starting at the |
| beginning of the slice.</p> |
| <p>The chunks are slices and do not overlap. If <code>chunk_size</code> does not divide the length of the |
| slice, then the last chunk will not have length <code>chunk_size</code>.</p> |
| <p>See <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.chunks_exact"><code>chunks_exact</code></a> for a variant of this iterator that returns chunks of always exactly |
| <code>chunk_size</code> elements, and <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.rchunks"><code>rchunks</code></a> for the same iterator but starting at the end of the |
| slice.</p> |
| <h5 id="panics-8"><a href="#panics-8">Panics</a></h5> |
| <p>Panics if <code>chunk_size</code> is 0.</p> |
| <h5 id="examples-23"><a href="#examples-23">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>slice = [<span class="string">'l'</span>, <span class="string">'o'</span>, <span class="string">'r'</span>, <span class="string">'e'</span>, <span class="string">'m'</span>]; |
| <span class="kw">let </span><span class="kw-2">mut </span>iter = slice.chunks(<span class="number">2</span>); |
| <span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="string">'l'</span>, <span class="string">'o'</span>]); |
| <span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="string">'r'</span>, <span class="string">'e'</span>]); |
| <span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="string">'m'</span>]); |
| <span class="macro">assert!</span>(iter.next().is_none());</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.chunks_mut" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#861">source</a></span><h4 class="code-header">pub fn <a href="#method.chunks_mut" class="fnname">chunks_mut</a>(&mut self, chunk_size: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/slice/iter/struct.ChunksMut.html" title="struct core::slice::iter::ChunksMut">ChunksMut</a><'_, T></h4></section></summary><div class="docblock"><p>Returns an iterator over <code>chunk_size</code> elements of the slice at a time, starting at the |
| beginning of the slice.</p> |
| <p>The chunks are mutable slices, and do not overlap. If <code>chunk_size</code> does not divide the |
| length of the slice, then the last chunk will not have length <code>chunk_size</code>.</p> |
| <p>See <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.chunks_exact_mut"><code>chunks_exact_mut</code></a> for a variant of this iterator that returns chunks of always |
| exactly <code>chunk_size</code> elements, and <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.rchunks_mut"><code>rchunks_mut</code></a> for the same iterator but starting at |
| the end of the slice.</p> |
| <h5 id="panics-9"><a href="#panics-9">Panics</a></h5> |
| <p>Panics if <code>chunk_size</code> is 0.</p> |
| <h5 id="examples-24"><a href="#examples-24">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = <span class="kw-2">&mut </span>[<span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>]; |
| <span class="kw">let </span><span class="kw-2">mut </span>count = <span class="number">1</span>; |
| |
| <span class="kw">for </span>chunk <span class="kw">in </span>v.chunks_mut(<span class="number">2</span>) { |
| <span class="kw">for </span>elem <span class="kw">in </span>chunk.iter_mut() { |
| <span class="kw-2">*</span>elem += count; |
| } |
| count += <span class="number">1</span>; |
| } |
| <span class="macro">assert_eq!</span>(v, <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">2</span>, <span class="number">3</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.chunks_exact" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.31.0">1.31.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#898">source</a></span><h4 class="code-header">pub fn <a href="#method.chunks_exact" class="fnname">chunks_exact</a>(&self, chunk_size: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/slice/iter/struct.ChunksExact.html" title="struct core::slice::iter::ChunksExact">ChunksExact</a><'_, T></h4></section></summary><div class="docblock"><p>Returns an iterator over <code>chunk_size</code> elements of the slice at a time, starting at the |
| beginning of the slice.</p> |
| <p>The chunks are slices and do not overlap. If <code>chunk_size</code> does not divide the length of the |
| slice, then the last up to <code>chunk_size-1</code> elements will be omitted and can be retrieved |
| from the <code>remainder</code> function of the iterator.</p> |
| <p>Due to each chunk having exactly <code>chunk_size</code> elements, the compiler can often optimize the |
| resulting code better than in the case of <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.chunks"><code>chunks</code></a>.</p> |
| <p>See <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.chunks"><code>chunks</code></a> for a variant of this iterator that also returns the remainder as a smaller |
| chunk, and <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.rchunks_exact"><code>rchunks_exact</code></a> for the same iterator but starting at the end of the slice.</p> |
| <h5 id="panics-10"><a href="#panics-10">Panics</a></h5> |
| <p>Panics if <code>chunk_size</code> is 0.</p> |
| <h5 id="examples-25"><a href="#examples-25">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>slice = [<span class="string">'l'</span>, <span class="string">'o'</span>, <span class="string">'r'</span>, <span class="string">'e'</span>, <span class="string">'m'</span>]; |
| <span class="kw">let </span><span class="kw-2">mut </span>iter = slice.chunks_exact(<span class="number">2</span>); |
| <span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="string">'l'</span>, <span class="string">'o'</span>]); |
| <span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="string">'r'</span>, <span class="string">'e'</span>]); |
| <span class="macro">assert!</span>(iter.next().is_none()); |
| <span class="macro">assert_eq!</span>(iter.remainder(), <span class="kw-2">&</span>[<span class="string">'m'</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.chunks_exact_mut" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.31.0">1.31.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#940">source</a></span><h4 class="code-header">pub fn <a href="#method.chunks_exact_mut" class="fnname">chunks_exact_mut</a>(&mut self, chunk_size: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/slice/iter/struct.ChunksExactMut.html" title="struct core::slice::iter::ChunksExactMut">ChunksExactMut</a><'_, T></h4></section></summary><div class="docblock"><p>Returns an iterator over <code>chunk_size</code> elements of the slice at a time, starting at the |
| beginning of the slice.</p> |
| <p>The chunks are mutable slices, and do not overlap. If <code>chunk_size</code> does not divide the |
| length of the slice, then the last up to <code>chunk_size-1</code> elements will be omitted and can be |
| retrieved from the <code>into_remainder</code> function of the iterator.</p> |
| <p>Due to each chunk having exactly <code>chunk_size</code> elements, the compiler can often optimize the |
| resulting code better than in the case of <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.chunks_mut"><code>chunks_mut</code></a>.</p> |
| <p>See <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.chunks_mut"><code>chunks_mut</code></a> for a variant of this iterator that also returns the remainder as a |
| smaller chunk, and <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.rchunks_exact_mut"><code>rchunks_exact_mut</code></a> for the same iterator but starting at the end of |
| the slice.</p> |
| <h5 id="panics-11"><a href="#panics-11">Panics</a></h5> |
| <p>Panics if <code>chunk_size</code> is 0.</p> |
| <h5 id="examples-26"><a href="#examples-26">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = <span class="kw-2">&mut </span>[<span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>]; |
| <span class="kw">let </span><span class="kw-2">mut </span>count = <span class="number">1</span>; |
| |
| <span class="kw">for </span>chunk <span class="kw">in </span>v.chunks_exact_mut(<span class="number">2</span>) { |
| <span class="kw">for </span>elem <span class="kw">in </span>chunk.iter_mut() { |
| <span class="kw-2">*</span>elem += count; |
| } |
| count += <span class="number">1</span>; |
| } |
| <span class="macro">assert_eq!</span>(v, <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">2</span>, <span class="number">0</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.as_chunks_unchecked" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#975">source</a><h4 class="code-header">pub unsafe fn <a href="#method.as_chunks_unchecked" class="fnname">as_chunks_unchecked</a><const N: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>>(&self) -> &[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.array.html">[T; N]</a>]</h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_as_chunks</code>)</span></div></span></summary><div class="docblock"><p>Splits the slice into a slice of <code>N</code>-element arrays, |
| assuming that there’s no remainder.</p> |
| <h5 id="safety-3"><a href="#safety-3">Safety</a></h5> |
| <p>This may only be called when</p> |
| <ul> |
| <li>The slice splits exactly into <code>N</code>-element chunks (aka <code>self.len() % N == 0</code>).</li> |
| <li><code>N != 0</code>.</li> |
| </ul> |
| <h5 id="examples-27"><a href="#examples-27">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(slice_as_chunks)] |
| </span><span class="kw">let </span>slice: <span class="kw-2">&</span>[char] = <span class="kw-2">&</span>[<span class="string">'l'</span>, <span class="string">'o'</span>, <span class="string">'r'</span>, <span class="string">'e'</span>, <span class="string">'m'</span>, <span class="string">'!'</span>]; |
| <span class="kw">let </span>chunks: <span class="kw-2">&</span>[[char; <span class="number">1</span>]] = |
| <span class="comment">// SAFETY: 1-element chunks never have remainder |
| </span><span class="kw">unsafe </span>{ slice.as_chunks_unchecked() }; |
| <span class="macro">assert_eq!</span>(chunks, <span class="kw-2">&</span>[[<span class="string">'l'</span>], [<span class="string">'o'</span>], [<span class="string">'r'</span>], [<span class="string">'e'</span>], [<span class="string">'m'</span>], [<span class="string">'!'</span>]]); |
| <span class="kw">let </span>chunks: <span class="kw-2">&</span>[[char; <span class="number">3</span>]] = |
| <span class="comment">// SAFETY: The slice length (6) is a multiple of 3 |
| </span><span class="kw">unsafe </span>{ slice.as_chunks_unchecked() }; |
| <span class="macro">assert_eq!</span>(chunks, <span class="kw-2">&</span>[[<span class="string">'l'</span>, <span class="string">'o'</span>, <span class="string">'r'</span>], [<span class="string">'e'</span>, <span class="string">'m'</span>, <span class="string">'!'</span>]]); |
| |
| <span class="comment">// These would be unsound: |
| // let chunks: &[[_; 5]] = slice.as_chunks_unchecked() // The slice length is not a multiple of 5 |
| // let chunks: &[[_; 0]] = slice.as_chunks_unchecked() // Zero-length chunks are never allowed</span></code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.as_chunks" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#1008">source</a><h4 class="code-header">pub fn <a href="#method.as_chunks" class="fnname">as_chunks</a><const N: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>>(&self) -> (&[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.array.html">[T; N]</a>], &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>)</h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_as_chunks</code>)</span></div></span></summary><div class="docblock"><p>Splits the slice into a slice of <code>N</code>-element arrays, |
| starting at the beginning of the slice, |
| and a remainder slice with length strictly less than <code>N</code>.</p> |
| <h5 id="panics-12"><a href="#panics-12">Panics</a></h5> |
| <p>Panics if <code>N</code> is 0. This check will most probably get changed to a compile time |
| error before this method gets stabilized.</p> |
| <h5 id="examples-28"><a href="#examples-28">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(slice_as_chunks)] |
| </span><span class="kw">let </span>slice = [<span class="string">'l'</span>, <span class="string">'o'</span>, <span class="string">'r'</span>, <span class="string">'e'</span>, <span class="string">'m'</span>]; |
| <span class="kw">let </span>(chunks, remainder) = slice.as_chunks(); |
| <span class="macro">assert_eq!</span>(chunks, <span class="kw-2">&</span>[[<span class="string">'l'</span>, <span class="string">'o'</span>], [<span class="string">'r'</span>, <span class="string">'e'</span>]]); |
| <span class="macro">assert_eq!</span>(remainder, <span class="kw-2">&</span>[<span class="string">'m'</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.as_rchunks" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#1039">source</a><h4 class="code-header">pub fn <a href="#method.as_rchunks" class="fnname">as_rchunks</a><const N: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>>(&self) -> (&<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>, &[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.array.html">[T; N]</a>])</h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_as_chunks</code>)</span></div></span></summary><div class="docblock"><p>Splits the slice into a slice of <code>N</code>-element arrays, |
| starting at the end of the slice, |
| and a remainder slice with length strictly less than <code>N</code>.</p> |
| <h5 id="panics-13"><a href="#panics-13">Panics</a></h5> |
| <p>Panics if <code>N</code> is 0. This check will most probably get changed to a compile time |
| error before this method gets stabilized.</p> |
| <h5 id="examples-29"><a href="#examples-29">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(slice_as_chunks)] |
| </span><span class="kw">let </span>slice = [<span class="string">'l'</span>, <span class="string">'o'</span>, <span class="string">'r'</span>, <span class="string">'e'</span>, <span class="string">'m'</span>]; |
| <span class="kw">let </span>(remainder, chunks) = slice.as_rchunks(); |
| <span class="macro">assert_eq!</span>(remainder, <span class="kw-2">&</span>[<span class="string">'l'</span>]); |
| <span class="macro">assert_eq!</span>(chunks, <span class="kw-2">&</span>[[<span class="string">'o'</span>, <span class="string">'r'</span>], [<span class="string">'e'</span>, <span class="string">'m'</span>]]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.array_chunks" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#1078">source</a><h4 class="code-header">pub fn <a href="#method.array_chunks" class="fnname">array_chunks</a><const N: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>>(&self) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/slice/iter/struct.ArrayChunks.html" title="struct core::slice::iter::ArrayChunks">ArrayChunks</a><'_, T, N></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>array_chunks</code>)</span></div></span></summary><div class="docblock"><p>Returns an iterator over <code>N</code> elements of the slice at a time, starting at the |
| beginning of the slice.</p> |
| <p>The chunks are array references and do not overlap. If <code>N</code> does not divide the |
| length of the slice, then the last up to <code>N-1</code> elements will be omitted and can be |
| retrieved from the <code>remainder</code> function of the iterator.</p> |
| <p>This method is the const generic equivalent of <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.chunks_exact"><code>chunks_exact</code></a>.</p> |
| <h5 id="panics-14"><a href="#panics-14">Panics</a></h5> |
| <p>Panics if <code>N</code> is 0. This check will most probably get changed to a compile time |
| error before this method gets stabilized.</p> |
| <h5 id="examples-30"><a href="#examples-30">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(array_chunks)] |
| </span><span class="kw">let </span>slice = [<span class="string">'l'</span>, <span class="string">'o'</span>, <span class="string">'r'</span>, <span class="string">'e'</span>, <span class="string">'m'</span>]; |
| <span class="kw">let </span><span class="kw-2">mut </span>iter = slice.array_chunks(); |
| <span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="string">'l'</span>, <span class="string">'o'</span>]); |
| <span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="string">'r'</span>, <span class="string">'e'</span>]); |
| <span class="macro">assert!</span>(iter.next().is_none()); |
| <span class="macro">assert_eq!</span>(iter.remainder(), <span class="kw-2">&</span>[<span class="string">'m'</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.as_chunks_unchecked_mut" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#1115">source</a><h4 class="code-header">pub unsafe fn <a href="#method.as_chunks_unchecked_mut" class="fnname">as_chunks_unchecked_mut</a><const N: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>>(<br> &mut self<br>) -> &mut [<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.array.html">[T; N]</a>]</h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_as_chunks</code>)</span></div></span></summary><div class="docblock"><p>Splits the slice into a slice of <code>N</code>-element arrays, |
| assuming that there’s no remainder.</p> |
| <h5 id="safety-4"><a href="#safety-4">Safety</a></h5> |
| <p>This may only be called when</p> |
| <ul> |
| <li>The slice splits exactly into <code>N</code>-element chunks (aka <code>self.len() % N == 0</code>).</li> |
| <li><code>N != 0</code>.</li> |
| </ul> |
| <h5 id="examples-31"><a href="#examples-31">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(slice_as_chunks)] |
| </span><span class="kw">let </span>slice: <span class="kw-2">&mut </span>[char] = <span class="kw-2">&mut </span>[<span class="string">'l'</span>, <span class="string">'o'</span>, <span class="string">'r'</span>, <span class="string">'e'</span>, <span class="string">'m'</span>, <span class="string">'!'</span>]; |
| <span class="kw">let </span>chunks: <span class="kw-2">&mut </span>[[char; <span class="number">1</span>]] = |
| <span class="comment">// SAFETY: 1-element chunks never have remainder |
| </span><span class="kw">unsafe </span>{ slice.as_chunks_unchecked_mut() }; |
| chunks[<span class="number">0</span>] = [<span class="string">'L'</span>]; |
| <span class="macro">assert_eq!</span>(chunks, <span class="kw-2">&</span>[[<span class="string">'L'</span>], [<span class="string">'o'</span>], [<span class="string">'r'</span>], [<span class="string">'e'</span>], [<span class="string">'m'</span>], [<span class="string">'!'</span>]]); |
| <span class="kw">let </span>chunks: <span class="kw-2">&mut </span>[[char; <span class="number">3</span>]] = |
| <span class="comment">// SAFETY: The slice length (6) is a multiple of 3 |
| </span><span class="kw">unsafe </span>{ slice.as_chunks_unchecked_mut() }; |
| chunks[<span class="number">1</span>] = [<span class="string">'a'</span>, <span class="string">'x'</span>, <span class="string">'?'</span>]; |
| <span class="macro">assert_eq!</span>(slice, <span class="kw-2">&</span>[<span class="string">'L'</span>, <span class="string">'o'</span>, <span class="string">'r'</span>, <span class="string">'a'</span>, <span class="string">'x'</span>, <span class="string">'?'</span>]); |
| |
| <span class="comment">// These would be unsound: |
| // let chunks: &[[_; 5]] = slice.as_chunks_unchecked_mut() // The slice length is not a multiple of 5 |
| // let chunks: &[[_; 0]] = slice.as_chunks_unchecked_mut() // Zero-length chunks are never allowed</span></code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.as_chunks_mut" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#1154">source</a><h4 class="code-header">pub fn <a href="#method.as_chunks_mut" class="fnname">as_chunks_mut</a><const N: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>>(&mut self) -> (&mut [<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.array.html">[T; N]</a>], &mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>)</h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_as_chunks</code>)</span></div></span></summary><div class="docblock"><p>Splits the slice into a slice of <code>N</code>-element arrays, |
| starting at the beginning of the slice, |
| and a remainder slice with length strictly less than <code>N</code>.</p> |
| <h5 id="panics-15"><a href="#panics-15">Panics</a></h5> |
| <p>Panics if <code>N</code> is 0. This check will most probably get changed to a compile time |
| error before this method gets stabilized.</p> |
| <h5 id="examples-32"><a href="#examples-32">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(slice_as_chunks)] |
| </span><span class="kw">let </span>v = <span class="kw-2">&mut </span>[<span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>]; |
| <span class="kw">let </span><span class="kw-2">mut </span>count = <span class="number">1</span>; |
| |
| <span class="kw">let </span>(chunks, remainder) = v.as_chunks_mut(); |
| remainder[<span class="number">0</span>] = <span class="number">9</span>; |
| <span class="kw">for </span>chunk <span class="kw">in </span>chunks { |
| <span class="kw-2">*</span>chunk = [count; <span class="number">2</span>]; |
| count += <span class="number">1</span>; |
| } |
| <span class="macro">assert_eq!</span>(v, <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">2</span>, <span class="number">9</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.as_rchunks_mut" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#1191">source</a><h4 class="code-header">pub fn <a href="#method.as_rchunks_mut" class="fnname">as_rchunks_mut</a><const N: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>>(&mut self) -> (&mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>, &mut [<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.array.html">[T; N]</a>])</h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_as_chunks</code>)</span></div></span></summary><div class="docblock"><p>Splits the slice into a slice of <code>N</code>-element arrays, |
| starting at the end of the slice, |
| and a remainder slice with length strictly less than <code>N</code>.</p> |
| <h5 id="panics-16"><a href="#panics-16">Panics</a></h5> |
| <p>Panics if <code>N</code> is 0. This check will most probably get changed to a compile time |
| error before this method gets stabilized.</p> |
| <h5 id="examples-33"><a href="#examples-33">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(slice_as_chunks)] |
| </span><span class="kw">let </span>v = <span class="kw-2">&mut </span>[<span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>]; |
| <span class="kw">let </span><span class="kw-2">mut </span>count = <span class="number">1</span>; |
| |
| <span class="kw">let </span>(remainder, chunks) = v.as_rchunks_mut(); |
| remainder[<span class="number">0</span>] = <span class="number">9</span>; |
| <span class="kw">for </span>chunk <span class="kw">in </span>chunks { |
| <span class="kw-2">*</span>chunk = [count; <span class="number">2</span>]; |
| count += <span class="number">1</span>; |
| } |
| <span class="macro">assert_eq!</span>(v, <span class="kw-2">&</span>[<span class="number">9</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">2</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.array_chunks_mut" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#1232">source</a><h4 class="code-header">pub fn <a href="#method.array_chunks_mut" class="fnname">array_chunks_mut</a><const N: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>>(&mut self) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/slice/iter/struct.ArrayChunksMut.html" title="struct core::slice::iter::ArrayChunksMut">ArrayChunksMut</a><'_, T, N></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>array_chunks</code>)</span></div></span></summary><div class="docblock"><p>Returns an iterator over <code>N</code> elements of the slice at a time, starting at the |
| beginning of the slice.</p> |
| <p>The chunks are mutable array references and do not overlap. If <code>N</code> does not divide |
| the length of the slice, then the last up to <code>N-1</code> elements will be omitted and |
| can be retrieved from the <code>into_remainder</code> function of the iterator.</p> |
| <p>This method is the const generic equivalent of <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.chunks_exact_mut"><code>chunks_exact_mut</code></a>.</p> |
| <h5 id="panics-17"><a href="#panics-17">Panics</a></h5> |
| <p>Panics if <code>N</code> is 0. This check will most probably get changed to a compile time |
| error before this method gets stabilized.</p> |
| <h5 id="examples-34"><a href="#examples-34">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(array_chunks)] |
| </span><span class="kw">let </span>v = <span class="kw-2">&mut </span>[<span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>]; |
| <span class="kw">let </span><span class="kw-2">mut </span>count = <span class="number">1</span>; |
| |
| <span class="kw">for </span>chunk <span class="kw">in </span>v.array_chunks_mut() { |
| <span class="kw-2">*</span>chunk = [count; <span class="number">2</span>]; |
| count += <span class="number">1</span>; |
| } |
| <span class="macro">assert_eq!</span>(v, <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">2</span>, <span class="number">0</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.array_windows" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#1264">source</a><h4 class="code-header">pub fn <a href="#method.array_windows" class="fnname">array_windows</a><const N: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>>(&self) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/slice/iter/struct.ArrayWindows.html" title="struct core::slice::iter::ArrayWindows">ArrayWindows</a><'_, T, N></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>array_windows</code>)</span></div></span></summary><div class="docblock"><p>Returns an iterator over overlapping windows of <code>N</code> elements of a slice, |
| starting at the beginning of the slice.</p> |
| <p>This is the const generic equivalent of <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.windows"><code>windows</code></a>.</p> |
| <p>If <code>N</code> is greater than the size of the slice, it will return no windows.</p> |
| <h5 id="panics-18"><a href="#panics-18">Panics</a></h5> |
| <p>Panics if <code>N</code> is 0. This check will most probably get changed to a compile time |
| error before this method gets stabilized.</p> |
| <h5 id="examples-35"><a href="#examples-35">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(array_windows)] |
| </span><span class="kw">let </span>slice = [<span class="number">0</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>]; |
| <span class="kw">let </span><span class="kw-2">mut </span>iter = slice.array_windows(); |
| <span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="number">0</span>, <span class="number">1</span>]); |
| <span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">2</span>]); |
| <span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="number">2</span>, <span class="number">3</span>]); |
| <span class="macro">assert!</span>(iter.next().is_none());</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.rchunks" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.31.0">1.31.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#1298">source</a></span><h4 class="code-header">pub fn <a href="#method.rchunks" class="fnname">rchunks</a>(&self, chunk_size: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/slice/iter/struct.RChunks.html" title="struct core::slice::iter::RChunks">RChunks</a><'_, T></h4></section></summary><div class="docblock"><p>Returns an iterator over <code>chunk_size</code> elements of the slice at a time, starting at the end |
| of the slice.</p> |
| <p>The chunks are slices and do not overlap. If <code>chunk_size</code> does not divide the length of the |
| slice, then the last chunk will not have length <code>chunk_size</code>.</p> |
| <p>See <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.rchunks_exact"><code>rchunks_exact</code></a> for a variant of this iterator that returns chunks of always exactly |
| <code>chunk_size</code> elements, and <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.chunks"><code>chunks</code></a> for the same iterator but starting at the beginning |
| of the slice.</p> |
| <h5 id="panics-19"><a href="#panics-19">Panics</a></h5> |
| <p>Panics if <code>chunk_size</code> is 0.</p> |
| <h5 id="examples-36"><a href="#examples-36">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>slice = [<span class="string">'l'</span>, <span class="string">'o'</span>, <span class="string">'r'</span>, <span class="string">'e'</span>, <span class="string">'m'</span>]; |
| <span class="kw">let </span><span class="kw-2">mut </span>iter = slice.rchunks(<span class="number">2</span>); |
| <span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="string">'e'</span>, <span class="string">'m'</span>]); |
| <span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="string">'o'</span>, <span class="string">'r'</span>]); |
| <span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="string">'l'</span>]); |
| <span class="macro">assert!</span>(iter.next().is_none());</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.rchunks_mut" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.31.0">1.31.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#1336">source</a></span><h4 class="code-header">pub fn <a href="#method.rchunks_mut" class="fnname">rchunks_mut</a>(&mut self, chunk_size: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/slice/iter/struct.RChunksMut.html" title="struct core::slice::iter::RChunksMut">RChunksMut</a><'_, T></h4></section></summary><div class="docblock"><p>Returns an iterator over <code>chunk_size</code> elements of the slice at a time, starting at the end |
| of the slice.</p> |
| <p>The chunks are mutable slices, and do not overlap. If <code>chunk_size</code> does not divide the |
| length of the slice, then the last chunk will not have length <code>chunk_size</code>.</p> |
| <p>See <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.rchunks_exact_mut"><code>rchunks_exact_mut</code></a> for a variant of this iterator that returns chunks of always |
| exactly <code>chunk_size</code> elements, and <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.chunks_mut"><code>chunks_mut</code></a> for the same iterator but starting at the |
| beginning of the slice.</p> |
| <h5 id="panics-20"><a href="#panics-20">Panics</a></h5> |
| <p>Panics if <code>chunk_size</code> is 0.</p> |
| <h5 id="examples-37"><a href="#examples-37">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = <span class="kw-2">&mut </span>[<span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>]; |
| <span class="kw">let </span><span class="kw-2">mut </span>count = <span class="number">1</span>; |
| |
| <span class="kw">for </span>chunk <span class="kw">in </span>v.rchunks_mut(<span class="number">2</span>) { |
| <span class="kw">for </span>elem <span class="kw">in </span>chunk.iter_mut() { |
| <span class="kw-2">*</span>elem += count; |
| } |
| count += <span class="number">1</span>; |
| } |
| <span class="macro">assert_eq!</span>(v, <span class="kw-2">&</span>[<span class="number">3</span>, <span class="number">2</span>, <span class="number">2</span>, <span class="number">1</span>, <span class="number">1</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.rchunks_exact" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.31.0">1.31.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#1375">source</a></span><h4 class="code-header">pub fn <a href="#method.rchunks_exact" class="fnname">rchunks_exact</a>(&self, chunk_size: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/slice/iter/struct.RChunksExact.html" title="struct core::slice::iter::RChunksExact">RChunksExact</a><'_, T></h4></section></summary><div class="docblock"><p>Returns an iterator over <code>chunk_size</code> elements of the slice at a time, starting at the |
| end of the slice.</p> |
| <p>The chunks are slices and do not overlap. If <code>chunk_size</code> does not divide the length of the |
| slice, then the last up to <code>chunk_size-1</code> elements will be omitted and can be retrieved |
| from the <code>remainder</code> function of the iterator.</p> |
| <p>Due to each chunk having exactly <code>chunk_size</code> elements, the compiler can often optimize the |
| resulting code better than in the case of <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.rchunks"><code>rchunks</code></a>.</p> |
| <p>See <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.rchunks"><code>rchunks</code></a> for a variant of this iterator that also returns the remainder as a smaller |
| chunk, and <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.chunks_exact"><code>chunks_exact</code></a> for the same iterator but starting at the beginning of the |
| slice.</p> |
| <h5 id="panics-21"><a href="#panics-21">Panics</a></h5> |
| <p>Panics if <code>chunk_size</code> is 0.</p> |
| <h5 id="examples-38"><a href="#examples-38">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>slice = [<span class="string">'l'</span>, <span class="string">'o'</span>, <span class="string">'r'</span>, <span class="string">'e'</span>, <span class="string">'m'</span>]; |
| <span class="kw">let </span><span class="kw-2">mut </span>iter = slice.rchunks_exact(<span class="number">2</span>); |
| <span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="string">'e'</span>, <span class="string">'m'</span>]); |
| <span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="string">'o'</span>, <span class="string">'r'</span>]); |
| <span class="macro">assert!</span>(iter.next().is_none()); |
| <span class="macro">assert_eq!</span>(iter.remainder(), <span class="kw-2">&</span>[<span class="string">'l'</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.rchunks_exact_mut" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.31.0">1.31.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#1418">source</a></span><h4 class="code-header">pub fn <a href="#method.rchunks_exact_mut" class="fnname">rchunks_exact_mut</a>(&mut self, chunk_size: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/slice/iter/struct.RChunksExactMut.html" title="struct core::slice::iter::RChunksExactMut">RChunksExactMut</a><'_, T></h4></section></summary><div class="docblock"><p>Returns an iterator over <code>chunk_size</code> elements of the slice at a time, starting at the end |
| of the slice.</p> |
| <p>The chunks are mutable slices, and do not overlap. If <code>chunk_size</code> does not divide the |
| length of the slice, then the last up to <code>chunk_size-1</code> elements will be omitted and can be |
| retrieved from the <code>into_remainder</code> function of the iterator.</p> |
| <p>Due to each chunk having exactly <code>chunk_size</code> elements, the compiler can often optimize the |
| resulting code better than in the case of <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.chunks_mut"><code>chunks_mut</code></a>.</p> |
| <p>See <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.rchunks_mut"><code>rchunks_mut</code></a> for a variant of this iterator that also returns the remainder as a |
| smaller chunk, and <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.chunks_exact_mut"><code>chunks_exact_mut</code></a> for the same iterator but starting at the beginning |
| of the slice.</p> |
| <h5 id="panics-22"><a href="#panics-22">Panics</a></h5> |
| <p>Panics if <code>chunk_size</code> is 0.</p> |
| <h5 id="examples-39"><a href="#examples-39">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = <span class="kw-2">&mut </span>[<span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>]; |
| <span class="kw">let </span><span class="kw-2">mut </span>count = <span class="number">1</span>; |
| |
| <span class="kw">for </span>chunk <span class="kw">in </span>v.rchunks_exact_mut(<span class="number">2</span>) { |
| <span class="kw">for </span>elem <span class="kw">in </span>chunk.iter_mut() { |
| <span class="kw-2">*</span>elem += count; |
| } |
| count += <span class="number">1</span>; |
| } |
| <span class="macro">assert_eq!</span>(v, <span class="kw-2">&</span>[<span class="number">0</span>, <span class="number">2</span>, <span class="number">2</span>, <span class="number">1</span>, <span class="number">1</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.group_by" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#1461-1463">source</a><h4 class="code-header">pub fn <a href="#method.group_by" class="fnname">group_by</a><F>(&self, pred: F) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/slice/iter/struct.GroupBy.html" title="struct core::slice::iter::GroupBy">GroupBy</a><'_, T, F><span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>T, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>T) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>,</span></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_group_by</code>)</span></div></span></summary><div class="docblock"><p>Returns an iterator over the slice producing non-overlapping runs |
| of elements using the predicate to separate them.</p> |
| <p>The predicate is called on two elements following themselves, |
| it means the predicate is called on <code>slice[0]</code> and <code>slice[1]</code> |
| then on <code>slice[1]</code> and <code>slice[2]</code> and so on.</p> |
| <h5 id="examples-40"><a href="#examples-40">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(slice_group_by)] |
| |
| </span><span class="kw">let </span>slice = <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">3</span>, <span class="number">3</span>, <span class="number">2</span>, <span class="number">2</span>, <span class="number">2</span>]; |
| |
| <span class="kw">let </span><span class="kw-2">mut </span>iter = slice.group_by(|a, b| a == b); |
| |
| <span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">Some</span>(<span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>][..])); |
| <span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">Some</span>(<span class="kw-2">&</span>[<span class="number">3</span>, <span class="number">3</span>][..])); |
| <span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">Some</span>(<span class="kw-2">&</span>[<span class="number">2</span>, <span class="number">2</span>, <span class="number">2</span>][..])); |
| <span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">None</span>);</code></pre></div> |
| <p>This method can be used to extract the sorted subslices:</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(slice_group_by)] |
| |
| </span><span class="kw">let </span>slice = <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>]; |
| |
| <span class="kw">let </span><span class="kw-2">mut </span>iter = slice.group_by(|a, b| a <= b); |
| |
| <span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">Some</span>(<span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>][..])); |
| <span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">Some</span>(<span class="kw-2">&</span>[<span class="number">2</span>, <span class="number">3</span>][..])); |
| <span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">Some</span>(<span class="kw-2">&</span>[<span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>][..])); |
| <span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">None</span>);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.group_by_mut" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#1506-1508">source</a><h4 class="code-header">pub fn <a href="#method.group_by_mut" class="fnname">group_by_mut</a><F>(&mut self, pred: F) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/slice/iter/struct.GroupByMut.html" title="struct core::slice::iter::GroupByMut">GroupByMut</a><'_, T, F><span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>T, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>T) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>,</span></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_group_by</code>)</span></div></span></summary><div class="docblock"><p>Returns an iterator over the slice producing non-overlapping mutable |
| runs of elements using the predicate to separate them.</p> |
| <p>The predicate is called on two elements following themselves, |
| it means the predicate is called on <code>slice[0]</code> and <code>slice[1]</code> |
| then on <code>slice[1]</code> and <code>slice[2]</code> and so on.</p> |
| <h5 id="examples-41"><a href="#examples-41">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(slice_group_by)] |
| |
| </span><span class="kw">let </span>slice = <span class="kw-2">&mut </span>[<span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">3</span>, <span class="number">3</span>, <span class="number">2</span>, <span class="number">2</span>, <span class="number">2</span>]; |
| |
| <span class="kw">let </span><span class="kw-2">mut </span>iter = slice.group_by_mut(|a, b| a == b); |
| |
| <span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">Some</span>(<span class="kw-2">&mut </span>[<span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>][..])); |
| <span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">Some</span>(<span class="kw-2">&mut </span>[<span class="number">3</span>, <span class="number">3</span>][..])); |
| <span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">Some</span>(<span class="kw-2">&mut </span>[<span class="number">2</span>, <span class="number">2</span>, <span class="number">2</span>][..])); |
| <span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">None</span>);</code></pre></div> |
| <p>This method can be used to extract the sorted subslices:</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(slice_group_by)] |
| |
| </span><span class="kw">let </span>slice = <span class="kw-2">&mut </span>[<span class="number">1</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>]; |
| |
| <span class="kw">let </span><span class="kw-2">mut </span>iter = slice.group_by_mut(|a, b| a <= b); |
| |
| <span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">Some</span>(<span class="kw-2">&mut </span>[<span class="number">1</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>][..])); |
| <span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">Some</span>(<span class="kw-2">&mut </span>[<span class="number">2</span>, <span class="number">3</span>][..])); |
| <span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">Some</span>(<span class="kw-2">&mut </span>[<span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>][..])); |
| <span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">None</span>);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.split_at" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#1551">source</a></span><h4 class="code-header">pub fn <a href="#method.split_at" class="fnname">split_at</a>(&self, mid: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> (&<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>, &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>)</h4></section></summary><div class="docblock"><p>Divides one slice into two at an index.</p> |
| <p>The first will contain all indices from <code>[0, mid)</code> (excluding |
| the index <code>mid</code> itself) and the second will contain all |
| indices from <code>[mid, len)</code> (excluding the index <code>len</code> itself).</p> |
| <h5 id="panics-23"><a href="#panics-23">Panics</a></h5> |
| <p>Panics if <code>mid > len</code>.</p> |
| <h5 id="examples-42"><a href="#examples-42">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>]; |
| |
| { |
| <span class="kw">let </span>(left, right) = v.split_at(<span class="number">0</span>); |
| <span class="macro">assert_eq!</span>(left, []); |
| <span class="macro">assert_eq!</span>(right, [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>]); |
| } |
| |
| { |
| <span class="kw">let </span>(left, right) = v.split_at(<span class="number">2</span>); |
| <span class="macro">assert_eq!</span>(left, [<span class="number">1</span>, <span class="number">2</span>]); |
| <span class="macro">assert_eq!</span>(right, [<span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>]); |
| } |
| |
| { |
| <span class="kw">let </span>(left, right) = v.split_at(<span class="number">6</span>); |
| <span class="macro">assert_eq!</span>(left, [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>]); |
| <span class="macro">assert_eq!</span>(right, []); |
| }</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.split_at_mut" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#1584">source</a></span><h4 class="code-header">pub fn <a href="#method.split_at_mut" class="fnname">split_at_mut</a>(&mut self, mid: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> (&mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>, &mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>)</h4></section></summary><div class="docblock"><p>Divides one mutable slice into two at an index.</p> |
| <p>The first will contain all indices from <code>[0, mid)</code> (excluding |
| the index <code>mid</code> itself) and the second will contain all |
| indices from <code>[mid, len)</code> (excluding the index <code>len</code> itself).</p> |
| <h5 id="panics-24"><a href="#panics-24">Panics</a></h5> |
| <p>Panics if <code>mid > len</code>.</p> |
| <h5 id="examples-43"><a href="#examples-43">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>v = [<span class="number">1</span>, <span class="number">0</span>, <span class="number">3</span>, <span class="number">0</span>, <span class="number">5</span>, <span class="number">6</span>]; |
| <span class="kw">let </span>(left, right) = v.split_at_mut(<span class="number">2</span>); |
| <span class="macro">assert_eq!</span>(left, [<span class="number">1</span>, <span class="number">0</span>]); |
| <span class="macro">assert_eq!</span>(right, [<span class="number">3</span>, <span class="number">0</span>, <span class="number">5</span>, <span class="number">6</span>]); |
| left[<span class="number">1</span>] = <span class="number">2</span>; |
| right[<span class="number">1</span>] = <span class="number">4</span>; |
| <span class="macro">assert_eq!</span>(v, [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.split_at_unchecked" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#1637">source</a><h4 class="code-header">pub unsafe fn <a href="#method.split_at_unchecked" class="fnname">split_at_unchecked</a>(&self, mid: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> (&<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>, &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>)</h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_split_at_unchecked</code>)</span></div></span></summary><div class="docblock"><p>Divides one slice into two at an index, without doing bounds checking.</p> |
| <p>The first will contain all indices from <code>[0, mid)</code> (excluding |
| the index <code>mid</code> itself) and the second will contain all |
| indices from <code>[mid, len)</code> (excluding the index <code>len</code> itself).</p> |
| <p>For a safe alternative see <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.split_at"><code>split_at</code></a>.</p> |
| <h5 id="safety-5"><a href="#safety-5">Safety</a></h5> |
| <p>Calling this method with an out-of-bounds index is <em><a href="https://doc.rust-lang.org/reference/behavior-considered-undefined.html">undefined behavior</a></em> |
| even if the resulting reference is not used. The caller has to ensure that |
| <code>0 <= mid <= self.len()</code>.</p> |
| <h5 id="examples-44"><a href="#examples-44">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(slice_split_at_unchecked)] |
| |
| </span><span class="kw">let </span>v = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>]; |
| |
| <span class="kw">unsafe </span>{ |
| <span class="kw">let </span>(left, right) = v.split_at_unchecked(<span class="number">0</span>); |
| <span class="macro">assert_eq!</span>(left, []); |
| <span class="macro">assert_eq!</span>(right, [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>]); |
| } |
| |
| <span class="kw">unsafe </span>{ |
| <span class="kw">let </span>(left, right) = v.split_at_unchecked(<span class="number">2</span>); |
| <span class="macro">assert_eq!</span>(left, [<span class="number">1</span>, <span class="number">2</span>]); |
| <span class="macro">assert_eq!</span>(right, [<span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>]); |
| } |
| |
| <span class="kw">unsafe </span>{ |
| <span class="kw">let </span>(left, right) = v.split_at_unchecked(<span class="number">6</span>); |
| <span class="macro">assert_eq!</span>(left, [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>]); |
| <span class="macro">assert_eq!</span>(right, []); |
| }</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.split_at_mut_unchecked" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#1686">source</a><h4 class="code-header">pub unsafe fn <a href="#method.split_at_mut_unchecked" class="fnname">split_at_mut_unchecked</a>(<br> &mut self,<br> mid: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a><br>) -> (&mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>, &mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>)</h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_split_at_unchecked</code>)</span></div></span></summary><div class="docblock"><p>Divides one mutable slice into two at an index, without doing bounds checking.</p> |
| <p>The first will contain all indices from <code>[0, mid)</code> (excluding |
| the index <code>mid</code> itself) and the second will contain all |
| indices from <code>[mid, len)</code> (excluding the index <code>len</code> itself).</p> |
| <p>For a safe alternative see <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.split_at_mut"><code>split_at_mut</code></a>.</p> |
| <h5 id="safety-6"><a href="#safety-6">Safety</a></h5> |
| <p>Calling this method with an out-of-bounds index is <em><a href="https://doc.rust-lang.org/reference/behavior-considered-undefined.html">undefined behavior</a></em> |
| even if the resulting reference is not used. The caller has to ensure that |
| <code>0 <= mid <= self.len()</code>.</p> |
| <h5 id="examples-45"><a href="#examples-45">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(slice_split_at_unchecked)] |
| |
| </span><span class="kw">let </span><span class="kw-2">mut </span>v = [<span class="number">1</span>, <span class="number">0</span>, <span class="number">3</span>, <span class="number">0</span>, <span class="number">5</span>, <span class="number">6</span>]; |
| <span class="comment">// scoped to restrict the lifetime of the borrows |
| </span><span class="kw">unsafe </span>{ |
| <span class="kw">let </span>(left, right) = v.split_at_mut_unchecked(<span class="number">2</span>); |
| <span class="macro">assert_eq!</span>(left, [<span class="number">1</span>, <span class="number">0</span>]); |
| <span class="macro">assert_eq!</span>(right, [<span class="number">3</span>, <span class="number">0</span>, <span class="number">5</span>, <span class="number">6</span>]); |
| left[<span class="number">1</span>] = <span class="number">2</span>; |
| right[<span class="number">1</span>] = <span class="number">4</span>; |
| } |
| <span class="macro">assert_eq!</span>(v, [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.split_array_ref" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#1739">source</a><h4 class="code-header">pub fn <a href="#method.split_array_ref" class="fnname">split_array_ref</a><const N: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>>(&self) -> (&<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.array.html">[T; N]</a>, &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>)</h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>split_array</code>)</span></div></span></summary><div class="docblock"><p>Divides one slice into an array and a remainder slice at an index.</p> |
| <p>The array will contain all indices from <code>[0, N)</code> (excluding |
| the index <code>N</code> itself) and the slice will contain all |
| indices from <code>[N, len)</code> (excluding the index <code>len</code> itself).</p> |
| <h5 id="panics-25"><a href="#panics-25">Panics</a></h5> |
| <p>Panics if <code>N > len</code>.</p> |
| <h5 id="examples-46"><a href="#examples-46">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(split_array)] |
| |
| </span><span class="kw">let </span>v = <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>][..]; |
| |
| { |
| <span class="kw">let </span>(left, right) = v.split_array_ref::<<span class="number">0</span>>(); |
| <span class="macro">assert_eq!</span>(left, <span class="kw-2">&</span>[]); |
| <span class="macro">assert_eq!</span>(right, [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>]); |
| } |
| |
| { |
| <span class="kw">let </span>(left, right) = v.split_array_ref::<<span class="number">2</span>>(); |
| <span class="macro">assert_eq!</span>(left, <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">2</span>]); |
| <span class="macro">assert_eq!</span>(right, [<span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>]); |
| } |
| |
| { |
| <span class="kw">let </span>(left, right) = v.split_array_ref::<<span class="number">6</span>>(); |
| <span class="macro">assert_eq!</span>(left, <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>]); |
| <span class="macro">assert_eq!</span>(right, []); |
| }</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.split_array_mut" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#1772">source</a><h4 class="code-header">pub fn <a href="#method.split_array_mut" class="fnname">split_array_mut</a><const N: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>>(&mut self) -> (&mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.array.html">[T; N]</a>, &mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>)</h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>split_array</code>)</span></div></span></summary><div class="docblock"><p>Divides one mutable slice into an array and a remainder slice at an index.</p> |
| <p>The array will contain all indices from <code>[0, N)</code> (excluding |
| the index <code>N</code> itself) and the slice will contain all |
| indices from <code>[N, len)</code> (excluding the index <code>len</code> itself).</p> |
| <h5 id="panics-26"><a href="#panics-26">Panics</a></h5> |
| <p>Panics if <code>N > len</code>.</p> |
| <h5 id="examples-47"><a href="#examples-47">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(split_array)] |
| |
| </span><span class="kw">let </span><span class="kw-2">mut </span>v = <span class="kw-2">&mut </span>[<span class="number">1</span>, <span class="number">0</span>, <span class="number">3</span>, <span class="number">0</span>, <span class="number">5</span>, <span class="number">6</span>][..]; |
| <span class="kw">let </span>(left, right) = v.split_array_mut::<<span class="number">2</span>>(); |
| <span class="macro">assert_eq!</span>(left, <span class="kw-2">&mut </span>[<span class="number">1</span>, <span class="number">0</span>]); |
| <span class="macro">assert_eq!</span>(right, [<span class="number">3</span>, <span class="number">0</span>, <span class="number">5</span>, <span class="number">6</span>]); |
| left[<span class="number">1</span>] = <span class="number">2</span>; |
| right[<span class="number">1</span>] = <span class="number">4</span>; |
| <span class="macro">assert_eq!</span>(v, [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.rsplit_array_ref" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#1817">source</a><h4 class="code-header">pub fn <a href="#method.rsplit_array_ref" class="fnname">rsplit_array_ref</a><const N: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>>(&self) -> (&<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>, &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.array.html">[T; N]</a>)</h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>split_array</code>)</span></div></span></summary><div class="docblock"><p>Divides one slice into an array and a remainder slice at an index from |
| the end.</p> |
| <p>The slice will contain all indices from <code>[0, len - N)</code> (excluding |
| the index <code>len - N</code> itself) and the array will contain all |
| indices from <code>[len - N, len)</code> (excluding the index <code>len</code> itself).</p> |
| <h5 id="panics-27"><a href="#panics-27">Panics</a></h5> |
| <p>Panics if <code>N > len</code>.</p> |
| <h5 id="examples-48"><a href="#examples-48">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(split_array)] |
| |
| </span><span class="kw">let </span>v = <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>][..]; |
| |
| { |
| <span class="kw">let </span>(left, right) = v.rsplit_array_ref::<<span class="number">0</span>>(); |
| <span class="macro">assert_eq!</span>(left, [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>]); |
| <span class="macro">assert_eq!</span>(right, <span class="kw-2">&</span>[]); |
| } |
| |
| { |
| <span class="kw">let </span>(left, right) = v.rsplit_array_ref::<<span class="number">2</span>>(); |
| <span class="macro">assert_eq!</span>(left, [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>]); |
| <span class="macro">assert_eq!</span>(right, <span class="kw-2">&</span>[<span class="number">5</span>, <span class="number">6</span>]); |
| } |
| |
| { |
| <span class="kw">let </span>(left, right) = v.rsplit_array_ref::<<span class="number">6</span>>(); |
| <span class="macro">assert_eq!</span>(left, []); |
| <span class="macro">assert_eq!</span>(right, <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>]); |
| }</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.rsplit_array_mut" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#1851">source</a><h4 class="code-header">pub fn <a href="#method.rsplit_array_mut" class="fnname">rsplit_array_mut</a><const N: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>>(&mut self) -> (&mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>, &mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.array.html">[T; N]</a>)</h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>split_array</code>)</span></div></span></summary><div class="docblock"><p>Divides one mutable slice into an array and a remainder slice at an |
| index from the end.</p> |
| <p>The slice will contain all indices from <code>[0, len - N)</code> (excluding |
| the index <code>N</code> itself) and the array will contain all |
| indices from <code>[len - N, len)</code> (excluding the index <code>len</code> itself).</p> |
| <h5 id="panics-28"><a href="#panics-28">Panics</a></h5> |
| <p>Panics if <code>N > len</code>.</p> |
| <h5 id="examples-49"><a href="#examples-49">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(split_array)] |
| |
| </span><span class="kw">let </span><span class="kw-2">mut </span>v = <span class="kw-2">&mut </span>[<span class="number">1</span>, <span class="number">0</span>, <span class="number">3</span>, <span class="number">0</span>, <span class="number">5</span>, <span class="number">6</span>][..]; |
| <span class="kw">let </span>(left, right) = v.rsplit_array_mut::<<span class="number">4</span>>(); |
| <span class="macro">assert_eq!</span>(left, [<span class="number">1</span>, <span class="number">0</span>]); |
| <span class="macro">assert_eq!</span>(right, <span class="kw-2">&mut </span>[<span class="number">3</span>, <span class="number">0</span>, <span class="number">5</span>, <span class="number">6</span>]); |
| left[<span class="number">1</span>] = <span class="number">2</span>; |
| right[<span class="number">1</span>] = <span class="number">4</span>; |
| <span class="macro">assert_eq!</span>(v, [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.split" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#1900-1902">source</a></span><h4 class="code-header">pub fn <a href="#method.split" class="fnname">split</a><F>(&self, pred: F) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/slice/iter/struct.Split.html" title="struct core::slice::iter::Split">Split</a><'_, T, F><span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>T) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>,</span></h4></section></summary><div class="docblock"><p>Returns an iterator over subslices separated by elements that match |
| <code>pred</code>. The matched element is not contained in the subslices.</p> |
| <h5 id="examples-50"><a href="#examples-50">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>slice = [<span class="number">10</span>, <span class="number">40</span>, <span class="number">33</span>, <span class="number">20</span>]; |
| <span class="kw">let </span><span class="kw-2">mut </span>iter = slice.split(|num| num % <span class="number">3 </span>== <span class="number">0</span>); |
| |
| <span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="number">10</span>, <span class="number">40</span>]); |
| <span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="number">20</span>]); |
| <span class="macro">assert!</span>(iter.next().is_none());</code></pre></div> |
| <p>If the first element is matched, an empty slice will be the first item |
| returned by the iterator. Similarly, if the last element in the slice |
| is matched, an empty slice will be the last item returned by the |
| iterator:</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>slice = [<span class="number">10</span>, <span class="number">40</span>, <span class="number">33</span>]; |
| <span class="kw">let </span><span class="kw-2">mut </span>iter = slice.split(|num| num % <span class="number">3 </span>== <span class="number">0</span>); |
| |
| <span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="number">10</span>, <span class="number">40</span>]); |
| <span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[]); |
| <span class="macro">assert!</span>(iter.next().is_none());</code></pre></div> |
| <p>If two matched elements are directly adjacent, an empty slice will be |
| present between them:</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>slice = [<span class="number">10</span>, <span class="number">6</span>, <span class="number">33</span>, <span class="number">20</span>]; |
| <span class="kw">let </span><span class="kw-2">mut </span>iter = slice.split(|num| num % <span class="number">3 </span>== <span class="number">0</span>); |
| |
| <span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="number">10</span>]); |
| <span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[]); |
| <span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="number">20</span>]); |
| <span class="macro">assert!</span>(iter.next().is_none());</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.split_mut" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#1922-1924">source</a></span><h4 class="code-header">pub fn <a href="#method.split_mut" class="fnname">split_mut</a><F>(&mut self, pred: F) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/slice/iter/struct.SplitMut.html" title="struct core::slice::iter::SplitMut">SplitMut</a><'_, T, F><span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>T) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>,</span></h4></section></summary><div class="docblock"><p>Returns an iterator over mutable subslices separated by elements that |
| match <code>pred</code>. The matched element is not contained in the subslices.</p> |
| <h5 id="examples-51"><a href="#examples-51">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>v = [<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>, <span class="number">20</span>, <span class="number">60</span>, <span class="number">50</span>]; |
| |
| <span class="kw">for </span>group <span class="kw">in </span>v.split_mut(|num| <span class="kw-2">*</span>num % <span class="number">3 </span>== <span class="number">0</span>) { |
| group[<span class="number">0</span>] = <span class="number">1</span>; |
| } |
| <span class="macro">assert_eq!</span>(v, [<span class="number">1</span>, <span class="number">40</span>, <span class="number">30</span>, <span class="number">1</span>, <span class="number">60</span>, <span class="number">1</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.split_inclusive" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.51.0">1.51.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#1958-1960">source</a></span><h4 class="code-header">pub fn <a href="#method.split_inclusive" class="fnname">split_inclusive</a><F>(&self, pred: F) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/slice/iter/struct.SplitInclusive.html" title="struct core::slice::iter::SplitInclusive">SplitInclusive</a><'_, T, F><span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>T) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>,</span></h4></section></summary><div class="docblock"><p>Returns an iterator over subslices separated by elements that match |
| <code>pred</code>. The matched element is contained in the end of the previous |
| subslice as a terminator.</p> |
| <h5 id="examples-52"><a href="#examples-52">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>slice = [<span class="number">10</span>, <span class="number">40</span>, <span class="number">33</span>, <span class="number">20</span>]; |
| <span class="kw">let </span><span class="kw-2">mut </span>iter = slice.split_inclusive(|num| num % <span class="number">3 </span>== <span class="number">0</span>); |
| |
| <span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="number">10</span>, <span class="number">40</span>, <span class="number">33</span>]); |
| <span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="number">20</span>]); |
| <span class="macro">assert!</span>(iter.next().is_none());</code></pre></div> |
| <p>If the last element of the slice is matched, |
| that element will be considered the terminator of the preceding slice. |
| That slice will be the last item returned by the iterator.</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>slice = [<span class="number">3</span>, <span class="number">10</span>, <span class="number">40</span>, <span class="number">33</span>]; |
| <span class="kw">let </span><span class="kw-2">mut </span>iter = slice.split_inclusive(|num| num % <span class="number">3 </span>== <span class="number">0</span>); |
| |
| <span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="number">3</span>]); |
| <span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="number">10</span>, <span class="number">40</span>, <span class="number">33</span>]); |
| <span class="macro">assert!</span>(iter.next().is_none());</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.split_inclusive_mut" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.51.0">1.51.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#1982-1984">source</a></span><h4 class="code-header">pub fn <a href="#method.split_inclusive_mut" class="fnname">split_inclusive_mut</a><F>(&mut self, pred: F) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/slice/iter/struct.SplitInclusiveMut.html" title="struct core::slice::iter::SplitInclusiveMut">SplitInclusiveMut</a><'_, T, F><span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>T) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>,</span></h4></section></summary><div class="docblock"><p>Returns an iterator over mutable subslices separated by elements that |
| match <code>pred</code>. The matched element is contained in the previous |
| subslice as a terminator.</p> |
| <h5 id="examples-53"><a href="#examples-53">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>v = [<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>, <span class="number">20</span>, <span class="number">60</span>, <span class="number">50</span>]; |
| |
| <span class="kw">for </span>group <span class="kw">in </span>v.split_inclusive_mut(|num| <span class="kw-2">*</span>num % <span class="number">3 </span>== <span class="number">0</span>) { |
| <span class="kw">let </span>terminator_idx = group.len()-<span class="number">1</span>; |
| group[terminator_idx] = <span class="number">1</span>; |
| } |
| <span class="macro">assert_eq!</span>(v, [<span class="number">10</span>, <span class="number">40</span>, <span class="number">1</span>, <span class="number">20</span>, <span class="number">1</span>, <span class="number">1</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.rsplit" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.27.0">1.27.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#2018-2020">source</a></span><h4 class="code-header">pub fn <a href="#method.rsplit" class="fnname">rsplit</a><F>(&self, pred: F) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/slice/iter/struct.RSplit.html" title="struct core::slice::iter::RSplit">RSplit</a><'_, T, F><span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>T) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>,</span></h4></section></summary><div class="docblock"><p>Returns an iterator over subslices separated by elements that match |
| <code>pred</code>, starting at the end of the slice and working backwards. |
| The matched element is not contained in the subslices.</p> |
| <h5 id="examples-54"><a href="#examples-54">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>slice = [<span class="number">11</span>, <span class="number">22</span>, <span class="number">33</span>, <span class="number">0</span>, <span class="number">44</span>, <span class="number">55</span>]; |
| <span class="kw">let </span><span class="kw-2">mut </span>iter = slice.rsplit(|num| <span class="kw-2">*</span>num == <span class="number">0</span>); |
| |
| <span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="number">44</span>, <span class="number">55</span>]); |
| <span class="macro">assert_eq!</span>(iter.next().unwrap(), <span class="kw-2">&</span>[<span class="number">11</span>, <span class="number">22</span>, <span class="number">33</span>]); |
| <span class="macro">assert_eq!</span>(iter.next(), <span class="prelude-val">None</span>);</code></pre></div> |
| <p>As with <code>split()</code>, if the first or last element is matched, an empty |
| slice will be the first (or last) item returned by the iterator.</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = <span class="kw-2">&</span>[<span class="number">0</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">5</span>, <span class="number">8</span>]; |
| <span class="kw">let </span><span class="kw-2">mut </span>it = v.rsplit(|n| <span class="kw-2">*</span>n % <span class="number">2 </span>== <span class="number">0</span>); |
| <span class="macro">assert_eq!</span>(it.next().unwrap(), <span class="kw-2">&</span>[]); |
| <span class="macro">assert_eq!</span>(it.next().unwrap(), <span class="kw-2">&</span>[<span class="number">3</span>, <span class="number">5</span>]); |
| <span class="macro">assert_eq!</span>(it.next().unwrap(), <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">1</span>]); |
| <span class="macro">assert_eq!</span>(it.next().unwrap(), <span class="kw-2">&</span>[]); |
| <span class="macro">assert_eq!</span>(it.next(), <span class="prelude-val">None</span>);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.rsplit_mut" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.27.0">1.27.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#2044-2046">source</a></span><h4 class="code-header">pub fn <a href="#method.rsplit_mut" class="fnname">rsplit_mut</a><F>(&mut self, pred: F) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/slice/iter/struct.RSplitMut.html" title="struct core::slice::iter::RSplitMut">RSplitMut</a><'_, T, F><span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>T) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>,</span></h4></section></summary><div class="docblock"><p>Returns an iterator over mutable subslices separated by elements that |
| match <code>pred</code>, starting at the end of the slice and working |
| backwards. The matched element is not contained in the subslices.</p> |
| <h5 id="examples-55"><a href="#examples-55">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>v = [<span class="number">100</span>, <span class="number">400</span>, <span class="number">300</span>, <span class="number">200</span>, <span class="number">600</span>, <span class="number">500</span>]; |
| |
| <span class="kw">let </span><span class="kw-2">mut </span>count = <span class="number">0</span>; |
| <span class="kw">for </span>group <span class="kw">in </span>v.rsplit_mut(|num| <span class="kw-2">*</span>num % <span class="number">3 </span>== <span class="number">0</span>) { |
| count += <span class="number">1</span>; |
| group[<span class="number">0</span>] = count; |
| } |
| <span class="macro">assert_eq!</span>(v, [<span class="number">3</span>, <span class="number">400</span>, <span class="number">300</span>, <span class="number">2</span>, <span class="number">600</span>, <span class="number">1</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.splitn" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#2072-2074">source</a></span><h4 class="code-header">pub fn <a href="#method.splitn" class="fnname">splitn</a><F>(&self, n: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>, pred: F) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/slice/iter/struct.SplitN.html" title="struct core::slice::iter::SplitN">SplitN</a><'_, T, F><span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>T) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>,</span></h4></section></summary><div class="docblock"><p>Returns an iterator over subslices separated by elements that match |
| <code>pred</code>, limited to returning at most <code>n</code> items. The matched element is |
| not contained in the subslices.</p> |
| <p>The last element returned, if any, will contain the remainder of the |
| slice.</p> |
| <h5 id="examples-56"><a href="#examples-56">Examples</a></h5> |
| <p>Print the slice split once by numbers divisible by 3 (i.e., <code>[10, 40]</code>, |
| <code>[20, 60, 50]</code>):</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = [<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>, <span class="number">20</span>, <span class="number">60</span>, <span class="number">50</span>]; |
| |
| <span class="kw">for </span>group <span class="kw">in </span>v.splitn(<span class="number">2</span>, |num| <span class="kw-2">*</span>num % <span class="number">3 </span>== <span class="number">0</span>) { |
| <span class="macro">println!</span>(<span class="string">"{group:?}"</span>); |
| }</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.splitn_mut" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#2098-2100">source</a></span><h4 class="code-header">pub fn <a href="#method.splitn_mut" class="fnname">splitn_mut</a><F>(&mut self, n: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>, pred: F) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/slice/iter/struct.SplitNMut.html" title="struct core::slice::iter::SplitNMut">SplitNMut</a><'_, T, F><span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>T) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>,</span></h4></section></summary><div class="docblock"><p>Returns an iterator over mutable subslices separated by elements that match |
| <code>pred</code>, limited to returning at most <code>n</code> items. The matched element is |
| not contained in the subslices.</p> |
| <p>The last element returned, if any, will contain the remainder of the |
| slice.</p> |
| <h5 id="examples-57"><a href="#examples-57">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>v = [<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>, <span class="number">20</span>, <span class="number">60</span>, <span class="number">50</span>]; |
| |
| <span class="kw">for </span>group <span class="kw">in </span>v.splitn_mut(<span class="number">2</span>, |num| <span class="kw-2">*</span>num % <span class="number">3 </span>== <span class="number">0</span>) { |
| group[<span class="number">0</span>] = <span class="number">1</span>; |
| } |
| <span class="macro">assert_eq!</span>(v, [<span class="number">1</span>, <span class="number">40</span>, <span class="number">30</span>, <span class="number">1</span>, <span class="number">60</span>, <span class="number">50</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.rsplitn" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#2127-2129">source</a></span><h4 class="code-header">pub fn <a href="#method.rsplitn" class="fnname">rsplitn</a><F>(&self, n: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>, pred: F) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/slice/iter/struct.RSplitN.html" title="struct core::slice::iter::RSplitN">RSplitN</a><'_, T, F><span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>T) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>,</span></h4></section></summary><div class="docblock"><p>Returns an iterator over subslices separated by elements that match |
| <code>pred</code> limited to returning at most <code>n</code> items. This starts at the end of |
| the slice and works backwards. The matched element is not contained in |
| the subslices.</p> |
| <p>The last element returned, if any, will contain the remainder of the |
| slice.</p> |
| <h5 id="examples-58"><a href="#examples-58">Examples</a></h5> |
| <p>Print the slice split once, starting from the end, by numbers divisible |
| by 3 (i.e., <code>[50]</code>, <code>[10, 40, 30, 20]</code>):</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = [<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>, <span class="number">20</span>, <span class="number">60</span>, <span class="number">50</span>]; |
| |
| <span class="kw">for </span>group <span class="kw">in </span>v.rsplitn(<span class="number">2</span>, |num| <span class="kw-2">*</span>num % <span class="number">3 </span>== <span class="number">0</span>) { |
| <span class="macro">println!</span>(<span class="string">"{group:?}"</span>); |
| }</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.rsplitn_mut" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#2154-2156">source</a></span><h4 class="code-header">pub fn <a href="#method.rsplitn_mut" class="fnname">rsplitn_mut</a><F>(&mut self, n: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>, pred: F) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/slice/iter/struct.RSplitNMut.html" title="struct core::slice::iter::RSplitNMut">RSplitNMut</a><'_, T, F><span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>T) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>,</span></h4></section></summary><div class="docblock"><p>Returns an iterator over subslices separated by elements that match |
| <code>pred</code> limited to returning at most <code>n</code> items. This starts at the end of |
| the slice and works backwards. The matched element is not contained in |
| the subslices.</p> |
| <p>The last element returned, if any, will contain the remainder of the |
| slice.</p> |
| <h5 id="examples-59"><a href="#examples-59">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>s = [<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>, <span class="number">20</span>, <span class="number">60</span>, <span class="number">50</span>]; |
| |
| <span class="kw">for </span>group <span class="kw">in </span>s.rsplitn_mut(<span class="number">2</span>, |num| <span class="kw-2">*</span>num % <span class="number">3 </span>== <span class="number">0</span>) { |
| group[<span class="number">0</span>] = <span class="number">1</span>; |
| } |
| <span class="macro">assert_eq!</span>(s, [<span class="number">1</span>, <span class="number">40</span>, <span class="number">30</span>, <span class="number">20</span>, <span class="number">60</span>, <span class="number">1</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.contains" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#2189-2191">source</a></span><h4 class="code-header">pub fn <a href="#method.contains" class="fnname">contains</a>(&self, x: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>T) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a><span class="where fmt-newline">where<br> T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a><T>,</span></h4></section></summary><div class="docblock"><p>Returns <code>true</code> if the slice contains an element with the given value.</p> |
| <p>This operation is <em>O</em>(<em>n</em>).</p> |
| <p>Note that if you have a sorted slice, <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.binary_search"><code>binary_search</code></a> may be faster.</p> |
| <h5 id="examples-60"><a href="#examples-60">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = [<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>]; |
| <span class="macro">assert!</span>(v.contains(<span class="kw-2">&</span><span class="number">30</span>)); |
| <span class="macro">assert!</span>(!v.contains(<span class="kw-2">&</span><span class="number">50</span>));</code></pre></div> |
| <p>If you do not have a <code>&T</code>, but some other value that you can compare |
| with one (for example, <code>String</code> implements <code>PartialEq<str></code>), you can |
| use <code>iter().any</code>:</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = [String::from(<span class="string">"hello"</span>), String::from(<span class="string">"world"</span>)]; <span class="comment">// slice of `String` |
| </span><span class="macro">assert!</span>(v.iter().any(|e| e == <span class="string">"hello"</span>)); <span class="comment">// search with `&str` |
| </span><span class="macro">assert!</span>(!v.iter().any(|e| e == <span class="string">"hi"</span>));</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.starts_with" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#2218-2220">source</a></span><h4 class="code-header">pub fn <a href="#method.starts_with" class="fnname">starts_with</a>(&self, needle: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a><span class="where fmt-newline">where<br> T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a><T>,</span></h4></section></summary><div class="docblock"><p>Returns <code>true</code> if <code>needle</code> is a prefix of the slice.</p> |
| <h5 id="examples-61"><a href="#examples-61">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = [<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>]; |
| <span class="macro">assert!</span>(v.starts_with(<span class="kw-2">&</span>[<span class="number">10</span>])); |
| <span class="macro">assert!</span>(v.starts_with(<span class="kw-2">&</span>[<span class="number">10</span>, <span class="number">40</span>])); |
| <span class="macro">assert!</span>(!v.starts_with(<span class="kw-2">&</span>[<span class="number">50</span>])); |
| <span class="macro">assert!</span>(!v.starts_with(<span class="kw-2">&</span>[<span class="number">10</span>, <span class="number">50</span>]));</code></pre></div> |
| <p>Always returns <code>true</code> if <code>needle</code> is an empty slice:</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = <span class="kw-2">&</span>[<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>]; |
| <span class="macro">assert!</span>(v.starts_with(<span class="kw-2">&</span>[])); |
| <span class="kw">let </span>v: <span class="kw-2">&</span>[u8] = <span class="kw-2">&</span>[]; |
| <span class="macro">assert!</span>(v.starts_with(<span class="kw-2">&</span>[]));</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.ends_with" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#2248-2250">source</a></span><h4 class="code-header">pub fn <a href="#method.ends_with" class="fnname">ends_with</a>(&self, needle: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a><span class="where fmt-newline">where<br> T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a><T>,</span></h4></section></summary><div class="docblock"><p>Returns <code>true</code> if <code>needle</code> is a suffix of the slice.</p> |
| <h5 id="examples-62"><a href="#examples-62">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = [<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>]; |
| <span class="macro">assert!</span>(v.ends_with(<span class="kw-2">&</span>[<span class="number">30</span>])); |
| <span class="macro">assert!</span>(v.ends_with(<span class="kw-2">&</span>[<span class="number">40</span>, <span class="number">30</span>])); |
| <span class="macro">assert!</span>(!v.ends_with(<span class="kw-2">&</span>[<span class="number">50</span>])); |
| <span class="macro">assert!</span>(!v.ends_with(<span class="kw-2">&</span>[<span class="number">50</span>, <span class="number">30</span>]));</code></pre></div> |
| <p>Always returns <code>true</code> if <code>needle</code> is an empty slice:</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = <span class="kw-2">&</span>[<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>]; |
| <span class="macro">assert!</span>(v.ends_with(<span class="kw-2">&</span>[])); |
| <span class="kw">let </span>v: <span class="kw-2">&</span>[u8] = <span class="kw-2">&</span>[]; |
| <span class="macro">assert!</span>(v.ends_with(<span class="kw-2">&</span>[]));</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.strip_prefix" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.51.0">1.51.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#2278-2280">source</a></span><h4 class="code-header">pub fn <a href="#method.strip_prefix" class="fnname">strip_prefix</a><P>(&self, prefix: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>P) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><&<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>><span class="where fmt-newline">where<br> P: <a class="trait" href="https://doc.rust-lang.org/nightly/core/slice/trait.SlicePattern.html" title="trait core::slice::SlicePattern">SlicePattern</a><Item = T> + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,<br> T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a><T>,</span></h4></section></summary><div class="docblock"><p>Returns a subslice with the prefix removed.</p> |
| <p>If the slice starts with <code>prefix</code>, returns the subslice after the prefix, wrapped in <code>Some</code>. |
| If <code>prefix</code> is empty, simply returns the original slice.</p> |
| <p>If the slice does not start with <code>prefix</code>, returns <code>None</code>.</p> |
| <h5 id="examples-63"><a href="#examples-63">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = <span class="kw-2">&</span>[<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>]; |
| <span class="macro">assert_eq!</span>(v.strip_prefix(<span class="kw-2">&</span>[<span class="number">10</span>]), <span class="prelude-val">Some</span>(<span class="kw-2">&</span>[<span class="number">40</span>, <span class="number">30</span>][..])); |
| <span class="macro">assert_eq!</span>(v.strip_prefix(<span class="kw-2">&</span>[<span class="number">10</span>, <span class="number">40</span>]), <span class="prelude-val">Some</span>(<span class="kw-2">&</span>[<span class="number">30</span>][..])); |
| <span class="macro">assert_eq!</span>(v.strip_prefix(<span class="kw-2">&</span>[<span class="number">50</span>]), <span class="prelude-val">None</span>); |
| <span class="macro">assert_eq!</span>(v.strip_prefix(<span class="kw-2">&</span>[<span class="number">10</span>, <span class="number">50</span>]), <span class="prelude-val">None</span>); |
| |
| <span class="kw">let </span>prefix : <span class="kw-2">&</span>str = <span class="string">"he"</span>; |
| <span class="macro">assert_eq!</span>(<span class="string">b"hello"</span>.strip_prefix(prefix.as_bytes()), |
| <span class="prelude-val">Some</span>(<span class="string">b"llo"</span>.as_ref()));</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.strip_suffix" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.51.0">1.51.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#2312-2314">source</a></span><h4 class="code-header">pub fn <a href="#method.strip_suffix" class="fnname">strip_suffix</a><P>(&self, suffix: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>P) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><&<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>><span class="where fmt-newline">where<br> P: <a class="trait" href="https://doc.rust-lang.org/nightly/core/slice/trait.SlicePattern.html" title="trait core::slice::SlicePattern">SlicePattern</a><Item = T> + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,<br> T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a><T>,</span></h4></section></summary><div class="docblock"><p>Returns a subslice with the suffix removed.</p> |
| <p>If the slice ends with <code>suffix</code>, returns the subslice before the suffix, wrapped in <code>Some</code>. |
| If <code>suffix</code> is empty, simply returns the original slice.</p> |
| <p>If the slice does not end with <code>suffix</code>, returns <code>None</code>.</p> |
| <h5 id="examples-64"><a href="#examples-64">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = <span class="kw-2">&</span>[<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>]; |
| <span class="macro">assert_eq!</span>(v.strip_suffix(<span class="kw-2">&</span>[<span class="number">30</span>]), <span class="prelude-val">Some</span>(<span class="kw-2">&</span>[<span class="number">10</span>, <span class="number">40</span>][..])); |
| <span class="macro">assert_eq!</span>(v.strip_suffix(<span class="kw-2">&</span>[<span class="number">40</span>, <span class="number">30</span>]), <span class="prelude-val">Some</span>(<span class="kw-2">&</span>[<span class="number">10</span>][..])); |
| <span class="macro">assert_eq!</span>(v.strip_suffix(<span class="kw-2">&</span>[<span class="number">50</span>]), <span class="prelude-val">None</span>); |
| <span class="macro">assert_eq!</span>(v.strip_suffix(<span class="kw-2">&</span>[<span class="number">50</span>, <span class="number">30</span>]), <span class="prelude-val">None</span>);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.binary_search" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#2396-2398">source</a></span><h4 class="code-header">pub fn <a href="#method.binary_search" class="fnname">binary_search</a>(&self, x: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>T) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>><span class="where fmt-newline">where<br> T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html" title="trait core::cmp::Ord">Ord</a>,</span></h4></section></summary><div class="docblock"><p>Binary searches this slice for a given element. |
| This behaves similarly to <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.contains"><code>contains</code></a> if this slice is sorted.</p> |
| <p>If the value is found then <a href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html#variant.Ok" title="Result::Ok"><code>Result::Ok</code></a> is returned, containing the |
| index of the matching element. If there are multiple matches, then any |
| one of the matches could be returned. The index is chosen |
| deterministically, but is subject to change in future versions of Rust. |
| If the value is not found then <a href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html#variant.Err" title="Result::Err"><code>Result::Err</code></a> is returned, containing |
| the index where a matching element could be inserted while maintaining |
| sorted order.</p> |
| <p>See also <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.binary_search_by"><code>binary_search_by</code></a>, <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.binary_search_by_key"><code>binary_search_by_key</code></a>, and <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.partition_point"><code>partition_point</code></a>.</p> |
| <h5 id="examples-65"><a href="#examples-65">Examples</a></h5> |
| <p>Looks up a series of four elements. The first is found, with a |
| uniquely determined position; the second and third are not |
| found; the fourth could match any position in <code>[1, 4]</code>.</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>s = [<span class="number">0</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">5</span>, <span class="number">8</span>, <span class="number">13</span>, <span class="number">21</span>, <span class="number">34</span>, <span class="number">55</span>]; |
| |
| <span class="macro">assert_eq!</span>(s.binary_search(<span class="kw-2">&</span><span class="number">13</span>), <span class="prelude-val">Ok</span>(<span class="number">9</span>)); |
| <span class="macro">assert_eq!</span>(s.binary_search(<span class="kw-2">&</span><span class="number">4</span>), <span class="prelude-val">Err</span>(<span class="number">7</span>)); |
| <span class="macro">assert_eq!</span>(s.binary_search(<span class="kw-2">&</span><span class="number">100</span>), <span class="prelude-val">Err</span>(<span class="number">13</span>)); |
| <span class="kw">let </span>r = s.binary_search(<span class="kw-2">&</span><span class="number">1</span>); |
| <span class="macro">assert!</span>(<span class="kw">match </span>r { <span class="prelude-val">Ok</span>(<span class="number">1</span>..=<span class="number">4</span>) => <span class="bool-val">true</span>, <span class="kw">_ </span>=> <span class="bool-val">false</span>, });</code></pre></div> |
| <p>If you want to find that whole <em>range</em> of matching items, rather than |
| an arbitrary matching one, that can be done using <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.partition_point"><code>partition_point</code></a>:</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>s = [<span class="number">0</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">5</span>, <span class="number">8</span>, <span class="number">13</span>, <span class="number">21</span>, <span class="number">34</span>, <span class="number">55</span>]; |
| |
| <span class="kw">let </span>low = s.partition_point(|x| x < <span class="kw-2">&</span><span class="number">1</span>); |
| <span class="macro">assert_eq!</span>(low, <span class="number">1</span>); |
| <span class="kw">let </span>high = s.partition_point(|x| x <= <span class="kw-2">&</span><span class="number">1</span>); |
| <span class="macro">assert_eq!</span>(high, <span class="number">5</span>); |
| <span class="kw">let </span>r = s.binary_search(<span class="kw-2">&</span><span class="number">1</span>); |
| <span class="macro">assert!</span>((low..high).contains(<span class="kw-2">&</span>r.unwrap())); |
| |
| <span class="macro">assert!</span>(s[..low].iter().all(|<span class="kw-2">&</span>x| x < <span class="number">1</span>)); |
| <span class="macro">assert!</span>(s[low..high].iter().all(|<span class="kw-2">&</span>x| x == <span class="number">1</span>)); |
| <span class="macro">assert!</span>(s[high..].iter().all(|<span class="kw-2">&</span>x| x > <span class="number">1</span>)); |
| |
| <span class="comment">// For something not found, the "range" of equal items is empty |
| </span><span class="macro">assert_eq!</span>(s.partition_point(|x| x < <span class="kw-2">&</span><span class="number">11</span>), <span class="number">9</span>); |
| <span class="macro">assert_eq!</span>(s.partition_point(|x| x <= <span class="kw-2">&</span><span class="number">11</span>), <span class="number">9</span>); |
| <span class="macro">assert_eq!</span>(s.binary_search(<span class="kw-2">&</span><span class="number">11</span>), <span class="prelude-val">Err</span>(<span class="number">9</span>));</code></pre></div> |
| <p>If you want to insert an item to a sorted vector, while maintaining |
| sort order, consider using <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.partition_point"><code>partition_point</code></a>:</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>s = <span class="macro">vec!</span>[<span class="number">0</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">5</span>, <span class="number">8</span>, <span class="number">13</span>, <span class="number">21</span>, <span class="number">34</span>, <span class="number">55</span>]; |
| <span class="kw">let </span>num = <span class="number">42</span>; |
| <span class="kw">let </span>idx = s.partition_point(|<span class="kw-2">&</span>x| x < num); |
| <span class="comment">// The above is equivalent to `let idx = s.binary_search(&num).unwrap_or_else(|x| x);` |
| </span>s.insert(idx, num); |
| <span class="macro">assert_eq!</span>(s, [<span class="number">0</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">5</span>, <span class="number">8</span>, <span class="number">13</span>, <span class="number">21</span>, <span class="number">34</span>, <span class="number">42</span>, <span class="number">55</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.binary_search_by" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#2447-2449">source</a></span><h4 class="code-header">pub fn <a href="#method.binary_search_by" class="fnname">binary_search_by</a><'a, F>(&'a self, f: F) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>><span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&'a </a>T) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/cmp/enum.Ordering.html" title="enum core::cmp::Ordering">Ordering</a>,</span></h4></section></summary><div class="docblock"><p>Binary searches this slice with a comparator function. |
| This behaves similarly to <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.contains"><code>contains</code></a> if this slice is sorted.</p> |
| <p>The comparator function should implement an order consistent |
| with the sort order of the underlying slice, returning an |
| order code that indicates whether its argument is <code>Less</code>, |
| <code>Equal</code> or <code>Greater</code> the desired target.</p> |
| <p>If the value is found then <a href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html#variant.Ok" title="Result::Ok"><code>Result::Ok</code></a> is returned, containing the |
| index of the matching element. If there are multiple matches, then any |
| one of the matches could be returned. The index is chosen |
| deterministically, but is subject to change in future versions of Rust. |
| If the value is not found then <a href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html#variant.Err" title="Result::Err"><code>Result::Err</code></a> is returned, containing |
| the index where a matching element could be inserted while maintaining |
| sorted order.</p> |
| <p>See also <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.binary_search"><code>binary_search</code></a>, <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.binary_search_by_key"><code>binary_search_by_key</code></a>, and <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.partition_point"><code>partition_point</code></a>.</p> |
| <h5 id="examples-66"><a href="#examples-66">Examples</a></h5> |
| <p>Looks up a series of four elements. The first is found, with a |
| uniquely determined position; the second and third are not |
| found; the fourth could match any position in <code>[1, 4]</code>.</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>s = [<span class="number">0</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">5</span>, <span class="number">8</span>, <span class="number">13</span>, <span class="number">21</span>, <span class="number">34</span>, <span class="number">55</span>]; |
| |
| <span class="kw">let </span>seek = <span class="number">13</span>; |
| <span class="macro">assert_eq!</span>(s.binary_search_by(|probe| probe.cmp(<span class="kw-2">&</span>seek)), <span class="prelude-val">Ok</span>(<span class="number">9</span>)); |
| <span class="kw">let </span>seek = <span class="number">4</span>; |
| <span class="macro">assert_eq!</span>(s.binary_search_by(|probe| probe.cmp(<span class="kw-2">&</span>seek)), <span class="prelude-val">Err</span>(<span class="number">7</span>)); |
| <span class="kw">let </span>seek = <span class="number">100</span>; |
| <span class="macro">assert_eq!</span>(s.binary_search_by(|probe| probe.cmp(<span class="kw-2">&</span>seek)), <span class="prelude-val">Err</span>(<span class="number">13</span>)); |
| <span class="kw">let </span>seek = <span class="number">1</span>; |
| <span class="kw">let </span>r = s.binary_search_by(|probe| probe.cmp(<span class="kw-2">&</span>seek)); |
| <span class="macro">assert!</span>(<span class="kw">match </span>r { <span class="prelude-val">Ok</span>(<span class="number">1</span>..=<span class="number">4</span>) => <span class="bool-val">true</span>, <span class="kw">_ </span>=> <span class="bool-val">false</span>, });</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.binary_search_by_key" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.10.0">1.10.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#2536-2539">source</a></span><h4 class="code-header">pub fn <a href="#method.binary_search_by_key" class="fnname">binary_search_by_key</a><'a, B, F>(<br> &'a self,<br> b: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>B,<br> f: F<br>) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>><span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&'a </a>T) -> B,<br> B: <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html" title="trait core::cmp::Ord">Ord</a>,</span></h4></section></summary><div class="docblock"><p>Binary searches this slice with a key extraction function. |
| This behaves similarly to <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.contains"><code>contains</code></a> if this slice is sorted.</p> |
| <p>Assumes that the slice is sorted by the key, for instance with |
| <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.sort_by_key"><code>sort_by_key</code></a> using the same key extraction function.</p> |
| <p>If the value is found then <a href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html#variant.Ok" title="Result::Ok"><code>Result::Ok</code></a> is returned, containing the |
| index of the matching element. If there are multiple matches, then any |
| one of the matches could be returned. The index is chosen |
| deterministically, but is subject to change in future versions of Rust. |
| If the value is not found then <a href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html#variant.Err" title="Result::Err"><code>Result::Err</code></a> is returned, containing |
| the index where a matching element could be inserted while maintaining |
| sorted order.</p> |
| <p>See also <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.binary_search"><code>binary_search</code></a>, <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.binary_search_by"><code>binary_search_by</code></a>, and <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.partition_point"><code>partition_point</code></a>.</p> |
| <h5 id="examples-67"><a href="#examples-67">Examples</a></h5> |
| <p>Looks up a series of four elements in a slice of pairs sorted by |
| their second elements. The first is found, with a uniquely |
| determined position; the second and third are not found; the |
| fourth could match any position in <code>[1, 4]</code>.</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>s = [(<span class="number">0</span>, <span class="number">0</span>), (<span class="number">2</span>, <span class="number">1</span>), (<span class="number">4</span>, <span class="number">1</span>), (<span class="number">5</span>, <span class="number">1</span>), (<span class="number">3</span>, <span class="number">1</span>), |
| (<span class="number">1</span>, <span class="number">2</span>), (<span class="number">2</span>, <span class="number">3</span>), (<span class="number">4</span>, <span class="number">5</span>), (<span class="number">5</span>, <span class="number">8</span>), (<span class="number">3</span>, <span class="number">13</span>), |
| (<span class="number">1</span>, <span class="number">21</span>), (<span class="number">2</span>, <span class="number">34</span>), (<span class="number">4</span>, <span class="number">55</span>)]; |
| |
| <span class="macro">assert_eq!</span>(s.binary_search_by_key(<span class="kw-2">&</span><span class="number">13</span>, |<span class="kw-2">&</span>(a, b)| b), <span class="prelude-val">Ok</span>(<span class="number">9</span>)); |
| <span class="macro">assert_eq!</span>(s.binary_search_by_key(<span class="kw-2">&</span><span class="number">4</span>, |<span class="kw-2">&</span>(a, b)| b), <span class="prelude-val">Err</span>(<span class="number">7</span>)); |
| <span class="macro">assert_eq!</span>(s.binary_search_by_key(<span class="kw-2">&</span><span class="number">100</span>, |<span class="kw-2">&</span>(a, b)| b), <span class="prelude-val">Err</span>(<span class="number">13</span>)); |
| <span class="kw">let </span>r = s.binary_search_by_key(<span class="kw-2">&</span><span class="number">1</span>, |<span class="kw-2">&</span>(a, b)| b); |
| <span class="macro">assert!</span>(<span class="kw">match </span>r { <span class="prelude-val">Ok</span>(<span class="number">1</span>..=<span class="number">4</span>) => <span class="bool-val">true</span>, <span class="kw">_ </span>=> <span class="bool-val">false</span>, });</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.sort_unstable" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.20.0">1.20.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#2572-2574">source</a></span><h4 class="code-header">pub fn <a href="#method.sort_unstable" class="fnname">sort_unstable</a>(&mut self)<span class="where fmt-newline">where<br> T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html" title="trait core::cmp::Ord">Ord</a>,</span></h4></section></summary><div class="docblock"><p>Sorts the slice, but might not preserve the order of equal elements.</p> |
| <p>This sort is unstable (i.e., may reorder equal elements), in-place |
| (i.e., does not allocate), and <em>O</em>(<em>n</em> * log(<em>n</em>)) worst-case.</p> |
| <h5 id="current-implementation"><a href="#current-implementation">Current implementation</a></h5> |
| <p>The current algorithm is based on <a href="https://github.com/orlp/pdqsort">pattern-defeating quicksort</a> by Orson Peters, |
| which combines the fast average case of randomized quicksort with the fast worst case of |
| heapsort, while achieving linear time on slices with certain patterns. It uses some |
| randomization to avoid degenerate cases, but with a fixed seed to always provide |
| deterministic behavior.</p> |
| <p>It is typically faster than stable sorting, except in a few special cases, e.g., when the |
| slice consists of several concatenated sorted sequences.</p> |
| <h5 id="examples-68"><a href="#examples-68">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>v = [-<span class="number">5</span>, <span class="number">4</span>, <span class="number">1</span>, -<span class="number">3</span>, <span class="number">2</span>]; |
| |
| v.sort_unstable(); |
| <span class="macro">assert!</span>(v == [-<span class="number">5</span>, -<span class="number">3</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">4</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.sort_unstable_by" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.20.0">1.20.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#2627-2629">source</a></span><h4 class="code-header">pub fn <a href="#method.sort_unstable_by" class="fnname">sort_unstable_by</a><F>(&mut self, compare: F)<span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>T, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>T) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/cmp/enum.Ordering.html" title="enum core::cmp::Ordering">Ordering</a>,</span></h4></section></summary><div class="docblock"><p>Sorts the slice with a comparator function, but might not preserve the order of equal |
| elements.</p> |
| <p>This sort is unstable (i.e., may reorder equal elements), in-place |
| (i.e., does not allocate), and <em>O</em>(<em>n</em> * log(<em>n</em>)) worst-case.</p> |
| <p>The comparator function must define a total ordering for the elements in the slice. If |
| the ordering is not total, the order of the elements is unspecified. An order is a |
| total order if it is (for all <code>a</code>, <code>b</code> and <code>c</code>):</p> |
| <ul> |
| <li>total and antisymmetric: exactly one of <code>a < b</code>, <code>a == b</code> or <code>a > b</code> is true, and</li> |
| <li>transitive, <code>a < b</code> and <code>b < c</code> implies <code>a < c</code>. The same must hold for both <code>==</code> and <code>></code>.</li> |
| </ul> |
| <p>For example, while <a href="https://doc.rust-lang.org/nightly/std/primitive.f64.html" title="f64"><code>f64</code></a> doesn’t implement <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html" title="Ord"><code>Ord</code></a> because <code>NaN != NaN</code>, we can use |
| <code>partial_cmp</code> as our sort function when we know the slice doesn’t contain a <code>NaN</code>.</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>floats = [<span class="number">5f64</span>, <span class="number">4.0</span>, <span class="number">1.0</span>, <span class="number">3.0</span>, <span class="number">2.0</span>]; |
| floats.sort_unstable_by(|a, b| a.partial_cmp(b).unwrap()); |
| <span class="macro">assert_eq!</span>(floats, [<span class="number">1.0</span>, <span class="number">2.0</span>, <span class="number">3.0</span>, <span class="number">4.0</span>, <span class="number">5.0</span>]);</code></pre></div> |
| <h5 id="current-implementation-1"><a href="#current-implementation-1">Current implementation</a></h5> |
| <p>The current algorithm is based on <a href="https://github.com/orlp/pdqsort">pattern-defeating quicksort</a> by Orson Peters, |
| which combines the fast average case of randomized quicksort with the fast worst case of |
| heapsort, while achieving linear time on slices with certain patterns. It uses some |
| randomization to avoid degenerate cases, but with a fixed seed to always provide |
| deterministic behavior.</p> |
| <p>It is typically faster than stable sorting, except in a few special cases, e.g., when the |
| slice consists of several concatenated sorted sequences.</p> |
| <h5 id="examples-69"><a href="#examples-69">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>v = [<span class="number">5</span>, <span class="number">4</span>, <span class="number">1</span>, <span class="number">3</span>, <span class="number">2</span>]; |
| v.sort_unstable_by(|a, b| a.cmp(b)); |
| <span class="macro">assert!</span>(v == [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>]); |
| |
| <span class="comment">// reverse sorting |
| </span>v.sort_unstable_by(|a, b| b.cmp(a)); |
| <span class="macro">assert!</span>(v == [<span class="number">5</span>, <span class="number">4</span>, <span class="number">3</span>, <span class="number">2</span>, <span class="number">1</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.sort_unstable_by_key" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.20.0">1.20.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#2665-2668">source</a></span><h4 class="code-header">pub fn <a href="#method.sort_unstable_by_key" class="fnname">sort_unstable_by_key</a><K, F>(&mut self, f: F)<span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>T) -> K,<br> K: <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html" title="trait core::cmp::Ord">Ord</a>,</span></h4></section></summary><div class="docblock"><p>Sorts the slice with a key extraction function, but might not preserve the order of equal |
| elements.</p> |
| <p>This sort is unstable (i.e., may reorder equal elements), in-place |
| (i.e., does not allocate), and <em>O</em>(m * <em>n</em> * log(<em>n</em>)) worst-case, where the key function is |
| <em>O</em>(<em>m</em>).</p> |
| <h5 id="current-implementation-2"><a href="#current-implementation-2">Current implementation</a></h5> |
| <p>The current algorithm is based on <a href="https://github.com/orlp/pdqsort">pattern-defeating quicksort</a> by Orson Peters, |
| which combines the fast average case of randomized quicksort with the fast worst case of |
| heapsort, while achieving linear time on slices with certain patterns. It uses some |
| randomization to avoid degenerate cases, but with a fixed seed to always provide |
| deterministic behavior.</p> |
| <p>Due to its key calling strategy, <a href="#method.sort_unstable_by_key"><code>sort_unstable_by_key</code></a> |
| is likely to be slower than <a href="#method.sort_by_cached_key"><code>sort_by_cached_key</code></a> in |
| cases where the key function is expensive.</p> |
| <h5 id="examples-70"><a href="#examples-70">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>v = [-<span class="number">5i32</span>, <span class="number">4</span>, <span class="number">1</span>, -<span class="number">3</span>, <span class="number">2</span>]; |
| |
| v.sort_unstable_by_key(|k| k.abs()); |
| <span class="macro">assert!</span>(v == [<span class="number">1</span>, <span class="number">2</span>, -<span class="number">3</span>, <span class="number">4</span>, -<span class="number">5</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.select_nth_unstable" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.49.0">1.49.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#2712-2714">source</a></span><h4 class="code-header">pub fn <a href="#method.select_nth_unstable" class="fnname">select_nth_unstable</a>(<br> &mut self,<br> index: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a><br>) -> (&mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&mut </a>T, &mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>)<span class="where fmt-newline">where<br> T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html" title="trait core::cmp::Ord">Ord</a>,</span></h4></section></summary><div class="docblock"><p>Reorder the slice such that the element at <code>index</code> is at its final sorted position.</p> |
| <p>This reordering has the additional property that any value at position <code>i < index</code> will be |
| less than or equal to any value at a position <code>j > index</code>. Additionally, this reordering is |
| unstable (i.e. any number of equal elements may end up at position <code>index</code>), in-place |
| (i.e. does not allocate), and <em>O</em>(<em>n</em>) worst-case. This function is also/ known as “kth |
| element” in other libraries. It returns a triplet of the following from the reordered slice: |
| the subslice prior to <code>index</code>, the element at <code>index</code>, and the subslice after <code>index</code>; |
| accordingly, the values in those two subslices will respectively all be less-than-or-equal-to |
| and greater-than-or-equal-to the value of the element at <code>index</code>.</p> |
| <h5 id="current-implementation-3"><a href="#current-implementation-3">Current implementation</a></h5> |
| <p>The current algorithm is based on the quickselect portion of the same quicksort algorithm |
| used for <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.sort_unstable"><code>sort_unstable</code></a>.</p> |
| <h5 id="panics-29"><a href="#panics-29">Panics</a></h5> |
| <p>Panics when <code>index >= len()</code>, meaning it always panics on empty slices.</p> |
| <h5 id="examples-71"><a href="#examples-71">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>v = [-<span class="number">5i32</span>, <span class="number">4</span>, <span class="number">1</span>, -<span class="number">3</span>, <span class="number">2</span>]; |
| |
| <span class="comment">// Find the median |
| </span>v.select_nth_unstable(<span class="number">2</span>); |
| |
| <span class="comment">// We are only guaranteed the slice will be one of the following, based on the way we sort |
| // about the specified index. |
| </span><span class="macro">assert!</span>(v == [-<span class="number">3</span>, -<span class="number">5</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">4</span>] || |
| v == [-<span class="number">5</span>, -<span class="number">3</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">4</span>] || |
| v == [-<span class="number">3</span>, -<span class="number">5</span>, <span class="number">1</span>, <span class="number">4</span>, <span class="number">2</span>] || |
| v == [-<span class="number">5</span>, -<span class="number">3</span>, <span class="number">1</span>, <span class="number">4</span>, <span class="number">2</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.select_nth_unstable_by" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.49.0">1.49.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#2760-2766">source</a></span><h4 class="code-header">pub fn <a href="#method.select_nth_unstable_by" class="fnname">select_nth_unstable_by</a><F>(<br> &mut self,<br> index: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>,<br> compare: F<br>) -> (&mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&mut </a>T, &mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>)<span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>T, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>T) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/cmp/enum.Ordering.html" title="enum core::cmp::Ordering">Ordering</a>,</span></h4></section></summary><div class="docblock"><p>Reorder the slice with a comparator function such that the element at <code>index</code> is at its |
| final sorted position.</p> |
| <p>This reordering has the additional property that any value at position <code>i < index</code> will be |
| less than or equal to any value at a position <code>j > index</code> using the comparator function. |
| Additionally, this reordering is unstable (i.e. any number of equal elements may end up at |
| position <code>index</code>), in-place (i.e. does not allocate), and <em>O</em>(<em>n</em>) worst-case. This function |
| is also known as “kth element” in other libraries. It returns a triplet of the following from |
| the slice reordered according to the provided comparator function: the subslice prior to |
| <code>index</code>, the element at <code>index</code>, and the subslice after <code>index</code>; accordingly, the values in |
| those two subslices will respectively all be less-than-or-equal-to and greater-than-or-equal-to |
| the value of the element at <code>index</code>.</p> |
| <h5 id="current-implementation-4"><a href="#current-implementation-4">Current implementation</a></h5> |
| <p>The current algorithm is based on the quickselect portion of the same quicksort algorithm |
| used for <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.sort_unstable"><code>sort_unstable</code></a>.</p> |
| <h5 id="panics-30"><a href="#panics-30">Panics</a></h5> |
| <p>Panics when <code>index >= len()</code>, meaning it always panics on empty slices.</p> |
| <h5 id="examples-72"><a href="#examples-72">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>v = [-<span class="number">5i32</span>, <span class="number">4</span>, <span class="number">1</span>, -<span class="number">3</span>, <span class="number">2</span>]; |
| |
| <span class="comment">// Find the median as if the slice were sorted in descending order. |
| </span>v.select_nth_unstable_by(<span class="number">2</span>, |a, b| b.cmp(a)); |
| |
| <span class="comment">// We are only guaranteed the slice will be one of the following, based on the way we sort |
| // about the specified index. |
| </span><span class="macro">assert!</span>(v == [<span class="number">2</span>, <span class="number">4</span>, <span class="number">1</span>, -<span class="number">5</span>, -<span class="number">3</span>] || |
| v == [<span class="number">2</span>, <span class="number">4</span>, <span class="number">1</span>, -<span class="number">3</span>, -<span class="number">5</span>] || |
| v == [<span class="number">4</span>, <span class="number">2</span>, <span class="number">1</span>, -<span class="number">5</span>, -<span class="number">3</span>] || |
| v == [<span class="number">4</span>, <span class="number">2</span>, <span class="number">1</span>, -<span class="number">3</span>, -<span class="number">5</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.select_nth_unstable_by_key" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.49.0">1.49.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#2812-2819">source</a></span><h4 class="code-header">pub fn <a href="#method.select_nth_unstable_by_key" class="fnname">select_nth_unstable_by_key</a><K, F>(<br> &mut self,<br> index: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>,<br> f: F<br>) -> (&mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&mut </a>T, &mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>)<span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>T) -> K,<br> K: <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html" title="trait core::cmp::Ord">Ord</a>,</span></h4></section></summary><div class="docblock"><p>Reorder the slice with a key extraction function such that the element at <code>index</code> is at its |
| final sorted position.</p> |
| <p>This reordering has the additional property that any value at position <code>i < index</code> will be |
| less than or equal to any value at a position <code>j > index</code> using the key extraction function. |
| Additionally, this reordering is unstable (i.e. any number of equal elements may end up at |
| position <code>index</code>), in-place (i.e. does not allocate), and <em>O</em>(<em>n</em>) worst-case. This function |
| is also known as “kth element” in other libraries. It returns a triplet of the following from |
| the slice reordered according to the provided key extraction function: the subslice prior to |
| <code>index</code>, the element at <code>index</code>, and the subslice after <code>index</code>; accordingly, the values in |
| those two subslices will respectively all be less-than-or-equal-to and greater-than-or-equal-to |
| the value of the element at <code>index</code>.</p> |
| <h5 id="current-implementation-5"><a href="#current-implementation-5">Current implementation</a></h5> |
| <p>The current algorithm is based on the quickselect portion of the same quicksort algorithm |
| used for <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.sort_unstable"><code>sort_unstable</code></a>.</p> |
| <h5 id="panics-31"><a href="#panics-31">Panics</a></h5> |
| <p>Panics when <code>index >= len()</code>, meaning it always panics on empty slices.</p> |
| <h5 id="examples-73"><a href="#examples-73">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>v = [-<span class="number">5i32</span>, <span class="number">4</span>, <span class="number">1</span>, -<span class="number">3</span>, <span class="number">2</span>]; |
| |
| <span class="comment">// Return the median as if the array were sorted according to absolute value. |
| </span>v.select_nth_unstable_by_key(<span class="number">2</span>, |a| a.abs()); |
| |
| <span class="comment">// We are only guaranteed the slice will be one of the following, based on the way we sort |
| // about the specified index. |
| </span><span class="macro">assert!</span>(v == [<span class="number">1</span>, <span class="number">2</span>, -<span class="number">3</span>, <span class="number">4</span>, -<span class="number">5</span>] || |
| v == [<span class="number">1</span>, <span class="number">2</span>, -<span class="number">3</span>, -<span class="number">5</span>, <span class="number">4</span>] || |
| v == [<span class="number">2</span>, <span class="number">1</span>, -<span class="number">3</span>, <span class="number">4</span>, -<span class="number">5</span>] || |
| v == [<span class="number">2</span>, <span class="number">1</span>, -<span class="number">3</span>, -<span class="number">5</span>, <span class="number">4</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.partition_dedup" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#2846-2848">source</a><h4 class="code-header">pub fn <a href="#method.partition_dedup" class="fnname">partition_dedup</a>(&mut self) -> (&mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>, &mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>)<span class="where fmt-newline">where<br> T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a><T>,</span></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_partition_dedup</code>)</span></div></span></summary><div class="docblock"><p>Moves all consecutive repeated elements to the end of the slice according to the |
| <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html" title="PartialEq"><code>PartialEq</code></a> trait implementation.</p> |
| <p>Returns two slices. The first contains no consecutive repeated elements. |
| The second contains all the duplicates in no specified order.</p> |
| <p>If the slice is sorted, the first returned slice contains no duplicates.</p> |
| <h5 id="examples-74"><a href="#examples-74">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(slice_partition_dedup)] |
| |
| </span><span class="kw">let </span><span class="kw-2">mut </span>slice = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">3</span>, <span class="number">2</span>, <span class="number">1</span>, <span class="number">1</span>]; |
| |
| <span class="kw">let </span>(dedup, duplicates) = slice.partition_dedup(); |
| |
| <span class="macro">assert_eq!</span>(dedup, [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">2</span>, <span class="number">1</span>]); |
| <span class="macro">assert_eq!</span>(duplicates, [<span class="number">2</span>, <span class="number">3</span>, <span class="number">1</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.partition_dedup_by" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#2880-2882">source</a><h4 class="code-header">pub fn <a href="#method.partition_dedup_by" class="fnname">partition_dedup_by</a><F>(&mut self, same_bucket: F) -> (&mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>, &mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>)<span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&mut </a>T, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&mut </a>T) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>,</span></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_partition_dedup</code>)</span></div></span></summary><div class="docblock"><p>Moves all but the first of consecutive elements to the end of the slice satisfying |
| a given equality relation.</p> |
| <p>Returns two slices. The first contains no consecutive repeated elements. |
| The second contains all the duplicates in no specified order.</p> |
| <p>The <code>same_bucket</code> function is passed references to two elements from the slice and |
| must determine if the elements compare equal. The elements are passed in opposite order |
| from their order in the slice, so if <code>same_bucket(a, b)</code> returns <code>true</code>, <code>a</code> is moved |
| at the end of the slice.</p> |
| <p>If the slice is sorted, the first returned slice contains no duplicates.</p> |
| <h5 id="examples-75"><a href="#examples-75">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(slice_partition_dedup)] |
| |
| </span><span class="kw">let </span><span class="kw-2">mut </span>slice = [<span class="string">"foo"</span>, <span class="string">"Foo"</span>, <span class="string">"BAZ"</span>, <span class="string">"Bar"</span>, <span class="string">"bar"</span>, <span class="string">"baz"</span>, <span class="string">"BAZ"</span>]; |
| |
| <span class="kw">let </span>(dedup, duplicates) = slice.partition_dedup_by(|a, b| a.eq_ignore_ascii_case(b)); |
| |
| <span class="macro">assert_eq!</span>(dedup, [<span class="string">"foo"</span>, <span class="string">"BAZ"</span>, <span class="string">"Bar"</span>, <span class="string">"baz"</span>]); |
| <span class="macro">assert_eq!</span>(duplicates, [<span class="string">"bar"</span>, <span class="string">"Foo"</span>, <span class="string">"BAZ"</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.partition_dedup_by_key" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#3006-3009">source</a><h4 class="code-header">pub fn <a href="#method.partition_dedup_by_key" class="fnname">partition_dedup_by_key</a><K, F>(&mut self, key: F) -> (&mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>, &mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>)<span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&mut </a>T) -> K,<br> K: <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a><K>,</span></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_partition_dedup</code>)</span></div></span></summary><div class="docblock"><p>Moves all but the first of consecutive elements to the end of the slice that resolve |
| to the same key.</p> |
| <p>Returns two slices. The first contains no consecutive repeated elements. |
| The second contains all the duplicates in no specified order.</p> |
| <p>If the slice is sorted, the first returned slice contains no duplicates.</p> |
| <h5 id="examples-76"><a href="#examples-76">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(slice_partition_dedup)] |
| |
| </span><span class="kw">let </span><span class="kw-2">mut </span>slice = [<span class="number">10</span>, <span class="number">20</span>, <span class="number">21</span>, <span class="number">30</span>, <span class="number">30</span>, <span class="number">20</span>, <span class="number">11</span>, <span class="number">13</span>]; |
| |
| <span class="kw">let </span>(dedup, duplicates) = slice.partition_dedup_by_key(|i| <span class="kw-2">*</span>i / <span class="number">10</span>); |
| |
| <span class="macro">assert_eq!</span>(dedup, [<span class="number">10</span>, <span class="number">20</span>, <span class="number">30</span>, <span class="number">20</span>, <span class="number">11</span>]); |
| <span class="macro">assert_eq!</span>(duplicates, [<span class="number">21</span>, <span class="number">30</span>, <span class="number">13</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.rotate_left" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.26.0">1.26.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#3045">source</a></span><h4 class="code-header">pub fn <a href="#method.rotate_left" class="fnname">rotate_left</a>(&mut self, mid: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>)</h4></section></summary><div class="docblock"><p>Rotates the slice in-place such that the first <code>mid</code> elements of the |
| slice move to the end while the last <code>self.len() - mid</code> elements move to |
| the front. After calling <code>rotate_left</code>, the element previously at index |
| <code>mid</code> will become the first element in the slice.</p> |
| <h5 id="panics-32"><a href="#panics-32">Panics</a></h5> |
| <p>This function will panic if <code>mid</code> is greater than the length of the |
| slice. Note that <code>mid == self.len()</code> does <em>not</em> panic and is a no-op |
| rotation.</p> |
| <h5 id="complexity"><a href="#complexity">Complexity</a></h5> |
| <p>Takes linear (in <code>self.len()</code>) time.</p> |
| <h5 id="examples-77"><a href="#examples-77">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>a = [<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>, <span class="string">'d'</span>, <span class="string">'e'</span>, <span class="string">'f'</span>]; |
| a.rotate_left(<span class="number">2</span>); |
| <span class="macro">assert_eq!</span>(a, [<span class="string">'c'</span>, <span class="string">'d'</span>, <span class="string">'e'</span>, <span class="string">'f'</span>, <span class="string">'a'</span>, <span class="string">'b'</span>]);</code></pre></div> |
| <p>Rotating a subslice:</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>a = [<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>, <span class="string">'d'</span>, <span class="string">'e'</span>, <span class="string">'f'</span>]; |
| a[<span class="number">1</span>..<span class="number">5</span>].rotate_left(<span class="number">1</span>); |
| <span class="macro">assert_eq!</span>(a, [<span class="string">'a'</span>, <span class="string">'c'</span>, <span class="string">'d'</span>, <span class="string">'e'</span>, <span class="string">'b'</span>, <span class="string">'f'</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.rotate_right" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.26.0">1.26.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#3088">source</a></span><h4 class="code-header">pub fn <a href="#method.rotate_right" class="fnname">rotate_right</a>(&mut self, k: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>)</h4></section></summary><div class="docblock"><p>Rotates the slice in-place such that the first <code>self.len() - k</code> |
| elements of the slice move to the end while the last <code>k</code> elements move |
| to the front. After calling <code>rotate_right</code>, the element previously at |
| index <code>self.len() - k</code> will become the first element in the slice.</p> |
| <h5 id="panics-33"><a href="#panics-33">Panics</a></h5> |
| <p>This function will panic if <code>k</code> is greater than the length of the |
| slice. Note that <code>k == self.len()</code> does <em>not</em> panic and is a no-op |
| rotation.</p> |
| <h5 id="complexity-1"><a href="#complexity-1">Complexity</a></h5> |
| <p>Takes linear (in <code>self.len()</code>) time.</p> |
| <h5 id="examples-78"><a href="#examples-78">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>a = [<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>, <span class="string">'d'</span>, <span class="string">'e'</span>, <span class="string">'f'</span>]; |
| a.rotate_right(<span class="number">2</span>); |
| <span class="macro">assert_eq!</span>(a, [<span class="string">'e'</span>, <span class="string">'f'</span>, <span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>, <span class="string">'d'</span>]);</code></pre></div> |
| <p>Rotate a subslice:</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>a = [<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>, <span class="string">'d'</span>, <span class="string">'e'</span>, <span class="string">'f'</span>]; |
| a[<span class="number">1</span>..<span class="number">5</span>].rotate_right(<span class="number">1</span>); |
| <span class="macro">assert_eq!</span>(a, [<span class="string">'a'</span>, <span class="string">'e'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>, <span class="string">'d'</span>, <span class="string">'f'</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.fill" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.50.0">1.50.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#3111-3113">source</a></span><h4 class="code-header">pub fn <a href="#method.fill" class="fnname">fill</a>(&mut self, value: T)<span class="where fmt-newline">where<br> T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>,</span></h4></section></summary><div class="docblock"><p>Fills <code>self</code> with elements by cloning <code>value</code>.</p> |
| <h5 id="examples-79"><a href="#examples-79">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>buf = <span class="macro">vec!</span>[<span class="number">0</span>; <span class="number">10</span>]; |
| buf.fill(<span class="number">1</span>); |
| <span class="macro">assert_eq!</span>(buf, <span class="macro">vec!</span>[<span class="number">1</span>; <span class="number">10</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.fill_with" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.51.0">1.51.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#3135-3137">source</a></span><h4 class="code-header">pub fn <a href="#method.fill_with" class="fnname">fill_with</a><F>(&mut self, f: F)<span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>() -> T,</span></h4></section></summary><div class="docblock"><p>Fills <code>self</code> with elements returned by calling a closure repeatedly.</p> |
| <p>This method uses a closure to create new values. If you’d rather |
| <a href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="Clone"><code>Clone</code></a> a given value, use <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.fill"><code>fill</code></a>. If you want to use the <a href="https://doc.rust-lang.org/nightly/core/default/trait.Default.html" title="Default"><code>Default</code></a> |
| trait to generate values, you can pass <a href="https://doc.rust-lang.org/nightly/core/default/trait.Default.html#tymethod.default" title="Default::default"><code>Default::default</code></a> as the |
| argument.</p> |
| <h5 id="examples-80"><a href="#examples-80">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>buf = <span class="macro">vec!</span>[<span class="number">1</span>; <span class="number">10</span>]; |
| buf.fill_with(Default::default); |
| <span class="macro">assert_eq!</span>(buf, <span class="macro">vec!</span>[<span class="number">0</span>; <span class="number">10</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.clone_from_slice" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.7.0">1.7.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#3198-3200">source</a></span><h4 class="code-header">pub fn <a href="#method.clone_from_slice" class="fnname">clone_from_slice</a>(&mut self, src: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>)<span class="where fmt-newline">where<br> T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>,</span></h4></section></summary><div class="docblock"><p>Copies the elements from <code>src</code> into <code>self</code>.</p> |
| <p>The length of <code>src</code> must be the same as <code>self</code>.</p> |
| <h5 id="panics-34"><a href="#panics-34">Panics</a></h5> |
| <p>This function will panic if the two slices have different lengths.</p> |
| <h5 id="examples-81"><a href="#examples-81">Examples</a></h5> |
| <p>Cloning two elements from a slice into another:</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>src = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>]; |
| <span class="kw">let </span><span class="kw-2">mut </span>dst = [<span class="number">0</span>, <span class="number">0</span>]; |
| |
| <span class="comment">// Because the slices have to be the same length, |
| // we slice the source slice from four elements |
| // to two. It will panic if we don't do this. |
| </span>dst.clone_from_slice(<span class="kw-2">&</span>src[<span class="number">2</span>..]); |
| |
| <span class="macro">assert_eq!</span>(src, [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>]); |
| <span class="macro">assert_eq!</span>(dst, [<span class="number">3</span>, <span class="number">4</span>]);</code></pre></div> |
| <p>Rust enforces that there can only be one mutable reference with no |
| immutable references to a particular piece of data in a particular |
| scope. Because of this, attempting to use <code>clone_from_slice</code> on a |
| single slice will result in a compile failure:</p> |
| |
| <div class="example-wrap compile_fail"><div class='tooltip'>ⓘ</div><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>slice = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>]; |
| |
| slice[..<span class="number">2</span>].clone_from_slice(<span class="kw-2">&</span>slice[<span class="number">3</span>..]); <span class="comment">// compile fail!</span></code></pre></div> |
| <p>To work around this, we can use <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.split_at_mut"><code>split_at_mut</code></a> to create two distinct |
| sub-slices from a slice:</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>slice = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>]; |
| |
| { |
| <span class="kw">let </span>(left, right) = slice.split_at_mut(<span class="number">2</span>); |
| left.clone_from_slice(<span class="kw-2">&</span>right[<span class="number">1</span>..]); |
| } |
| |
| <span class="macro">assert_eq!</span>(slice, [<span class="number">4</span>, <span class="number">5</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.copy_from_slice" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.9.0">1.9.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#3262-3264">source</a></span><h4 class="code-header">pub fn <a href="#method.copy_from_slice" class="fnname">copy_from_slice</a>(&mut self, src: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>)<span class="where fmt-newline">where<br> T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Copy.html" title="trait core::marker::Copy">Copy</a>,</span></h4></section></summary><div class="docblock"><p>Copies all elements from <code>src</code> into <code>self</code>, using a memcpy.</p> |
| <p>The length of <code>src</code> must be the same as <code>self</code>.</p> |
| <p>If <code>T</code> does not implement <code>Copy</code>, use <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.clone_from_slice"><code>clone_from_slice</code></a>.</p> |
| <h5 id="panics-35"><a href="#panics-35">Panics</a></h5> |
| <p>This function will panic if the two slices have different lengths.</p> |
| <h5 id="examples-82"><a href="#examples-82">Examples</a></h5> |
| <p>Copying two elements from a slice into another:</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>src = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>]; |
| <span class="kw">let </span><span class="kw-2">mut </span>dst = [<span class="number">0</span>, <span class="number">0</span>]; |
| |
| <span class="comment">// Because the slices have to be the same length, |
| // we slice the source slice from four elements |
| // to two. It will panic if we don't do this. |
| </span>dst.copy_from_slice(<span class="kw-2">&</span>src[<span class="number">2</span>..]); |
| |
| <span class="macro">assert_eq!</span>(src, [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>]); |
| <span class="macro">assert_eq!</span>(dst, [<span class="number">3</span>, <span class="number">4</span>]);</code></pre></div> |
| <p>Rust enforces that there can only be one mutable reference with no |
| immutable references to a particular piece of data in a particular |
| scope. Because of this, attempting to use <code>copy_from_slice</code> on a |
| single slice will result in a compile failure:</p> |
| |
| <div class="example-wrap compile_fail"><div class='tooltip'>ⓘ</div><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>slice = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>]; |
| |
| slice[..<span class="number">2</span>].copy_from_slice(<span class="kw-2">&</span>slice[<span class="number">3</span>..]); <span class="comment">// compile fail!</span></code></pre></div> |
| <p>To work around this, we can use <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.split_at_mut"><code>split_at_mut</code></a> to create two distinct |
| sub-slices from a slice:</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>slice = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>]; |
| |
| { |
| <span class="kw">let </span>(left, right) = slice.split_at_mut(<span class="number">2</span>); |
| left.copy_from_slice(<span class="kw-2">&</span>right[<span class="number">1</span>..]); |
| } |
| |
| <span class="macro">assert_eq!</span>(slice, [<span class="number">4</span>, <span class="number">5</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.copy_within" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.37.0">1.37.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#3316-3318">source</a></span><h4 class="code-header">pub fn <a href="#method.copy_within" class="fnname">copy_within</a><R>(&mut self, src: R, dest: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>)<span class="where fmt-newline">where<br> R: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/range/trait.RangeBounds.html" title="trait core::ops::range::RangeBounds">RangeBounds</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>>,<br> T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Copy.html" title="trait core::marker::Copy">Copy</a>,</span></h4></section></summary><div class="docblock"><p>Copies elements from one part of the slice to another part of itself, |
| using a memmove.</p> |
| <p><code>src</code> is the range within <code>self</code> to copy from. <code>dest</code> is the starting |
| index of the range within <code>self</code> to copy to, which will have the same |
| length as <code>src</code>. The two ranges may overlap. The ends of the two ranges |
| must be less than or equal to <code>self.len()</code>.</p> |
| <h5 id="panics-36"><a href="#panics-36">Panics</a></h5> |
| <p>This function will panic if either range exceeds the end of the slice, |
| or if the end of <code>src</code> is before the start.</p> |
| <h5 id="examples-83"><a href="#examples-83">Examples</a></h5> |
| <p>Copying four bytes within a slice:</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>bytes = <span class="kw-2">*</span><span class="string">b"Hello, World!"</span>; |
| |
| bytes.copy_within(<span class="number">1</span>..<span class="number">5</span>, <span class="number">8</span>); |
| |
| <span class="macro">assert_eq!</span>(<span class="kw-2">&</span>bytes, <span class="string">b"Hello, Wello!"</span>);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.swap_with_slice" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.27.0">1.27.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#3383">source</a></span><h4 class="code-header">pub fn <a href="#method.swap_with_slice" class="fnname">swap_with_slice</a>(&mut self, other: &mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>)</h4></section></summary><div class="docblock"><p>Swaps all elements in <code>self</code> with those in <code>other</code>.</p> |
| <p>The length of <code>other</code> must be the same as <code>self</code>.</p> |
| <h5 id="panics-37"><a href="#panics-37">Panics</a></h5> |
| <p>This function will panic if the two slices have different lengths.</p> |
| <h5 id="example"><a href="#example">Example</a></h5> |
| <p>Swapping two elements across slices:</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>slice1 = [<span class="number">0</span>, <span class="number">0</span>]; |
| <span class="kw">let </span><span class="kw-2">mut </span>slice2 = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>]; |
| |
| slice1.swap_with_slice(<span class="kw-2">&mut </span>slice2[<span class="number">2</span>..]); |
| |
| <span class="macro">assert_eq!</span>(slice1, [<span class="number">3</span>, <span class="number">4</span>]); |
| <span class="macro">assert_eq!</span>(slice2, [<span class="number">1</span>, <span class="number">2</span>, <span class="number">0</span>, <span class="number">0</span>]);</code></pre></div> |
| <p>Rust enforces that there can only be one mutable reference to a |
| particular piece of data in a particular scope. Because of this, |
| attempting to use <code>swap_with_slice</code> on a single slice will result in |
| a compile failure:</p> |
| |
| <div class="example-wrap compile_fail"><div class='tooltip'>ⓘ</div><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>slice = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>]; |
| slice[..<span class="number">2</span>].swap_with_slice(<span class="kw-2">&mut </span>slice[<span class="number">3</span>..]); <span class="comment">// compile fail!</span></code></pre></div> |
| <p>To work around this, we can use <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.split_at_mut"><code>split_at_mut</code></a> to create two distinct |
| mutable sub-slices from a slice:</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>slice = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>]; |
| |
| { |
| <span class="kw">let </span>(left, right) = slice.split_at_mut(<span class="number">2</span>); |
| left.swap_with_slice(<span class="kw-2">&mut </span>right[<span class="number">1</span>..]); |
| } |
| |
| <span class="macro">assert_eq!</span>(slice, [<span class="number">4</span>, <span class="number">5</span>, <span class="number">3</span>, <span class="number">1</span>, <span class="number">2</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.align_to" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.30.0">1.30.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#3493">source</a></span><h4 class="code-header">pub unsafe fn <a href="#method.align_to" class="fnname">align_to</a><U>(&self) -> (&<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>, &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[U]</a>, &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>)</h4></section></summary><div class="docblock"><p>Transmute the slice to a slice of another type, ensuring alignment of the types is |
| maintained.</p> |
| <p>This method splits the slice into three distinct slices: prefix, correctly aligned middle |
| slice of a new type, and the suffix slice. The method may make the middle slice the greatest |
| length possible for a given type and input slice, but only your algorithm’s performance |
| should depend on that, not its correctness. It is permissible for all of the input data to |
| be returned as the prefix or suffix slice.</p> |
| <p>This method has no purpose when either input element <code>T</code> or output element <code>U</code> are |
| zero-sized and will return the original slice without splitting anything.</p> |
| <h5 id="safety-7"><a href="#safety-7">Safety</a></h5> |
| <p>This method is essentially a <code>transmute</code> with respect to the elements in the returned |
| middle slice, so all the usual caveats pertaining to <code>transmute::<T, U></code> also apply here.</p> |
| <h5 id="examples-84"><a href="#examples-84">Examples</a></h5> |
| <p>Basic usage:</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">unsafe </span>{ |
| <span class="kw">let </span>bytes: [u8; <span class="number">7</span>] = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>, <span class="number">7</span>]; |
| <span class="kw">let </span>(prefix, shorts, suffix) = bytes.align_to::<u16>(); |
| <span class="comment">// less_efficient_algorithm_for_bytes(prefix); |
| // more_efficient_algorithm_for_aligned_shorts(shorts); |
| // less_efficient_algorithm_for_bytes(suffix); |
| </span>}</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.align_to_mut" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.30.0">1.30.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#3554">source</a></span><h4 class="code-header">pub unsafe fn <a href="#method.align_to_mut" class="fnname">align_to_mut</a><U>(&mut self) -> (&mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>, &mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[U]</a>, &mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>)</h4></section></summary><div class="docblock"><p>Transmute the slice to a slice of another type, ensuring alignment of the types is |
| maintained.</p> |
| <p>This method splits the slice into three distinct slices: prefix, correctly aligned middle |
| slice of a new type, and the suffix slice. The method may make the middle slice the greatest |
| length possible for a given type and input slice, but only your algorithm’s performance |
| should depend on that, not its correctness. It is permissible for all of the input data to |
| be returned as the prefix or suffix slice.</p> |
| <p>This method has no purpose when either input element <code>T</code> or output element <code>U</code> are |
| zero-sized and will return the original slice without splitting anything.</p> |
| <h5 id="safety-8"><a href="#safety-8">Safety</a></h5> |
| <p>This method is essentially a <code>transmute</code> with respect to the elements in the returned |
| middle slice, so all the usual caveats pertaining to <code>transmute::<T, U></code> also apply here.</p> |
| <h5 id="examples-85"><a href="#examples-85">Examples</a></h5> |
| <p>Basic usage:</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">unsafe </span>{ |
| <span class="kw">let </span><span class="kw-2">mut </span>bytes: [u8; <span class="number">7</span>] = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>, <span class="number">7</span>]; |
| <span class="kw">let </span>(prefix, shorts, suffix) = bytes.align_to_mut::<u16>(); |
| <span class="comment">// less_efficient_algorithm_for_bytes(prefix); |
| // more_efficient_algorithm_for_aligned_shorts(shorts); |
| // less_efficient_algorithm_for_bytes(suffix); |
| </span>}</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.as_simd" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#3649-3653">source</a><h4 class="code-header">pub fn <a href="#method.as_simd" class="fnname">as_simd</a><const LANES: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>>(&self) -> (&<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>, &[<a class="struct" href="https://doc.rust-lang.org/nightly/core/core_simd/vector/struct.Simd.html" title="struct core::core_simd::vector::Simd">Simd</a><T, LANES>], &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>)<span class="where fmt-newline">where<br> <a class="struct" href="https://doc.rust-lang.org/nightly/core/core_simd/vector/struct.Simd.html" title="struct core::core_simd::vector::Simd">Simd</a><T, LANES>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsRef.html" title="trait core::convert::AsRef">AsRef</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.array.html">[T; LANES]</a>>,<br> T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/core_simd/vector/trait.SimdElement.html" title="trait core::core_simd::vector::SimdElement">SimdElement</a>,<br> <a class="struct" href="https://doc.rust-lang.org/nightly/core/core_simd/lane_count/struct.LaneCount.html" title="struct core::core_simd::lane_count::LaneCount">LaneCount</a><LANES>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/core_simd/lane_count/trait.SupportedLaneCount.html" title="trait core::core_simd::lane_count::SupportedLaneCount">SupportedLaneCount</a>,</span></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>portable_simd</code>)</span></div></span></summary><div class="docblock"><p>Split a slice into a prefix, a middle of aligned SIMD types, and a suffix.</p> |
| <p>This is a safe wrapper around <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.align_to" title="slice::align_to"><code>slice::align_to</code></a>, so has the same weak |
| postconditions as that method. You’re only assured that |
| <code>self.len() == prefix.len() + middle.len() * LANES + suffix.len()</code>.</p> |
| <p>Notably, all of the following are possible:</p> |
| <ul> |
| <li><code>prefix.len() >= LANES</code>.</li> |
| <li><code>middle.is_empty()</code> despite <code>self.len() >= 3 * LANES</code>.</li> |
| <li><code>suffix.len() >= LANES</code>.</li> |
| </ul> |
| <p>That said, this is a safe method, so if you’re only writing safe code, |
| then this can at most cause incorrect logic, not unsoundness.</p> |
| <h5 id="panics-38"><a href="#panics-38">Panics</a></h5> |
| <p>This will panic if the size of the SIMD type is different from |
| <code>LANES</code> times that of the scalar.</p> |
| <p>At the time of writing, the trait restrictions on <code>Simd<T, LANES></code> keeps |
| that from ever happening, as only power-of-two numbers of lanes are |
| supported. It’s possible that, in the future, those restrictions might |
| be lifted in a way that would make it possible to see panics from this |
| method for something like <code>LANES == 3</code>.</p> |
| <h5 id="examples-86"><a href="#examples-86">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(portable_simd)] |
| </span><span class="kw">use </span>core::simd::SimdFloat; |
| |
| <span class="kw">let </span>short = <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>]; |
| <span class="kw">let </span>(prefix, middle, suffix) = short.as_simd::<<span class="number">4</span>>(); |
| <span class="macro">assert_eq!</span>(middle, []); <span class="comment">// Not enough elements for anything in the middle |
| |
| // They might be split in any possible way between prefix and suffix |
| </span><span class="kw">let </span>it = prefix.iter().chain(suffix).copied(); |
| <span class="macro">assert_eq!</span>(it.collect::<Vec<<span class="kw">_</span>>>(), <span class="macro">vec!</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>]); |
| |
| <span class="kw">fn </span>basic_simd_sum(x: <span class="kw-2">&</span>[f32]) -> f32 { |
| <span class="kw">use </span>std::ops::Add; |
| <span class="kw">use </span>std::simd::f32x4; |
| <span class="kw">let </span>(prefix, middle, suffix) = x.as_simd(); |
| <span class="kw">let </span>sums = f32x4::from_array([ |
| prefix.iter().copied().sum(), |
| <span class="number">0.0</span>, |
| <span class="number">0.0</span>, |
| suffix.iter().copied().sum(), |
| ]); |
| <span class="kw">let </span>sums = middle.iter().copied().fold(sums, f32x4::add); |
| sums.reduce_sum() |
| } |
| |
| <span class="kw">let </span>numbers: Vec<f32> = (<span class="number">1</span>..<span class="number">101</span>).map(|x| x <span class="kw">as _</span>).collect(); |
| <span class="macro">assert_eq!</span>(basic_simd_sum(<span class="kw-2">&</span>numbers[<span class="number">1</span>..<span class="number">99</span>]), <span class="number">4949.0</span>);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.as_simd_mut" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#3693-3697">source</a><h4 class="code-header">pub fn <a href="#method.as_simd_mut" class="fnname">as_simd_mut</a><const LANES: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>>(<br> &mut self<br>) -> (&mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>, &mut [<a class="struct" href="https://doc.rust-lang.org/nightly/core/core_simd/vector/struct.Simd.html" title="struct core::core_simd::vector::Simd">Simd</a><T, LANES>], &mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>)<span class="where fmt-newline">where<br> <a class="struct" href="https://doc.rust-lang.org/nightly/core/core_simd/vector/struct.Simd.html" title="struct core::core_simd::vector::Simd">Simd</a><T, LANES>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.AsMut.html" title="trait core::convert::AsMut">AsMut</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.array.html">[T; LANES]</a>>,<br> T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/core_simd/vector/trait.SimdElement.html" title="trait core::core_simd::vector::SimdElement">SimdElement</a>,<br> <a class="struct" href="https://doc.rust-lang.org/nightly/core/core_simd/lane_count/struct.LaneCount.html" title="struct core::core_simd::lane_count::LaneCount">LaneCount</a><LANES>: <a class="trait" href="https://doc.rust-lang.org/nightly/core/core_simd/lane_count/trait.SupportedLaneCount.html" title="trait core::core_simd::lane_count::SupportedLaneCount">SupportedLaneCount</a>,</span></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>portable_simd</code>)</span></div></span></summary><div class="docblock"><p>Split a slice into a prefix, a middle of aligned SIMD types, and a suffix.</p> |
| <p>This is a safe wrapper around <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.align_to_mut" title="slice::align_to_mut"><code>slice::align_to_mut</code></a>, so has the same weak |
| postconditions as that method. You’re only assured that |
| <code>self.len() == prefix.len() + middle.len() * LANES + suffix.len()</code>.</p> |
| <p>Notably, all of the following are possible:</p> |
| <ul> |
| <li><code>prefix.len() >= LANES</code>.</li> |
| <li><code>middle.is_empty()</code> despite <code>self.len() >= 3 * LANES</code>.</li> |
| <li><code>suffix.len() >= LANES</code>.</li> |
| </ul> |
| <p>That said, this is a safe method, so if you’re only writing safe code, |
| then this can at most cause incorrect logic, not unsoundness.</p> |
| <p>This is the mutable version of <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.as_simd" title="slice::as_simd"><code>slice::as_simd</code></a>; see that for examples.</p> |
| <h5 id="panics-39"><a href="#panics-39">Panics</a></h5> |
| <p>This will panic if the size of the SIMD type is different from |
| <code>LANES</code> times that of the scalar.</p> |
| <p>At the time of writing, the trait restrictions on <code>Simd<T, LANES></code> keeps |
| that from ever happening, as only power-of-two numbers of lanes are |
| supported. It’s possible that, in the future, those restrictions might |
| be lifted in a way that would make it possible to see panics from this |
| method for something like <code>LANES == 3</code>.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.is_sorted" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#3733-3735">source</a><h4 class="code-header">pub fn <a href="#method.is_sorted" class="fnname">is_sorted</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a><span class="where fmt-newline">where<br> T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html" title="trait core::cmp::PartialOrd">PartialOrd</a><T>,</span></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>is_sorted</code>)</span></div></span></summary><div class="docblock"><p>Checks if the elements of this slice are sorted.</p> |
| <p>That is, for each element <code>a</code> and its following element <code>b</code>, <code>a <= b</code> must hold. If the |
| slice yields exactly zero or one element, <code>true</code> is returned.</p> |
| <p>Note that if <code>Self::Item</code> is only <code>PartialOrd</code>, but not <code>Ord</code>, the above definition |
| implies that this function returns <code>false</code> if any two consecutive items are not |
| comparable.</p> |
| <h5 id="examples-87"><a href="#examples-87">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(is_sorted)] |
| </span><span class="kw">let </span>empty: [i32; <span class="number">0</span>] = []; |
| |
| <span class="macro">assert!</span>([<span class="number">1</span>, <span class="number">2</span>, <span class="number">2</span>, <span class="number">9</span>].is_sorted()); |
| <span class="macro">assert!</span>(![<span class="number">1</span>, <span class="number">3</span>, <span class="number">2</span>, <span class="number">4</span>].is_sorted()); |
| <span class="macro">assert!</span>([<span class="number">0</span>].is_sorted()); |
| <span class="macro">assert!</span>(empty.is_sorted()); |
| <span class="macro">assert!</span>(![<span class="number">0.0</span>, <span class="number">1.0</span>, f32::NAN].is_sorted());</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.is_sorted_by" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#3749-3751">source</a><h4 class="code-header">pub fn <a href="#method.is_sorted_by" class="fnname">is_sorted_by</a><F>(&self, compare: F) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a><span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>T, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>T) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="enum" href="https://doc.rust-lang.org/nightly/core/cmp/enum.Ordering.html" title="enum core::cmp::Ordering">Ordering</a>>,</span></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>is_sorted</code>)</span></div></span></summary><div class="docblock"><p>Checks if the elements of this slice are sorted using the given comparator function.</p> |
| <p>Instead of using <code>PartialOrd::partial_cmp</code>, this function uses the given <code>compare</code> |
| function to determine the ordering of two elements. Apart from that, it’s equivalent to |
| <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.is_sorted"><code>is_sorted</code></a>; see its documentation for more information.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.is_sorted_by_key" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#3775-3778">source</a><h4 class="code-header">pub fn <a href="#method.is_sorted_by_key" class="fnname">is_sorted_by_key</a><F, K>(&self, f: F) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a><span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>T) -> K,<br> K: <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html" title="trait core::cmp::PartialOrd">PartialOrd</a><K>,</span></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>is_sorted</code>)</span></div></span></summary><div class="docblock"><p>Checks if the elements of this slice are sorted using the given key extraction function.</p> |
| <p>Instead of comparing the slice’s elements directly, this function compares the keys of the |
| elements, as determined by <code>f</code>. Apart from that, it’s equivalent to <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.is_sorted"><code>is_sorted</code></a>; see its |
| documentation for more information.</p> |
| <h5 id="examples-88"><a href="#examples-88">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(is_sorted)] |
| |
| </span><span class="macro">assert!</span>([<span class="string">"c"</span>, <span class="string">"bb"</span>, <span class="string">"aaa"</span>].is_sorted_by_key(|s| s.len())); |
| <span class="macro">assert!</span>(![-<span class="number">2i32</span>, -<span class="number">1</span>, <span class="number">0</span>, <span class="number">3</span>].is_sorted_by_key(|n| n.abs()));</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.partition_point" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.52.0">1.52.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#3834-3836">source</a></span><h4 class="code-header">pub fn <a href="#method.partition_point" class="fnname">partition_point</a><P>(&self, pred: P) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a><span class="where fmt-newline">where<br> P: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>T) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a>,</span></h4></section></summary><div class="docblock"><p>Returns the index of the partition point according to the given predicate |
| (the index of the first element of the second partition).</p> |
| <p>The slice is assumed to be partitioned according to the given predicate. |
| This means that all elements for which the predicate returns true are at the start of the slice |
| and all elements for which the predicate returns false are at the end. |
| For example, [7, 15, 3, 5, 4, 12, 6] is a partitioned under the predicate x % 2 != 0 |
| (all odd numbers are at the start, all even at the end).</p> |
| <p>If this slice is not partitioned, the returned result is unspecified and meaningless, |
| as this method performs a kind of binary search.</p> |
| <p>See also <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.binary_search"><code>binary_search</code></a>, <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.binary_search_by"><code>binary_search_by</code></a>, and <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.binary_search_by_key"><code>binary_search_by_key</code></a>.</p> |
| <h5 id="examples-89"><a href="#examples-89">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>v = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">3</span>, <span class="number">5</span>, <span class="number">6</span>, <span class="number">7</span>]; |
| <span class="kw">let </span>i = v.partition_point(|<span class="kw-2">&</span>x| x < <span class="number">5</span>); |
| |
| <span class="macro">assert_eq!</span>(i, <span class="number">4</span>); |
| <span class="macro">assert!</span>(v[..i].iter().all(|<span class="kw-2">&</span>x| x < <span class="number">5</span>)); |
| <span class="macro">assert!</span>(v[i..].iter().all(|<span class="kw-2">&</span>x| !(x < <span class="number">5</span>)));</code></pre></div> |
| <p>If all elements of the slice match the predicate, including if the slice |
| is empty, then the length of the slice will be returned:</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>a = [<span class="number">2</span>, <span class="number">4</span>, <span class="number">8</span>]; |
| <span class="macro">assert_eq!</span>(a.partition_point(|x| x < <span class="kw-2">&</span><span class="number">100</span>), a.len()); |
| <span class="kw">let </span>a: [i32; <span class="number">0</span>] = []; |
| <span class="macro">assert_eq!</span>(a.partition_point(|x| x < <span class="kw-2">&</span><span class="number">100</span>), <span class="number">0</span>);</code></pre></div> |
| <p>If you want to insert an item to a sorted vector, while maintaining |
| sort order:</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>s = <span class="macro">vec!</span>[<span class="number">0</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">5</span>, <span class="number">8</span>, <span class="number">13</span>, <span class="number">21</span>, <span class="number">34</span>, <span class="number">55</span>]; |
| <span class="kw">let </span>num = <span class="number">42</span>; |
| <span class="kw">let </span>idx = s.partition_point(|<span class="kw-2">&</span>x| x < num); |
| s.insert(idx, num); |
| <span class="macro">assert_eq!</span>(s, [<span class="number">0</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">5</span>, <span class="number">8</span>, <span class="number">13</span>, <span class="number">21</span>, <span class="number">34</span>, <span class="number">42</span>, <span class="number">55</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.take" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#3892">source</a><h4 class="code-header">pub fn <a href="#method.take" class="fnname">take</a><R>(self: &mut &'a <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>, range: R) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><&'a <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>><span class="where fmt-newline">where<br> R: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/range/trait.OneSidedRange.html" title="trait core::ops::range::OneSidedRange">OneSidedRange</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>>,</span></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_take</code>)</span></div></span></summary><div class="docblock"><p>Removes the subslice corresponding to the given range |
| and returns a reference to it.</p> |
| <p>Returns <code>None</code> and does not modify the slice if the given |
| range is out of bounds.</p> |
| <p>Note that this method only accepts one-sided ranges such as |
| <code>2..</code> or <code>..6</code>, but not <code>2..6</code>.</p> |
| <h5 id="examples-90"><a href="#examples-90">Examples</a></h5> |
| <p>Taking the first three elements of a slice:</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(slice_take)] |
| |
| </span><span class="kw">let </span><span class="kw-2">mut </span>slice: <span class="kw-2">&</span>[<span class="kw">_</span>] = <span class="kw-2">&</span>[<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>, <span class="string">'d'</span>]; |
| <span class="kw">let </span><span class="kw-2">mut </span>first_three = slice.take(..<span class="number">3</span>).unwrap(); |
| |
| <span class="macro">assert_eq!</span>(slice, <span class="kw-2">&</span>[<span class="string">'d'</span>]); |
| <span class="macro">assert_eq!</span>(first_three, <span class="kw-2">&</span>[<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>]);</code></pre></div> |
| <p>Taking the last two elements of a slice:</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(slice_take)] |
| |
| </span><span class="kw">let </span><span class="kw-2">mut </span>slice: <span class="kw-2">&</span>[<span class="kw">_</span>] = <span class="kw-2">&</span>[<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>, <span class="string">'d'</span>]; |
| <span class="kw">let </span><span class="kw-2">mut </span>tail = slice.take(<span class="number">2</span>..).unwrap(); |
| |
| <span class="macro">assert_eq!</span>(slice, <span class="kw-2">&</span>[<span class="string">'a'</span>, <span class="string">'b'</span>]); |
| <span class="macro">assert_eq!</span>(tail, <span class="kw-2">&</span>[<span class="string">'c'</span>, <span class="string">'d'</span>]);</code></pre></div> |
| <p>Getting <code>None</code> when <code>range</code> is out of bounds:</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(slice_take)] |
| |
| </span><span class="kw">let </span><span class="kw-2">mut </span>slice: <span class="kw-2">&</span>[<span class="kw">_</span>] = <span class="kw-2">&</span>[<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>, <span class="string">'d'</span>]; |
| |
| <span class="macro">assert_eq!</span>(<span class="prelude-val">None</span>, slice.take(<span class="number">5</span>..)); |
| <span class="macro">assert_eq!</span>(<span class="prelude-val">None</span>, slice.take(..<span class="number">5</span>)); |
| <span class="macro">assert_eq!</span>(<span class="prelude-val">None</span>, slice.take(..=<span class="number">4</span>)); |
| <span class="kw">let </span>expected: <span class="kw-2">&</span>[char] = <span class="kw-2">&</span>[<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>, <span class="string">'d'</span>]; |
| <span class="macro">assert_eq!</span>(<span class="prelude-val">Some</span>(expected), slice.take(..<span class="number">4</span>));</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.take_mut" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#3961-3964">source</a><h4 class="code-header">pub fn <a href="#method.take_mut" class="fnname">take_mut</a><R>(self: &mut &'a mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>, range: R) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><&'a mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>><span class="where fmt-newline">where<br> R: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/range/trait.OneSidedRange.html" title="trait core::ops::range::OneSidedRange">OneSidedRange</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>>,</span></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_take</code>)</span></div></span></summary><div class="docblock"><p>Removes the subslice corresponding to the given range |
| and returns a mutable reference to it.</p> |
| <p>Returns <code>None</code> and does not modify the slice if the given |
| range is out of bounds.</p> |
| <p>Note that this method only accepts one-sided ranges such as |
| <code>2..</code> or <code>..6</code>, but not <code>2..6</code>.</p> |
| <h5 id="examples-91"><a href="#examples-91">Examples</a></h5> |
| <p>Taking the first three elements of a slice:</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(slice_take)] |
| |
| </span><span class="kw">let </span><span class="kw-2">mut </span>slice: <span class="kw-2">&mut </span>[<span class="kw">_</span>] = <span class="kw-2">&mut </span>[<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>, <span class="string">'d'</span>]; |
| <span class="kw">let </span><span class="kw-2">mut </span>first_three = slice.take_mut(..<span class="number">3</span>).unwrap(); |
| |
| <span class="macro">assert_eq!</span>(slice, <span class="kw-2">&mut </span>[<span class="string">'d'</span>]); |
| <span class="macro">assert_eq!</span>(first_three, <span class="kw-2">&mut </span>[<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>]);</code></pre></div> |
| <p>Taking the last two elements of a slice:</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(slice_take)] |
| |
| </span><span class="kw">let </span><span class="kw-2">mut </span>slice: <span class="kw-2">&mut </span>[<span class="kw">_</span>] = <span class="kw-2">&mut </span>[<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>, <span class="string">'d'</span>]; |
| <span class="kw">let </span><span class="kw-2">mut </span>tail = slice.take_mut(<span class="number">2</span>..).unwrap(); |
| |
| <span class="macro">assert_eq!</span>(slice, <span class="kw-2">&mut </span>[<span class="string">'a'</span>, <span class="string">'b'</span>]); |
| <span class="macro">assert_eq!</span>(tail, <span class="kw-2">&mut </span>[<span class="string">'c'</span>, <span class="string">'d'</span>]);</code></pre></div> |
| <p>Getting <code>None</code> when <code>range</code> is out of bounds:</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(slice_take)] |
| |
| </span><span class="kw">let </span><span class="kw-2">mut </span>slice: <span class="kw-2">&mut </span>[<span class="kw">_</span>] = <span class="kw-2">&mut </span>[<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>, <span class="string">'d'</span>]; |
| |
| <span class="macro">assert_eq!</span>(<span class="prelude-val">None</span>, slice.take_mut(<span class="number">5</span>..)); |
| <span class="macro">assert_eq!</span>(<span class="prelude-val">None</span>, slice.take_mut(..<span class="number">5</span>)); |
| <span class="macro">assert_eq!</span>(<span class="prelude-val">None</span>, slice.take_mut(..=<span class="number">4</span>)); |
| <span class="kw">let </span>expected: <span class="kw-2">&mut </span>[<span class="kw">_</span>] = <span class="kw-2">&mut </span>[<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>, <span class="string">'d'</span>]; |
| <span class="macro">assert_eq!</span>(<span class="prelude-val">Some</span>(expected), slice.take_mut(..<span class="number">4</span>));</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.take_first" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#4000">source</a><h4 class="code-header">pub fn <a href="#method.take_first" class="fnname">take_first</a>(self: &mut &'a <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&'a </a>T></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_take</code>)</span></div></span></summary><div class="docblock"><p>Removes the first element of the slice and returns a reference |
| to it.</p> |
| <p>Returns <code>None</code> if the slice is empty.</p> |
| <h5 id="examples-92"><a href="#examples-92">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(slice_take)] |
| |
| </span><span class="kw">let </span><span class="kw-2">mut </span>slice: <span class="kw-2">&</span>[<span class="kw">_</span>] = <span class="kw-2">&</span>[<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>]; |
| <span class="kw">let </span>first = slice.take_first().unwrap(); |
| |
| <span class="macro">assert_eq!</span>(slice, <span class="kw-2">&</span>[<span class="string">'b'</span>, <span class="string">'c'</span>]); |
| <span class="macro">assert_eq!</span>(first, <span class="kw-2">&</span><span class="string">'a'</span>);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.take_first_mut" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#4025">source</a><h4 class="code-header">pub fn <a href="#method.take_first_mut" class="fnname">take_first_mut</a>(self: &mut &'a mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&'a mut </a>T></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_take</code>)</span></div></span></summary><div class="docblock"><p>Removes the first element of the slice and returns a mutable |
| reference to it.</p> |
| <p>Returns <code>None</code> if the slice is empty.</p> |
| <h5 id="examples-93"><a href="#examples-93">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(slice_take)] |
| |
| </span><span class="kw">let </span><span class="kw-2">mut </span>slice: <span class="kw-2">&mut </span>[<span class="kw">_</span>] = <span class="kw-2">&mut </span>[<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>]; |
| <span class="kw">let </span>first = slice.take_first_mut().unwrap(); |
| <span class="kw-2">*</span>first = <span class="string">'d'</span>; |
| |
| <span class="macro">assert_eq!</span>(slice, <span class="kw-2">&</span>[<span class="string">'b'</span>, <span class="string">'c'</span>]); |
| <span class="macro">assert_eq!</span>(first, <span class="kw-2">&</span><span class="string">'d'</span>);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.take_last" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#4049">source</a><h4 class="code-header">pub fn <a href="#method.take_last" class="fnname">take_last</a>(self: &mut &'a <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&'a </a>T></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_take</code>)</span></div></span></summary><div class="docblock"><p>Removes the last element of the slice and returns a reference |
| to it.</p> |
| <p>Returns <code>None</code> if the slice is empty.</p> |
| <h5 id="examples-94"><a href="#examples-94">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(slice_take)] |
| |
| </span><span class="kw">let </span><span class="kw-2">mut </span>slice: <span class="kw-2">&</span>[<span class="kw">_</span>] = <span class="kw-2">&</span>[<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>]; |
| <span class="kw">let </span>last = slice.take_last().unwrap(); |
| |
| <span class="macro">assert_eq!</span>(slice, <span class="kw-2">&</span>[<span class="string">'a'</span>, <span class="string">'b'</span>]); |
| <span class="macro">assert_eq!</span>(last, <span class="kw-2">&</span><span class="string">'c'</span>);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.take_last_mut" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#4074">source</a><h4 class="code-header">pub fn <a href="#method.take_last_mut" class="fnname">take_last_mut</a>(self: &mut &'a mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&'a mut </a>T></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_take</code>)</span></div></span></summary><div class="docblock"><p>Removes the last element of the slice and returns a mutable |
| reference to it.</p> |
| <p>Returns <code>None</code> if the slice is empty.</p> |
| <h5 id="examples-95"><a href="#examples-95">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(slice_take)] |
| |
| </span><span class="kw">let </span><span class="kw-2">mut </span>slice: <span class="kw-2">&mut </span>[<span class="kw">_</span>] = <span class="kw-2">&mut </span>[<span class="string">'a'</span>, <span class="string">'b'</span>, <span class="string">'c'</span>]; |
| <span class="kw">let </span>last = slice.take_last_mut().unwrap(); |
| <span class="kw-2">*</span>last = <span class="string">'d'</span>; |
| |
| <span class="macro">assert_eq!</span>(slice, <span class="kw-2">&</span>[<span class="string">'a'</span>, <span class="string">'b'</span>]); |
| <span class="macro">assert_eq!</span>(last, <span class="kw-2">&</span><span class="string">'d'</span>);</code></pre></div> |
| </div></details></div><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.sort_floats" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#4186">source</a><h4 class="code-header">pub fn <a href="#method.sort_floats" class="fnname">sort_floats</a>(&mut self)</h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>sort_floats</code>)</span></div></span></summary><div class="docblock"><p>Sorts the slice of floats.</p> |
| <p>This sort is in-place (i.e. does not allocate), <em>O</em>(<em>n</em> * log(<em>n</em>)) worst-case, and uses |
| the ordering defined by <a href="https://doc.rust-lang.org/nightly/std/primitive.f32.html#method.total_cmp" title="f32::total_cmp"><code>f32::total_cmp</code></a>.</p> |
| <h5 id="current-implementation-6"><a href="#current-implementation-6">Current implementation</a></h5> |
| <p>This uses the same sorting algorithm as <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.sort_unstable_by"><code>sort_unstable_by</code></a>.</p> |
| <h5 id="examples-96"><a href="#examples-96">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(sort_floats)] |
| </span><span class="kw">let </span><span class="kw-2">mut </span>v = [<span class="number">2.6</span>, -<span class="number">5e-8</span>, f32::NAN, <span class="number">8.29</span>, f32::INFINITY, -<span class="number">1.0</span>, <span class="number">0.0</span>, -f32::INFINITY, -<span class="number">0.0</span>]; |
| |
| v.sort_floats(); |
| <span class="kw">let </span>sorted = [-f32::INFINITY, -<span class="number">1.0</span>, -<span class="number">5e-8</span>, -<span class="number">0.0</span>, <span class="number">0.0</span>, <span class="number">2.6</span>, <span class="number">8.29</span>, f32::INFINITY, f32::NAN]; |
| <span class="macro">assert_eq!</span>(<span class="kw-2">&</span>v[..<span class="number">8</span>], <span class="kw-2">&</span>sorted[..<span class="number">8</span>]); |
| <span class="macro">assert!</span>(v[<span class="number">8</span>].is_nan());</code></pre></div> |
| </div></details></div><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.is_ascii" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.23.0">1.23.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/ascii.rs.html#15">source</a></span><h4 class="code-header">pub fn <a href="#method.is_ascii" class="fnname">is_ascii</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Checks if all bytes in this slice are within the ASCII range.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.eq_ignore_ascii_case" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.23.0">1.23.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/ascii.rs.html#26">source</a></span><h4 class="code-header">pub fn <a href="#method.eq_ignore_ascii_case" class="fnname">eq_ignore_ascii_case</a>(&self, other: &[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>]) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Checks that two slices are an ASCII case-insensitive match.</p> |
| <p>Same as <code>to_ascii_lowercase(a) == to_ascii_lowercase(b)</code>, |
| but without allocating and copying temporaries.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.make_ascii_uppercase" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.23.0">1.23.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/ascii.rs.html#41">source</a></span><h4 class="code-header">pub fn <a href="#method.make_ascii_uppercase" class="fnname">make_ascii_uppercase</a>(&mut self)</h4></section></summary><div class="docblock"><p>Converts this slice to its ASCII upper case equivalent in-place.</p> |
| <p>ASCII letters ‘a’ to ‘z’ are mapped to ‘A’ to ‘Z’, |
| but non-ASCII letters are unchanged.</p> |
| <p>To return a new uppercased value without modifying the existing one, use |
| <a href="#method.to_ascii_uppercase"><code>to_ascii_uppercase</code></a>.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.make_ascii_lowercase" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.23.0">1.23.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/ascii.rs.html#58">source</a></span><h4 class="code-header">pub fn <a href="#method.make_ascii_lowercase" class="fnname">make_ascii_lowercase</a>(&mut self)</h4></section></summary><div class="docblock"><p>Converts this slice to its ASCII lower case equivalent in-place.</p> |
| <p>ASCII letters ‘A’ to ‘Z’ are mapped to ‘a’ to ‘z’, |
| but non-ASCII letters are unchanged.</p> |
| <p>To return a new lowercased value without modifying the existing one, use |
| <a href="#method.to_ascii_lowercase"><code>to_ascii_lowercase</code></a>.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.escape_ascii" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.60.0">1.60.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/slice/ascii.rs.html#78">source</a></span><h4 class="code-header">pub fn <a href="#method.escape_ascii" class="fnname">escape_ascii</a>(&self) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/slice/ascii/struct.EscapeAscii.html" title="struct core::slice::ascii::EscapeAscii">EscapeAscii</a><'_></h4></section></summary><div class="docblock"><p>Returns an iterator that produces an escaped version of this slice, |
| treating it as an ASCII string.</p> |
| <h5 id="examples-97"><a href="#examples-97">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code> |
| <span class="kw">let </span>s = <span class="string">b"0\t\r\n'\"\\\x9d"</span>; |
| <span class="kw">let </span>escaped = s.escape_ascii().to_string(); |
| <span class="macro">assert_eq!</span>(escaped, <span class="string">"0\\t\\r\\n\\'\\\"\\\\\\x9d"</span>);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.trim_ascii_start" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/ascii.rs.html#97">source</a><h4 class="code-header">pub fn <a href="#method.trim_ascii_start" class="fnname">trim_ascii_start</a>(&self) -> &[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>]<span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<span class="notable-traits-tooltiptext"><span class="docblock"><span class="notable">Notable traits for &[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>]</span><code class="content"><span class="where fmt-newline">impl <a class="trait" href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html" title="trait std::io::Read">Read</a> for &[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>]</span><span class="where fmt-newline">impl <a class="trait" href="https://doc.rust-lang.org/nightly/std/io/trait.Write.html" title="trait std::io::Write">Write</a> for &mut [<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>]</span></code></span></span></span></span></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>byte_slice_trim_ascii</code>)</span></div></span></summary><div class="docblock"><p>Returns a byte slice with leading ASCII whitespace bytes removed.</p> |
| <p>‘Whitespace’ refers to the definition used by |
| <code>u8::is_ascii_whitespace</code>.</p> |
| <h5 id="examples-98"><a href="#examples-98">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(byte_slice_trim_ascii)] |
| |
| </span><span class="macro">assert_eq!</span>(<span class="string">b" \t hello world\n"</span>.trim_ascii_start(), <span class="string">b"hello world\n"</span>); |
| <span class="macro">assert_eq!</span>(<span class="string">b" "</span>.trim_ascii_start(), <span class="string">b""</span>); |
| <span class="macro">assert_eq!</span>(<span class="string">b""</span>.trim_ascii_start(), <span class="string">b""</span>);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.trim_ascii_end" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/ascii.rs.html#126">source</a><h4 class="code-header">pub fn <a href="#method.trim_ascii_end" class="fnname">trim_ascii_end</a>(&self) -> &[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>]<span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<span class="notable-traits-tooltiptext"><span class="docblock"><span class="notable">Notable traits for &[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>]</span><code class="content"><span class="where fmt-newline">impl <a class="trait" href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html" title="trait std::io::Read">Read</a> for &[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>]</span><span class="where fmt-newline">impl <a class="trait" href="https://doc.rust-lang.org/nightly/std/io/trait.Write.html" title="trait std::io::Write">Write</a> for &mut [<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>]</span></code></span></span></span></span></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>byte_slice_trim_ascii</code>)</span></div></span></summary><div class="docblock"><p>Returns a byte slice with trailing ASCII whitespace bytes removed.</p> |
| <p>‘Whitespace’ refers to the definition used by |
| <code>u8::is_ascii_whitespace</code>.</p> |
| <h5 id="examples-99"><a href="#examples-99">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(byte_slice_trim_ascii)] |
| |
| </span><span class="macro">assert_eq!</span>(<span class="string">b"\r hello world\n "</span>.trim_ascii_end(), <span class="string">b"\r hello world"</span>); |
| <span class="macro">assert_eq!</span>(<span class="string">b" "</span>.trim_ascii_end(), <span class="string">b""</span>); |
| <span class="macro">assert_eq!</span>(<span class="string">b""</span>.trim_ascii_end(), <span class="string">b""</span>);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.trim_ascii" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/ascii.rs.html#156">source</a><h4 class="code-header">pub fn <a href="#method.trim_ascii" class="fnname">trim_ascii</a>(&self) -> &[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>]<span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<span class="notable-traits-tooltiptext"><span class="docblock"><span class="notable">Notable traits for &[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>]</span><code class="content"><span class="where fmt-newline">impl <a class="trait" href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html" title="trait std::io::Read">Read</a> for &[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>]</span><span class="where fmt-newline">impl <a class="trait" href="https://doc.rust-lang.org/nightly/std/io/trait.Write.html" title="trait std::io::Write">Write</a> for &mut [<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>]</span></code></span></span></span></span></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>byte_slice_trim_ascii</code>)</span></div></span></summary><div class="docblock"><p>Returns a byte slice with leading and trailing ASCII whitespace bytes |
| removed.</p> |
| <p>‘Whitespace’ refers to the definition used by |
| <code>u8::is_ascii_whitespace</code>.</p> |
| <h5 id="examples-100"><a href="#examples-100">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(byte_slice_trim_ascii)] |
| |
| </span><span class="macro">assert_eq!</span>(<span class="string">b"\r hello world\n "</span>.trim_ascii(), <span class="string">b"hello world"</span>); |
| <span class="macro">assert_eq!</span>(<span class="string">b" "</span>.trim_ascii(), <span class="string">b""</span>); |
| <span class="macro">assert_eq!</span>(<span class="string">b""</span>.trim_ascii(), <span class="string">b""</span>);</code></pre></div> |
| </div></details></div><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.flatten" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#4111">source</a><h4 class="code-header">pub fn <a href="#method.flatten" class="fnname">flatten</a>(&self) -> &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<span class="notable-traits-tooltiptext"><span class="docblock"><span class="notable">Notable traits for &[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>]</span><code class="content"><span class="where fmt-newline">impl <a class="trait" href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html" title="trait std::io::Read">Read</a> for &[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>]</span><span class="where fmt-newline">impl <a class="trait" href="https://doc.rust-lang.org/nightly/std/io/trait.Write.html" title="trait std::io::Write">Write</a> for &mut [<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>]</span></code></span></span></span></span></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_flatten</code>)</span></div></span></summary><div class="docblock"><p>Takes a <code>&[[T; N]]</code>, and flattens it to a <code>&[T]</code>.</p> |
| <h5 id="panics-40"><a href="#panics-40">Panics</a></h5> |
| <p>This panics if the length of the resulting slice would overflow a <code>usize</code>.</p> |
| <p>This is only possible when flattening a slice of arrays of zero-sized |
| types, and thus tends to be irrelevant in practice. If |
| <code>size_of::<T>() > 0</code>, this will never panic.</p> |
| <h5 id="examples-101"><a href="#examples-101">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(slice_flatten)] |
| |
| </span><span class="macro">assert_eq!</span>([[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>], [<span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>]].flatten(), <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>]); |
| |
| <span class="macro">assert_eq!</span>( |
| [[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>], [<span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>]].flatten(), |
| [[<span class="number">1</span>, <span class="number">2</span>], [<span class="number">3</span>, <span class="number">4</span>], [<span class="number">5</span>, <span class="number">6</span>]].flatten(), |
| ); |
| |
| <span class="kw">let </span>slice_of_empty_arrays: <span class="kw-2">&</span>[[i32; <span class="number">0</span>]] = <span class="kw-2">&</span>[[], [], [], [], []]; |
| <span class="macro">assert!</span>(slice_of_empty_arrays.flatten().is_empty()); |
| |
| <span class="kw">let </span>empty_slice_of_arrays: <span class="kw-2">&</span>[[u32; <span class="number">10</span>]] = <span class="kw-2">&</span>[]; |
| <span class="macro">assert!</span>(empty_slice_of_arrays.flatten().is_empty());</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.flatten_mut" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#4149">source</a><h4 class="code-header">pub fn <a href="#method.flatten_mut" class="fnname">flatten_mut</a>(&mut self) -> &mut <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<span class="notable-traits-tooltiptext"><span class="docblock"><span class="notable">Notable traits for &[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>]</span><code class="content"><span class="where fmt-newline">impl <a class="trait" href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html" title="trait std::io::Read">Read</a> for &[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>]</span><span class="where fmt-newline">impl <a class="trait" href="https://doc.rust-lang.org/nightly/std/io/trait.Write.html" title="trait std::io::Write">Write</a> for &mut [<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>]</span></code></span></span></span></span></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>slice_flatten</code>)</span></div></span></summary><div class="docblock"><p>Takes a <code>&mut [[T; N]]</code>, and flattens it to a <code>&mut [T]</code>.</p> |
| <h5 id="panics-41"><a href="#panics-41">Panics</a></h5> |
| <p>This panics if the length of the resulting slice would overflow a <code>usize</code>.</p> |
| <p>This is only possible when flattening a slice of arrays of zero-sized |
| types, and thus tends to be irrelevant in practice. If |
| <code>size_of::<T>() > 0</code>, this will never panic.</p> |
| <h5 id="examples-102"><a href="#examples-102">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(slice_flatten)] |
| |
| </span><span class="kw">fn </span>add_5_to_all(slice: <span class="kw-2">&mut </span>[i32]) { |
| <span class="kw">for </span>i <span class="kw">in </span>slice { |
| <span class="kw-2">*</span>i += <span class="number">5</span>; |
| } |
| } |
| |
| <span class="kw">let </span><span class="kw-2">mut </span>array = [[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>], [<span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>], [<span class="number">7</span>, <span class="number">8</span>, <span class="number">9</span>]]; |
| add_5_to_all(array.flatten_mut()); |
| <span class="macro">assert_eq!</span>(array, [[<span class="number">6</span>, <span class="number">7</span>, <span class="number">8</span>], [<span class="number">9</span>, <span class="number">10</span>, <span class="number">11</span>], [<span class="number">12</span>, <span class="number">13</span>, <span class="number">14</span>]]);</code></pre></div> |
| </div></details></div><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.sort_floats-1" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/slice/mod.rs.html#4215">source</a><h4 class="code-header">pub fn <a href="#method.sort_floats-1" class="fnname">sort_floats</a>(&mut self)</h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>sort_floats</code>)</span></div></span></summary><div class="docblock"><p>Sorts the slice of floats.</p> |
| <p>This sort is in-place (i.e. does not allocate), <em>O</em>(<em>n</em> * log(<em>n</em>)) worst-case, and uses |
| the ordering defined by <a href="https://doc.rust-lang.org/nightly/std/primitive.f64.html#method.total_cmp" title="f64::total_cmp"><code>f64::total_cmp</code></a>.</p> |
| <h5 id="current-implementation-7"><a href="#current-implementation-7">Current implementation</a></h5> |
| <p>This uses the same sorting algorithm as <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.sort_unstable_by"><code>sort_unstable_by</code></a>.</p> |
| <h5 id="examples-103"><a href="#examples-103">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(sort_floats)] |
| </span><span class="kw">let </span><span class="kw-2">mut </span>v = [<span class="number">2.6</span>, -<span class="number">5e-8</span>, f64::NAN, <span class="number">8.29</span>, f64::INFINITY, -<span class="number">1.0</span>, <span class="number">0.0</span>, -f64::INFINITY, -<span class="number">0.0</span>]; |
| |
| v.sort_floats(); |
| <span class="kw">let </span>sorted = [-f64::INFINITY, -<span class="number">1.0</span>, -<span class="number">5e-8</span>, -<span class="number">0.0</span>, <span class="number">0.0</span>, <span class="number">2.6</span>, <span class="number">8.29</span>, f64::INFINITY, f64::NAN]; |
| <span class="macro">assert_eq!</span>(<span class="kw-2">&</span>v[..<span class="number">8</span>], <span class="kw-2">&</span>sorted[..<span class="number">8</span>]); |
| <span class="macro">assert!</span>(v[<span class="number">8</span>].is_nan());</code></pre></div> |
| </div></details></div><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.sort" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/alloc/slice.rs.html#202-204">source</a></span><h4 class="code-header">pub fn <a href="#method.sort" class="fnname">sort</a>(&mut self)<span class="where fmt-newline">where<br> T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html" title="trait core::cmp::Ord">Ord</a>,</span></h4></section></summary><div class="docblock"><p>Sorts the slice.</p> |
| <p>This sort is stable (i.e., does not reorder equal elements) and <em>O</em>(<em>n</em> * log(<em>n</em>)) worst-case.</p> |
| <p>When applicable, unstable sorting is preferred because it is generally faster than stable |
| sorting and it doesn’t allocate auxiliary memory. |
| See <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.sort_unstable"><code>sort_unstable</code></a>.</p> |
| <h5 id="current-implementation-8"><a href="#current-implementation-8">Current implementation</a></h5> |
| <p>The current algorithm is an adaptive, iterative merge sort inspired by |
| <a href="https://en.wikipedia.org/wiki/Timsort">timsort</a>. |
| It is designed to be very fast in cases where the slice is nearly sorted, or consists of |
| two or more sorted sequences concatenated one after another.</p> |
| <p>Also, it allocates temporary storage half the size of <code>self</code>, but for short slices a |
| non-allocating insertion sort is used instead.</p> |
| <h5 id="examples-104"><a href="#examples-104">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>v = [-<span class="number">5</span>, <span class="number">4</span>, <span class="number">1</span>, -<span class="number">3</span>, <span class="number">2</span>]; |
| |
| v.sort(); |
| <span class="macro">assert!</span>(v == [-<span class="number">5</span>, -<span class="number">3</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">4</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.sort_by" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/alloc/slice.rs.html#258-260">source</a></span><h4 class="code-header">pub fn <a href="#method.sort_by" class="fnname">sort_by</a><F>(&mut self, compare: F)<span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>T, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>T) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/cmp/enum.Ordering.html" title="enum core::cmp::Ordering">Ordering</a>,</span></h4></section></summary><div class="docblock"><p>Sorts the slice with a comparator function.</p> |
| <p>This sort is stable (i.e., does not reorder equal elements) and <em>O</em>(<em>n</em> * log(<em>n</em>)) worst-case.</p> |
| <p>The comparator function must define a total ordering for the elements in the slice. If |
| the ordering is not total, the order of the elements is unspecified. An order is a |
| total order if it is (for all <code>a</code>, <code>b</code> and <code>c</code>):</p> |
| <ul> |
| <li>total and antisymmetric: exactly one of <code>a < b</code>, <code>a == b</code> or <code>a > b</code> is true, and</li> |
| <li>transitive, <code>a < b</code> and <code>b < c</code> implies <code>a < c</code>. The same must hold for both <code>==</code> and <code>></code>.</li> |
| </ul> |
| <p>For example, while <a href="https://doc.rust-lang.org/nightly/std/primitive.f64.html" title="f64"><code>f64</code></a> doesn’t implement <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html" title="Ord"><code>Ord</code></a> because <code>NaN != NaN</code>, we can use |
| <code>partial_cmp</code> as our sort function when we know the slice doesn’t contain a <code>NaN</code>.</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>floats = [<span class="number">5f64</span>, <span class="number">4.0</span>, <span class="number">1.0</span>, <span class="number">3.0</span>, <span class="number">2.0</span>]; |
| floats.sort_by(|a, b| a.partial_cmp(b).unwrap()); |
| <span class="macro">assert_eq!</span>(floats, [<span class="number">1.0</span>, <span class="number">2.0</span>, <span class="number">3.0</span>, <span class="number">4.0</span>, <span class="number">5.0</span>]);</code></pre></div> |
| <p>When applicable, unstable sorting is preferred because it is generally faster than stable |
| sorting and it doesn’t allocate auxiliary memory. |
| See <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.sort_unstable_by"><code>sort_unstable_by</code></a>.</p> |
| <h5 id="current-implementation-9"><a href="#current-implementation-9">Current implementation</a></h5> |
| <p>The current algorithm is an adaptive, iterative merge sort inspired by |
| <a href="https://en.wikipedia.org/wiki/Timsort">timsort</a>. |
| It is designed to be very fast in cases where the slice is nearly sorted, or consists of |
| two or more sorted sequences concatenated one after another.</p> |
| <p>Also, it allocates temporary storage half the size of <code>self</code>, but for short slices a |
| non-allocating insertion sort is used instead.</p> |
| <h5 id="examples-105"><a href="#examples-105">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>v = [<span class="number">5</span>, <span class="number">4</span>, <span class="number">1</span>, <span class="number">3</span>, <span class="number">2</span>]; |
| v.sort_by(|a, b| a.cmp(b)); |
| <span class="macro">assert!</span>(v == [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>]); |
| |
| <span class="comment">// reverse sorting |
| </span>v.sort_by(|a, b| b.cmp(a)); |
| <span class="macro">assert!</span>(v == [<span class="number">5</span>, <span class="number">4</span>, <span class="number">3</span>, <span class="number">2</span>, <span class="number">1</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.sort_by_key" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.7.0">1.7.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/alloc/slice.rs.html#300-303">source</a></span><h4 class="code-header">pub fn <a href="#method.sort_by_key" class="fnname">sort_by_key</a><K, F>(&mut self, f: F)<span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>T) -> K,<br> K: <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html" title="trait core::cmp::Ord">Ord</a>,</span></h4></section></summary><div class="docblock"><p>Sorts the slice with a key extraction function.</p> |
| <p>This sort is stable (i.e., does not reorder equal elements) and <em>O</em>(<em>m</em> * <em>n</em> * log(<em>n</em>)) |
| worst-case, where the key function is <em>O</em>(<em>m</em>).</p> |
| <p>For expensive key functions (e.g. functions that are not simple property accesses or |
| basic operations), <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.sort_by_cached_key"><code>sort_by_cached_key</code></a> is likely to be |
| significantly faster, as it does not recompute element keys.</p> |
| <p>When applicable, unstable sorting is preferred because it is generally faster than stable |
| sorting and it doesn’t allocate auxiliary memory. |
| See <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.sort_unstable_by_key"><code>sort_unstable_by_key</code></a>.</p> |
| <h5 id="current-implementation-10"><a href="#current-implementation-10">Current implementation</a></h5> |
| <p>The current algorithm is an adaptive, iterative merge sort inspired by |
| <a href="https://en.wikipedia.org/wiki/Timsort">timsort</a>. |
| It is designed to be very fast in cases where the slice is nearly sorted, or consists of |
| two or more sorted sequences concatenated one after another.</p> |
| <p>Also, it allocates temporary storage half the size of <code>self</code>, but for short slices a |
| non-allocating insertion sort is used instead.</p> |
| <h5 id="examples-106"><a href="#examples-106">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>v = [-<span class="number">5i32</span>, <span class="number">4</span>, <span class="number">1</span>, -<span class="number">3</span>, <span class="number">2</span>]; |
| |
| v.sort_by_key(|k| k.abs()); |
| <span class="macro">assert!</span>(v == [<span class="number">1</span>, <span class="number">2</span>, -<span class="number">3</span>, <span class="number">4</span>, -<span class="number">5</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.sort_by_cached_key" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.34.0">1.34.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/alloc/slice.rs.html#347-350">source</a></span><h4 class="code-header">pub fn <a href="#method.sort_by_cached_key" class="fnname">sort_by_cached_key</a><K, F>(&mut self, f: F)<span class="where fmt-newline">where<br> F: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/function/trait.FnMut.html" title="trait core::ops::function::FnMut">FnMut</a>(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>T) -> K,<br> K: <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html" title="trait core::cmp::Ord">Ord</a>,</span></h4></section></summary><div class="docblock"><p>Sorts the slice with a key extraction function.</p> |
| <p>During sorting, the key function is called at most once per element, by using |
| temporary storage to remember the results of key evaluation. |
| The order of calls to the key function is unspecified and may change in future versions |
| of the standard library.</p> |
| <p>This sort is stable (i.e., does not reorder equal elements) and <em>O</em>(<em>m</em> * <em>n</em> + <em>n</em> * log(<em>n</em>)) |
| worst-case, where the key function is <em>O</em>(<em>m</em>).</p> |
| <p>For simple key functions (e.g., functions that are property accesses or |
| basic operations), <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.sort_by_key"><code>sort_by_key</code></a> is likely to be |
| faster.</p> |
| <h5 id="current-implementation-11"><a href="#current-implementation-11">Current implementation</a></h5> |
| <p>The current algorithm is based on <a href="https://github.com/orlp/pdqsort">pattern-defeating quicksort</a> by Orson Peters, |
| which combines the fast average case of randomized quicksort with the fast worst case of |
| heapsort, while achieving linear time on slices with certain patterns. It uses some |
| randomization to avoid degenerate cases, but with a fixed seed to always provide |
| deterministic behavior.</p> |
| <p>In the worst case, the algorithm allocates temporary storage in a <code>Vec<(K, usize)></code> the |
| length of the slice.</p> |
| <h5 id="examples-107"><a href="#examples-107">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span><span class="kw-2">mut </span>v = [-<span class="number">5i32</span>, <span class="number">4</span>, <span class="number">32</span>, -<span class="number">3</span>, <span class="number">2</span>]; |
| |
| v.sort_by_cached_key(|k| k.to_string()); |
| <span class="macro">assert!</span>(v == [-<span class="number">3</span>, -<span class="number">5</span>, <span class="number">2</span>, <span class="number">32</span>, <span class="number">4</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.to_vec" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/alloc/slice.rs.html#407-409">source</a></span><h4 class="code-header">pub fn <a href="#method.to_vec" class="fnname">to_vec</a>(&self) -> <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a><T, <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/alloc/struct.Global.html" title="struct alloc::alloc::Global">Global</a>><span class="where fmt-newline">where<br> T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>,</span></h4></section></summary><div class="docblock"><p>Copies <code>self</code> into a new <code>Vec</code>.</p> |
| <h5 id="examples-108"><a href="#examples-108">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">let </span>s = [<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>]; |
| <span class="kw">let </span>x = s.to_vec(); |
| <span class="comment">// Here, `s` and `x` can be modified independently.</span></code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.to_vec_in" class="method has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/alloc/slice.rs.html#431-433">source</a><h4 class="code-header">pub fn <a href="#method.to_vec_in" class="fnname">to_vec_in</a><A>(&self, alloc: A) -> <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a><T, A><span class="where fmt-newline">where<br> A: <a class="trait" href="https://doc.rust-lang.org/nightly/core/alloc/trait.Allocator.html" title="trait core::alloc::Allocator">Allocator</a>,<br> T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>,</span></h4></section><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>allocator_api</code>)</span></div></span></summary><div class="docblock"><p>Copies <code>self</code> into a new <code>Vec</code> with an allocator.</p> |
| <h5 id="examples-109"><a href="#examples-109">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attribute">#![feature(allocator_api)] |
| |
| </span><span class="kw">use </span>std::alloc::System; |
| |
| <span class="kw">let </span>s = [<span class="number">10</span>, <span class="number">40</span>, <span class="number">30</span>]; |
| <span class="kw">let </span>x = s.to_vec_in(System); |
| <span class="comment">// Here, `s` and `x` can be modified independently.</span></code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.repeat" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.40.0">1.40.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/alloc/slice.rs.html#484-486">source</a></span><h4 class="code-header">pub fn <a href="#method.repeat" class="fnname">repeat</a>(&self, n: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>) -> <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a><T, <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/alloc/struct.Global.html" title="struct alloc::alloc::Global">Global</a>><span class="where fmt-newline">where<br> T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Copy.html" title="trait core::marker::Copy">Copy</a>,</span></h4></section></summary><div class="docblock"><p>Creates a vector by repeating a slice <code>n</code> times.</p> |
| <h5 id="panics-42"><a href="#panics-42">Panics</a></h5> |
| <p>This function will panic if the capacity would overflow.</p> |
| <h5 id="examples-110"><a href="#examples-110">Examples</a></h5> |
| <p>Basic usage:</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="macro">assert_eq!</span>([<span class="number">1</span>, <span class="number">2</span>].repeat(<span class="number">3</span>), <span class="macro">vec!</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">1</span>, <span class="number">2</span>]);</code></pre></div> |
| <p>A panic upon overflow:</p> |
| |
| <div class="example-wrap should_panic"><div class='tooltip'>ⓘ</div><pre class="rust rust-example-rendered"><code><span class="comment">// this will panic at runtime |
| </span><span class="string">b"0123456789abcdef"</span>.repeat(usize::MAX);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.concat" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/alloc/slice.rs.html#552-554">source</a></span><h4 class="code-header">pub fn <a href="#method.concat" class="fnname">concat</a><Item>(&self) -> <<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a> as <a class="trait" href="https://doc.rust-lang.org/nightly/alloc/slice/trait.Concat.html" title="trait alloc::slice::Concat">Concat</a><Item>>::<a class="associatedtype" href="https://doc.rust-lang.org/nightly/alloc/slice/trait.Concat.html#associatedtype.Output" title="type alloc::slice::Concat::Output">Output</a><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<span class="notable-traits-tooltiptext"><span class="docblock"><span class="notable">Notable traits for &[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>]</span><code class="content"><span class="where fmt-newline">impl <a class="trait" href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html" title="trait std::io::Read">Read</a> for &[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>]</span><span class="where fmt-newline">impl <a class="trait" href="https://doc.rust-lang.org/nightly/std/io/trait.Write.html" title="trait std::io::Write">Write</a> for &mut [<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>]</span></code></span></span></span></span><span class="where fmt-newline">where<br> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/alloc/slice/trait.Concat.html" title="trait alloc::slice::Concat">Concat</a><Item>,<br> Item: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class="docblock"><p>Flattens a slice of <code>T</code> into a single value <code>Self::Output</code>.</p> |
| <h5 id="examples-111"><a href="#examples-111">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="macro">assert_eq!</span>([<span class="string">"hello"</span>, <span class="string">"world"</span>].concat(), <span class="string">"helloworld"</span>); |
| <span class="macro">assert_eq!</span>([[<span class="number">1</span>, <span class="number">2</span>], [<span class="number">3</span>, <span class="number">4</span>]].concat(), [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.join" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.3.0">1.3.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/alloc/slice.rs.html#571-573">source</a></span><h4 class="code-header">pub fn <a href="#method.join" class="fnname">join</a><Separator>(&self, sep: Separator) -> <<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a> as <a class="trait" href="https://doc.rust-lang.org/nightly/alloc/slice/trait.Join.html" title="trait alloc::slice::Join">Join</a><Separator>>::<a class="associatedtype" href="https://doc.rust-lang.org/nightly/alloc/slice/trait.Join.html#associatedtype.Output" title="type alloc::slice::Join::Output">Output</a><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<span class="notable-traits-tooltiptext"><span class="docblock"><span class="notable">Notable traits for &[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>]</span><code class="content"><span class="where fmt-newline">impl <a class="trait" href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html" title="trait std::io::Read">Read</a> for &[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>]</span><span class="where fmt-newline">impl <a class="trait" href="https://doc.rust-lang.org/nightly/std/io/trait.Write.html" title="trait std::io::Write">Write</a> for &mut [<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>]</span></code></span></span></span></span><span class="where fmt-newline">where<br> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/alloc/slice/trait.Join.html" title="trait alloc::slice::Join">Join</a><Separator>,</span></h4></section></summary><div class="docblock"><p>Flattens a slice of <code>T</code> into a single value <code>Self::Output</code>, placing a |
| given separator between each.</p> |
| <h5 id="examples-112"><a href="#examples-112">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="macro">assert_eq!</span>([<span class="string">"hello"</span>, <span class="string">"world"</span>].join(<span class="string">" "</span>), <span class="string">"hello world"</span>); |
| <span class="macro">assert_eq!</span>([[<span class="number">1</span>, <span class="number">2</span>], [<span class="number">3</span>, <span class="number">4</span>]].join(<span class="kw-2">&</span><span class="number">0</span>), [<span class="number">1</span>, <span class="number">2</span>, <span class="number">0</span>, <span class="number">3</span>, <span class="number">4</span>]); |
| <span class="macro">assert_eq!</span>([[<span class="number">1</span>, <span class="number">2</span>], [<span class="number">3</span>, <span class="number">4</span>]].join(<span class="kw-2">&</span>[<span class="number">0</span>, <span class="number">0</span>][..]), [<span class="number">1</span>, <span class="number">2</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">3</span>, <span class="number">4</span>]);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.connect" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/alloc/slice.rs.html#591-593">source</a></span><h4 class="code-header">pub fn <a href="#method.connect" class="fnname">connect</a><Separator>(<br> &self,<br> sep: Separator<br>) -> <<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a> as <a class="trait" href="https://doc.rust-lang.org/nightly/alloc/slice/trait.Join.html" title="trait alloc::slice::Join">Join</a><Separator>>::<a class="associatedtype" href="https://doc.rust-lang.org/nightly/alloc/slice/trait.Join.html#associatedtype.Output" title="type alloc::slice::Join::Output">Output</a><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<span class="notable-traits-tooltiptext"><span class="docblock"><span class="notable">Notable traits for &[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>]</span><code class="content"><span class="where fmt-newline">impl <a class="trait" href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html" title="trait std::io::Read">Read</a> for &[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>]</span><span class="where fmt-newline">impl <a class="trait" href="https://doc.rust-lang.org/nightly/std/io/trait.Write.html" title="trait std::io::Write">Write</a> for &mut [<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>]</span></code></span></span></span></span><span class="where fmt-newline">where<br> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[T]</a>: <a class="trait" href="https://doc.rust-lang.org/nightly/alloc/slice/trait.Join.html" title="trait alloc::slice::Join">Join</a><Separator>,</span></h4></section><span class="item-info"><div class="stab deprecated"><span class="emoji">👎</span><span>Deprecated since 1.3.0: renamed to join</span></div></span></summary><div class="docblock"><p>Flattens a slice of <code>T</code> into a single value <code>Self::Output</code>, placing a |
| given separator between each.</p> |
| <h5 id="examples-113"><a href="#examples-113">Examples</a></h5> |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="macro">assert_eq!</span>([<span class="string">"hello"</span>, <span class="string">"world"</span>].connect(<span class="string">" "</span>), <span class="string">"hello world"</span>); |
| <span class="macro">assert_eq!</span>([[<span class="number">1</span>, <span class="number">2</span>], [<span class="number">3</span>, <span class="number">4</span>]].connect(<span class="kw-2">&</span><span class="number">0</span>), [<span class="number">1</span>, <span class="number">2</span>, <span class="number">0</span>, <span class="number">3</span>, <span class="number">4</span>]);</code></pre></div> |
| </div></details></div><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.to_ascii_uppercase" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.23.0">1.23.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/alloc/slice.rs.html#616">source</a></span><h4 class="code-header">pub fn <a href="#method.to_ascii_uppercase" class="fnname">to_ascii_uppercase</a>(&self) -> <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>, <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/alloc/struct.Global.html" title="struct alloc::alloc::Global">Global</a>></h4></section></summary><div class="docblock"><p>Returns a vector containing a copy of this slice where each byte |
| is mapped to its ASCII upper case equivalent.</p> |
| <p>ASCII letters ‘a’ to ‘z’ are mapped to ‘A’ to ‘Z’, |
| but non-ASCII letters are unchanged.</p> |
| <p>To uppercase the value in-place, use <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.make_ascii_uppercase"><code>make_ascii_uppercase</code></a>.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.to_ascii_lowercase" class="method has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.23.0">1.23.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/alloc/slice.rs.html#637">source</a></span><h4 class="code-header">pub fn <a href="#method.to_ascii_lowercase" class="fnname">to_ascii_lowercase</a>(&self) -> <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>, <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/alloc/struct.Global.html" title="struct alloc::alloc::Global">Global</a>></h4></section></summary><div class="docblock"><p>Returns a vector containing a copy of this slice where each byte |
| is mapped to its ASCII lower case equivalent.</p> |
| <p>ASCII letters ‘A’ to ‘Z’ are mapped to ‘a’ to ‘z’, |
| but non-ASCII letters are unchanged.</p> |
| <p>To lowercase the value in-place, use <a href="https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.make_ascii_lowercase"><code>make_ascii_lowercase</code></a>.</p> |
| </div></details></div></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor"></a></h2><div id="trait-implementations-list"><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-Clone-for-ImageBuffer%3CP%2C%20Container%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#1005-1018">source</a><a href="#impl-Clone-for-ImageBuffer%3CP%2C%20Container%3E" class="anchor"></a><h3 class="code-header">impl<P, Container> <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a> for <a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><P, Container><span class="where fmt-newline">where<br> P: <a class="trait" href="trait.Pixel.html" title="trait image::Pixel">Pixel</a>,<br> Container: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a><Target = [P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>]> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.clone" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#1010-1017">source</a><a href="#method.clone" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#tymethod.clone" class="fnname">clone</a>(&self) -> <a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><P, Container></h4></section></summary><div class='docblock'>Returns a copy of the value. <a href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#tymethod.clone">Read more</a></div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.clone_from" class="method trait-impl has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/clone.rs.html#132-134">source</a></span><a href="#method.clone_from" class="anchor"></a><h4 class="code-header">const fn <a href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#method.clone_from" class="fnname">clone_from</a>(&mut self, source: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>Self)</h4></section></summary><div class='docblock'>Performs copy-assignment from <code>source</code>. <a href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#method.clone_from">Read more</a></div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-ConvertBuffer%3CImageBuffer%3CToType%2C%20Vec%3C%3CToType%20as%20Pixel%3E%3A%3ASubpixel%2C%20Global%3E%3E%3E-for-ImageBuffer%3CFromType%2C%20Container%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#1260-1289">source</a><a href="#impl-ConvertBuffer%3CImageBuffer%3CToType%2C%20Vec%3C%3CToType%20as%20Pixel%3E%3A%3ASubpixel%2C%20Global%3E%3E%3E-for-ImageBuffer%3CFromType%2C%20Container%3E" class="anchor"></a><h3 class="code-header">impl<'a, 'b, Container, FromType: <a class="trait" href="trait.Pixel.html" title="trait image::Pixel">Pixel</a> + 'static, ToType: <a class="trait" href="trait.Pixel.html" title="trait image::Pixel">Pixel</a> + 'static> <a class="trait" href="buffer/trait.ConvertBuffer.html" title="trait image::buffer::ConvertBuffer">ConvertBuffer</a><<a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><ToType, <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a><<ToType as <a class="trait" href="trait.Pixel.html" title="trait image::Pixel">Pixel</a>>::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>, <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/alloc/struct.Global.html" title="struct alloc::alloc::Global">Global</a>>>> for <a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><FromType, Container><span class="where fmt-newline">where<br> Container: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a><Target = [FromType::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>]>,<br> ToType: FromColor<FromType>,<br> FromType::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>: 'static,<br> ToType::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>: 'static,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.convert" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#1281-1288">source</a><a href="#method.convert" class="anchor"></a><h4 class="code-header">fn <a href="buffer/trait.ConvertBuffer.html#tymethod.convert" class="fnname">convert</a>(&self) -> <a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><ToType, <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/vec/struct.Vec.html" title="struct alloc::vec::Vec">Vec</a><ToType::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>>></h4></section></summary><div class="docblock"><h5 id="examples-114"><a href="#examples-114">Examples</a></h5> |
| <p>Convert RGB image to gray image.</p> |
| |
| <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>image::buffer::ConvertBuffer; |
| <span class="kw">use </span>image::GrayImage; |
| |
| <span class="kw">let </span>image_path = <span class="string">"examples/fractal.png"</span>; |
| <span class="kw">let </span>image = image::open(<span class="kw-2">&</span>image_path) |
| .expect(<span class="string">"Open file failed"</span>) |
| .to_rgba(); |
| |
| <span class="kw">let </span>gray_image: GrayImage = image.convert();</code></pre></div> |
| </div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-Debug-for-ImageBuffer%3CP%2C%20Container%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#608">source</a><a href="#impl-Debug-for-ImageBuffer%3CP%2C%20Container%3E" class="anchor"></a><h3 class="code-header">impl<P: <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a> + <a class="trait" href="trait.Pixel.html" title="trait image::Pixel">Pixel</a>, Container: <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a>> <a class="trait" href="https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a> for <a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><P, Container></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.fmt" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#608">source</a><a href="#method.fmt" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html#tymethod.fmt" class="fnname">fmt</a>(&self, f: &mut <a class="struct" href="https://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html" title="struct core::fmt::Formatter">Formatter</a><'_>) -> <a class="type" href="https://doc.rust-lang.org/nightly/core/fmt/type.Result.html" title="type core::fmt::Result">Result</a></h4></section></summary><div class='docblock'>Formats the value using the given formatter. <a href="https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html#tymethod.fmt">Read more</a></div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-Default-for-ImageBuffer%3CP%2C%20Container%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#942-955">source</a><a href="#impl-Default-for-ImageBuffer%3CP%2C%20Container%3E" class="anchor"></a><h3 class="code-header">impl<P, Container> <a class="trait" href="https://doc.rust-lang.org/nightly/core/default/trait.Default.html" title="trait core::default::Default">Default</a> for <a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><P, Container><span class="where fmt-newline">where<br> P: <a class="trait" href="trait.Pixel.html" title="trait image::Pixel">Pixel</a>,<br> Container: <a class="trait" href="https://doc.rust-lang.org/nightly/core/default/trait.Default.html" title="trait core::default::Default">Default</a>,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.default" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#947-954">source</a><a href="#method.default" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/default/trait.Default.html#tymethod.default" class="fnname">default</a>() -> Self</h4></section></summary><div class='docblock'>Returns the “default value” for a type. <a href="https://doc.rust-lang.org/nightly/core/default/trait.Default.html#tymethod.default">Read more</a></div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-Deref-for-ImageBuffer%3CP%2C%20Container%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#957-968">source</a><a href="#impl-Deref-for-ImageBuffer%3CP%2C%20Container%3E" class="anchor"></a><h3 class="code-header">impl<P, Container> <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a> for <a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><P, Container><span class="where fmt-newline">where<br> P: <a class="trait" href="trait.Pixel.html" title="trait image::Pixel">Pixel</a> + 'static,<br> P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>: 'static,<br> Container: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a><Target = [P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>]>,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle" open><summary><section id="associatedtype.Target" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.Target" class="anchor"></a><h4 class="code-header">type <a href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html#associatedtype.Target" class="associatedtype">Target</a> = [<P as <a class="trait" href="trait.Pixel.html" title="trait image::Pixel">Pixel</a>>::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>]</h4></section></summary><div class='docblock'>The resulting type after dereferencing.</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.deref" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#965-967">source</a><a href="#method.deref" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html#tymethod.deref" class="fnname">deref</a>(&self) -> &<Self as <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a>>::<a class="associatedtype" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html#associatedtype.Target" title="type core::ops::deref::Deref::Target">Target</a></h4></section></summary><div class='docblock'>Dereferences the value.</div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-DerefMut-for-ImageBuffer%3CP%2C%20Container%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#970-979">source</a><a href="#impl-DerefMut-for-ImageBuffer%3CP%2C%20Container%3E" class="anchor"></a><h3 class="code-header">impl<P, Container> <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.DerefMut.html" title="trait core::ops::deref::DerefMut">DerefMut</a> for <a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><P, Container><span class="where fmt-newline">where<br> P: <a class="trait" href="trait.Pixel.html" title="trait image::Pixel">Pixel</a> + 'static,<br> P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>: 'static,<br> Container: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a><Target = [P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>]> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.DerefMut.html" title="trait core::ops::deref::DerefMut">DerefMut</a>,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.deref_mut" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#976-978">source</a><a href="#method.deref_mut" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.DerefMut.html#tymethod.deref_mut" class="fnname">deref_mut</a>(&mut self) -> &mut <Self as <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a>>::<a class="associatedtype" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html#associatedtype.Target" title="type core::ops::deref::Deref::Target">Target</a></h4></section></summary><div class='docblock'>Mutably dereferences the value.</div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-GenericImage-for-ImageBuffer%3CP%2C%20Container%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#1053-1119">source</a><a href="#impl-GenericImage-for-ImageBuffer%3CP%2C%20Container%3E" class="anchor"></a><h3 class="code-header">impl<P, Container> <a class="trait" href="trait.GenericImage.html" title="trait image::GenericImage">GenericImage</a> for <a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><P, Container><span class="where fmt-newline">where<br> P: <a class="trait" href="trait.Pixel.html" title="trait image::Pixel">Pixel</a> + 'static,<br> Container: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a><Target = [P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>]> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.DerefMut.html" title="trait core::ops::deref::DerefMut">DerefMut</a>,<br> P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>: 'static,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.unsafe_put_pixel" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#1071-1075">source</a><a href="#method.unsafe_put_pixel" class="anchor"></a><h4 class="code-header">unsafe fn <a href="trait.GenericImage.html#method.unsafe_put_pixel" class="fnname">unsafe_put_pixel</a>(&mut self, x: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>, y: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>, pixel: P)</h4></section></summary><div class="docblock"><p>Puts a pixel at location (x, y), ignoring bounds checking.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.blend_pixel" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#1080-1082">source</a><a href="#method.blend_pixel" class="anchor"></a><h4 class="code-header">fn <a href="trait.GenericImage.html#tymethod.blend_pixel" class="fnname">blend_pixel</a>(&mut self, x: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>, y: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>, p: P)</h4></section></summary><div class="docblock"><p>Put a pixel at location (x, y), taking into account alpha channels</p> |
| <p>DEPRECATED: This method will be removed. Blend the pixel directly instead.</p> |
| </div></details><details class="rustdoc-toggle" open><summary><section id="associatedtype.InnerImage" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.InnerImage" class="anchor"></a><h4 class="code-header">type <a href="trait.GenericImage.html#associatedtype.InnerImage" class="associatedtype">InnerImage</a> = <a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><P, Container></h4></section></summary><div class='docblock'>Underlying image type. This is mainly used by SubImages in order to |
| always have a reference to the original image. This allows for less |
| indirections and it eases the use of nested SubImages. <a href="trait.GenericImage.html#associatedtype.InnerImage">Read more</a></div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.get_pixel_mut-1" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#1061-1063">source</a><a href="#method.get_pixel_mut-1" class="anchor"></a><h4 class="code-header">fn <a href="trait.GenericImage.html#tymethod.get_pixel_mut" class="fnname">get_pixel_mut</a>(&mut self, x: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>, y: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&mut </a>P</h4></section></summary><div class='docblock'>Gets a reference to the mutable pixel at location <code>(x, y)</code>. Indexed from top left. <a href="trait.GenericImage.html#tymethod.get_pixel_mut">Read more</a></div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.put_pixel-1" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#1065-1067">source</a><a href="#method.put_pixel-1" class="anchor"></a><h4 class="code-header">fn <a href="trait.GenericImage.html#tymethod.put_pixel" class="fnname">put_pixel</a>(&mut self, x: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>, y: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>, pixel: P)</h4></section></summary><div class='docblock'>Put a pixel at location (x, y). Indexed from top left. <a href="trait.GenericImage.html#tymethod.put_pixel">Read more</a></div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.copy_within-1" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#1084-1114">source</a><a href="#method.copy_within-1" class="anchor"></a><h4 class="code-header">fn <a href="trait.GenericImage.html#method.copy_within" class="fnname">copy_within</a>(&mut self, source: <a class="struct" href="math/struct.Rect.html" title="struct image::math::Rect">Rect</a>, x: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>, y: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></h4></section></summary><div class='docblock'>Copies all of the pixels from one part of this image to another part of this image. <a href="trait.GenericImage.html#method.copy_within">Read more</a></div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.inner_mut" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#1116-1118">source</a><a href="#method.inner_mut" class="anchor"></a><h4 class="code-header">fn <a href="trait.GenericImage.html#tymethod.inner_mut" class="fnname">inner_mut</a>(&mut self) -> &mut Self::<a class="associatedtype" href="trait.GenericImage.html#associatedtype.InnerImage" title="type image::GenericImage::InnerImage">InnerImage</a></h4></section></summary><div class='docblock'>Returns a mutable reference to the underlying image.</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.copy_from" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/image/image.rs.html#858-877">source</a><a href="#method.copy_from" class="anchor"></a><h4 class="code-header">fn <a href="trait.GenericImage.html#method.copy_from" class="fnname">copy_from</a><O>(&mut self, other: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>O, x: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>, y: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>) -> <a class="type" href="error/type.ImageResult.html" title="type image::error::ImageResult">ImageResult</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>><span class="where fmt-newline">where<br> O: <a class="trait" href="trait.GenericImageView.html" title="trait image::GenericImageView">GenericImageView</a><Pixel = Self::<a class="associatedtype" href="trait.GenericImageView.html#associatedtype.Pixel" title="type image::GenericImageView::Pixel">Pixel</a>>,</span></h4></section></summary><div class='docblock'>Copies all of the pixels from another image into this image. <a href="trait.GenericImage.html#method.copy_from">Read more</a></div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.sub_image" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/image/image.rs.html#927-935">source</a><a href="#method.sub_image" class="anchor"></a><h4 class="code-header">fn <a href="trait.GenericImage.html#method.sub_image" class="fnname">sub_image</a>(<br> &mut self,<br> x: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>,<br> y: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>,<br> width: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>,<br> height: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a><br>) -> <a class="struct" href="struct.SubImage.html" title="struct image::SubImage">SubImage</a><&mut Self::<a class="associatedtype" href="trait.GenericImage.html#associatedtype.InnerImage" title="type image::GenericImage::InnerImage">InnerImage</a>></h4></section></summary><div class='docblock'>Returns a mutable subimage that is a view into this image. |
| If you want an immutable subimage instead, use <a href="trait.GenericImageView.html#method.view" title="GenericImageView::view"><code>GenericImageView::view</code></a> |
| The coordinates set the position of the top left corner of the SubImage. <a href="trait.GenericImage.html#method.sub_image">Read more</a></div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-GenericImageView-for-ImageBuffer%3CP%2C%20Container%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#1020-1051">source</a><a href="#impl-GenericImageView-for-ImageBuffer%3CP%2C%20Container%3E" class="anchor"></a><h3 class="code-header">impl<P, Container> <a class="trait" href="trait.GenericImageView.html" title="trait image::GenericImageView">GenericImageView</a> for <a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><P, Container><span class="where fmt-newline">where<br> P: <a class="trait" href="trait.Pixel.html" title="trait image::Pixel">Pixel</a> + 'static,<br> Container: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a><Target = [P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>]> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a>,<br> P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>: 'static,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.unsafe_get_pixel" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#1043-1046">source</a><a href="#method.unsafe_get_pixel" class="anchor"></a><h4 class="code-header">unsafe fn <a href="trait.GenericImageView.html#method.unsafe_get_pixel" class="fnname">unsafe_get_pixel</a>(&self, x: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>, y: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>) -> P</h4></section></summary><div class="docblock"><p>Returns the pixel located at (x, y), ignoring bounds checking.</p> |
| </div></details><details class="rustdoc-toggle" open><summary><section id="associatedtype.Pixel" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.Pixel" class="anchor"></a><h4 class="code-header">type <a href="trait.GenericImageView.html#associatedtype.Pixel" class="associatedtype">Pixel</a> = P</h4></section></summary><div class='docblock'>The type of pixel.</div></details><details class="rustdoc-toggle" open><summary><section id="associatedtype.InnerImageView" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.InnerImageView" class="anchor"></a><h4 class="code-header">type <a href="trait.GenericImageView.html#associatedtype.InnerImageView" class="associatedtype">InnerImageView</a> = <a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><P, Container></h4></section></summary><div class='docblock'>Underlying image type. This is mainly used by SubImages in order to |
| always have a reference to the original image. This allows for less |
| indirections and it eases the use of nested SubImages. <a href="trait.GenericImageView.html#associatedtype.InnerImageView">Read more</a></div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.dimensions-1" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#1029-1031">source</a><a href="#method.dimensions-1" class="anchor"></a><h4 class="code-header">fn <a href="trait.GenericImageView.html#tymethod.dimensions" class="fnname">dimensions</a>(&self) -> (<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>)</h4></section></summary><div class='docblock'>The width and height of this image.</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.bounds" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#1033-1035">source</a><a href="#method.bounds" class="anchor"></a><h4 class="code-header">fn <a href="trait.GenericImageView.html#tymethod.bounds" class="fnname">bounds</a>(&self) -> (<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>)</h4></section></summary><div class='docblock'>The bounding rectangle of this image.</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.get_pixel-1" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#1037-1039">source</a><a href="#method.get_pixel-1" class="anchor"></a><h4 class="code-header">fn <a href="trait.GenericImageView.html#tymethod.get_pixel" class="fnname">get_pixel</a>(&self, x: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>, y: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>) -> P</h4></section></summary><div class='docblock'>Returns the pixel located at (x, y). Indexed from top left. <a href="trait.GenericImageView.html#tymethod.get_pixel">Read more</a></div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.inner" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#1048-1050">source</a><a href="#method.inner" class="anchor"></a><h4 class="code-header">fn <a href="trait.GenericImageView.html#tymethod.inner" class="fnname">inner</a>(&self) -> &Self::<a class="associatedtype" href="trait.GenericImageView.html#associatedtype.InnerImageView" title="type image::GenericImageView::InnerImageView">InnerImageView</a></h4></section></summary><div class='docblock'>Returns a reference to the underlying image.</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.width-1" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/image/image.rs.html#738-741">source</a><a href="#method.width-1" class="anchor"></a><h4 class="code-header">fn <a href="trait.GenericImageView.html#method.width" class="fnname">width</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a></h4></section></summary><div class='docblock'>The width of this image.</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.height-1" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/image/image.rs.html#744-747">source</a><a href="#method.height-1" class="anchor"></a><h4 class="code-header">fn <a href="trait.GenericImageView.html#method.height" class="fnname">height</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a></h4></section></summary><div class='docblock'>The height of this image.</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.in_bounds" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/image/image.rs.html#753-756">source</a><a href="#method.in_bounds" class="anchor"></a><h4 class="code-header">fn <a href="trait.GenericImageView.html#method.in_bounds" class="fnname">in_bounds</a>(&self, x: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>, y: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></h4></section></summary><div class='docblock'>Returns true if this x, y coordinate is contained inside the image.</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.pixels-1" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/image/image.rs.html#782-792">source</a><a href="#method.pixels-1" class="anchor"></a><h4 class="code-header">fn <a href="trait.GenericImageView.html#method.pixels" class="fnname">pixels</a>(&self) -> <a class="struct" href="struct.Pixels.html" title="struct image::Pixels">Pixels</a><'_, Self><span class="notable-traits"><span class="notable-traits-tooltip">ⓘ<span class="notable-traits-tooltiptext"><span class="docblock"><span class="notable">Notable traits for <a class="struct" href="struct.Pixels.html" title="struct image::Pixels">Pixels</a><'a, I></span><code class="content"><span class="where fmt-newline">impl<'a, I: <a class="trait" href="trait.GenericImageView.html" title="trait image::GenericImageView">GenericImageView</a>> <a class="trait" href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html" title="trait core::iter::traits::iterator::Iterator">Iterator</a> for <a class="struct" href="struct.Pixels.html" title="struct image::Pixels">Pixels</a><'a, I></span><span class="where fmt-newline"> type <a href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item" class="associatedtype">Item</a> = (<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>, I::<a class="associatedtype" href="trait.GenericImageView.html#associatedtype.Pixel" title="type image::GenericImageView::Pixel">Pixel</a>);</span></code></span></span></span></span></h4></section></summary><div class='docblock'>Returns an Iterator over the pixels of this image. |
| The iterator yields the coordinates of each pixel |
| along with their value <a href="trait.GenericImageView.html#method.pixels">Read more</a></div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.view" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/image/image.rs.html#800-802">source</a><a href="#method.view" class="anchor"></a><h4 class="code-header">fn <a href="trait.GenericImageView.html#method.view" class="fnname">view</a>(<br> &self,<br> x: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>,<br> y: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>,<br> width: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>,<br> height: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a><br>) -> <a class="struct" href="struct.SubImage.html" title="struct image::SubImage">SubImage</a><&Self::<a class="associatedtype" href="trait.GenericImageView.html#associatedtype.InnerImageView" title="type image::GenericImageView::InnerImageView">InnerImageView</a>></h4></section></summary><div class='docblock'>Returns an subimage that is an immutable view into this image. |
| You can use <a href="trait.GenericImage.html#method.sub_image" title="GenericImage::sub_image"><code>GenericImage::sub_image</code></a> if you need a mutable view instead. |
| The coordinates set the position of the top left corner of the view. <a href="trait.GenericImageView.html#method.view">Read more</a></div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-Hash-for-ImageBuffer%3CP%2C%20Container%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#608">source</a><a href="#impl-Hash-for-ImageBuffer%3CP%2C%20Container%3E" class="anchor"></a><h3 class="code-header">impl<P: <a class="trait" href="https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html" title="trait core::hash::Hash">Hash</a> + <a class="trait" href="trait.Pixel.html" title="trait image::Pixel">Pixel</a>, Container: <a class="trait" href="https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html" title="trait core::hash::Hash">Hash</a>> <a class="trait" href="https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html" title="trait core::hash::Hash">Hash</a> for <a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><P, Container></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.hash" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#608">source</a><a href="#method.hash" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html#tymethod.hash" class="fnname">hash</a><__H: <a class="trait" href="https://doc.rust-lang.org/nightly/core/hash/trait.Hasher.html" title="trait core::hash::Hasher">Hasher</a>>(&self, state: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&mut </a>__H)</h4></section></summary><div class='docblock'>Feeds this value into the given <a href="https://doc.rust-lang.org/nightly/core/hash/trait.Hasher.html" title="Hasher"><code>Hasher</code></a>. <a href="https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html#tymethod.hash">Read more</a></div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.hash_slice" class="method trait-impl has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.3.0">1.3.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/hash/mod.rs.html#237-239">source</a></span><a href="#method.hash_slice" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html#method.hash_slice" class="fnname">hash_slice</a><H>(data: &<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">[Self]</a>, state: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&mut </a>H)<span class="where fmt-newline">where<br> H: <a class="trait" href="https://doc.rust-lang.org/nightly/core/hash/trait.Hasher.html" title="trait core::hash::Hasher">Hasher</a>,</span></h4></section></summary><div class='docblock'>Feeds a slice of this type into the given <a href="https://doc.rust-lang.org/nightly/core/hash/trait.Hasher.html" title="Hasher"><code>Hasher</code></a>. <a href="https://doc.rust-lang.org/nightly/core/hash/trait.Hash.html#method.hash_slice">Read more</a></div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-Index%3C(u32%2C%20u32)%3E-for-ImageBuffer%3CP%2C%20Container%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#981-992">source</a><a href="#impl-Index%3C(u32%2C%20u32)%3E-for-ImageBuffer%3CP%2C%20Container%3E" class="anchor"></a><h3 class="code-header">impl<P, Container> <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/index/trait.Index.html" title="trait core::ops::index::Index">Index</a><(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>)> for <a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><P, Container><span class="where fmt-newline">where<br> P: <a class="trait" href="trait.Pixel.html" title="trait image::Pixel">Pixel</a> + 'static,<br> P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>: 'static,<br> Container: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a><Target = [P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>]>,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle" open><summary><section id="associatedtype.Output" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.Output" class="anchor"></a><h4 class="code-header">type <a href="https://doc.rust-lang.org/nightly/core/ops/index/trait.Index.html#associatedtype.Output" class="associatedtype">Output</a> = P</h4></section></summary><div class='docblock'>The returned type after indexing.</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.index" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#989-991">source</a><a href="#method.index" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/ops/index/trait.Index.html#tymethod.index" class="fnname">index</a>(&self, (x, y): (<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>)) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>P</h4></section></summary><div class='docblock'>Performs the indexing (<code>container[index]</code>) operation. <a href="https://doc.rust-lang.org/nightly/core/ops/index/trait.Index.html#tymethod.index">Read more</a></div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-IndexMut%3C(u32%2C%20u32)%3E-for-ImageBuffer%3CP%2C%20Container%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#994-1003">source</a><a href="#impl-IndexMut%3C(u32%2C%20u32)%3E-for-ImageBuffer%3CP%2C%20Container%3E" class="anchor"></a><h3 class="code-header">impl<P, Container> <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/index/trait.IndexMut.html" title="trait core::ops::index::IndexMut">IndexMut</a><(<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>)> for <a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><P, Container><span class="where fmt-newline">where<br> P: <a class="trait" href="trait.Pixel.html" title="trait image::Pixel">Pixel</a> + 'static,<br> P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>: 'static,<br> Container: <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a><Target = [P::<a class="associatedtype" href="trait.Pixel.html#associatedtype.Subpixel" title="type image::Pixel::Subpixel">Subpixel</a>]> + <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/deref/trait.DerefMut.html" title="trait core::ops::deref::DerefMut">DerefMut</a>,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.index_mut" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#1000-1002">source</a><a href="#method.index_mut" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/ops/index/trait.IndexMut.html#tymethod.index_mut" class="fnname">index_mut</a>(&mut self, (x, y): (<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>, <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u32.html">u32</a>)) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&mut </a>P</h4></section></summary><div class='docblock'>Performs the mutable indexing (<code>container[index]</code>) operation. <a href="https://doc.rust-lang.org/nightly/core/ops/index/trait.IndexMut.html#tymethod.index_mut">Read more</a></div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-PartialEq%3CImageBuffer%3CP%2C%20Container%3E%3E-for-ImageBuffer%3CP%2C%20Container%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#608">source</a><a href="#impl-PartialEq%3CImageBuffer%3CP%2C%20Container%3E%3E-for-ImageBuffer%3CP%2C%20Container%3E" class="anchor"></a><h3 class="code-header">impl<P: <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a> + <a class="trait" href="trait.Pixel.html" title="trait image::Pixel">Pixel</a>, Container: <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a>> <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a><<a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><P, Container>> for <a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><P, Container></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.eq" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#608">source</a><a href="#method.eq" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#tymethod.eq" class="fnname">eq</a>(&self, other: &<a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><P, Container>) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></h4></section></summary><div class='docblock'>This method tests for <code>self</code> and <code>other</code> values to be equal, and is used |
| by <code>==</code>. <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#tymethod.eq">Read more</a></div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.ne" class="method trait-impl has-srclink"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/cmp.rs.html#227">source</a></span><a href="#method.ne" class="anchor"></a><h4 class="code-header">const fn <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne" class="fnname">ne</a>(&self, other: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>Rhs) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></h4></section></summary><div class='docblock'>This method tests for <code>!=</code>. The default implementation is almost always |
| sufficient, and should not be overridden without very good reason. <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne">Read more</a></div></details></div></details><section id="impl-Eq-for-ImageBuffer%3CP%2C%20Container%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#608">source</a><a href="#impl-Eq-for-ImageBuffer%3CP%2C%20Container%3E" class="anchor"></a><h3 class="code-header">impl<P: <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html" title="trait core::cmp::Eq">Eq</a> + <a class="trait" href="trait.Pixel.html" title="trait image::Pixel">Pixel</a>, Container: <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html" title="trait core::cmp::Eq">Eq</a>> <a class="trait" href="https://doc.rust-lang.org/nightly/core/cmp/trait.Eq.html" title="trait core::cmp::Eq">Eq</a> for <a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><P, Container></h3></section><section id="impl-StructuralEq-for-ImageBuffer%3CP%2C%20Container%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#608">source</a><a href="#impl-StructuralEq-for-ImageBuffer%3CP%2C%20Container%3E" class="anchor"></a><h3 class="code-header">impl<P: <a class="trait" href="trait.Pixel.html" title="trait image::Pixel">Pixel</a>, Container> <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.StructuralEq.html" title="trait core::marker::StructuralEq">StructuralEq</a> for <a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><P, Container></h3></section><section id="impl-StructuralPartialEq-for-ImageBuffer%3CP%2C%20Container%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/image/buffer.rs.html#608">source</a><a href="#impl-StructuralPartialEq-for-ImageBuffer%3CP%2C%20Container%3E" class="anchor"></a><h3 class="code-header">impl<P: <a class="trait" href="trait.Pixel.html" title="trait image::Pixel">Pixel</a>, Container> <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.StructuralPartialEq.html" title="trait core::marker::StructuralPartialEq">StructuralPartialEq</a> for <a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><P, Container></h3></section></div><h2 id="synthetic-implementations" class="small-section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor"></a></h2><div id="synthetic-implementations-list"><section id="impl-RefUnwindSafe-for-ImageBuffer%3CP%2C%20Container%3E" class="impl has-srclink"><a href="#impl-RefUnwindSafe-for-ImageBuffer%3CP%2C%20Container%3E" class="anchor"></a><h3 class="code-header">impl<P, Container> <a class="trait" href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a> for <a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><P, Container><span class="where fmt-newline">where<br> Container: <a class="trait" href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a>,<br> P: <a class="trait" href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a>,</span></h3></section><section id="impl-Send-for-ImageBuffer%3CP%2C%20Container%3E" class="impl has-srclink"><a href="#impl-Send-for-ImageBuffer%3CP%2C%20Container%3E" class="anchor"></a><h3 class="code-header">impl<P, Container> <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> for <a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><P, Container><span class="where fmt-newline">where<br> Container: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a>,<br> P: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a>,</span></h3></section><section id="impl-Sync-for-ImageBuffer%3CP%2C%20Container%3E" class="impl has-srclink"><a href="#impl-Sync-for-ImageBuffer%3CP%2C%20Container%3E" class="anchor"></a><h3 class="code-header">impl<P, Container> <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> for <a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><P, Container><span class="where fmt-newline">where<br> Container: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a>,<br> P: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a>,</span></h3></section><section id="impl-Unpin-for-ImageBuffer%3CP%2C%20Container%3E" class="impl has-srclink"><a href="#impl-Unpin-for-ImageBuffer%3CP%2C%20Container%3E" class="anchor"></a><h3 class="code-header">impl<P, Container> <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> for <a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><P, Container><span class="where fmt-newline">where<br> Container: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,<br> P: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</span></h3></section><section id="impl-UnwindSafe-for-ImageBuffer%3CP%2C%20Container%3E" class="impl has-srclink"><a href="#impl-UnwindSafe-for-ImageBuffer%3CP%2C%20Container%3E" class="anchor"></a><h3 class="code-header">impl<P, Container> <a class="trait" href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a> for <a class="struct" href="struct.ImageBuffer.html" title="struct image::ImageBuffer">ImageBuffer</a><P, Container><span class="where fmt-newline">where<br> Container: <a class="trait" href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a>,<br> P: <a class="trait" href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a>,</span></h3></section></div><h2 id="blanket-implementations" class="small-section-header">Blanket Implementations<a href="#blanket-implementations" class="anchor"></a></h2><div id="blanket-implementations-list"><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Any-for-ImageBuffer%3CP%2C%20Container%3E" class="impl has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#200">source</a><a href="#impl-Any-for-ImageBuffer%3CP%2C%20Container%3E" class="anchor"></a><h3 class="code-header">impl<T> <a class="trait" href="https://doc.rust-lang.org/nightly/core/any/trait.Any.html" title="trait core::any::Any">Any</a> for T<span class="where fmt-newline">where<br> T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#201">source</a><a href="#method.type_id" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id" class="fnname">type_id</a>(&self) -> <a class="struct" href="https://doc.rust-lang.org/nightly/core/any/struct.TypeId.html" title="struct core::any::TypeId">TypeId</a></h4></section></summary><div class='docblock'>Gets the <code>TypeId</code> of <code>self</code>. <a href="https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id">Read more</a></div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Borrow%3CT%3E-for-ImageBuffer%3CP%2C%20Container%3E" class="impl has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#211">source</a><a href="#impl-Borrow%3CT%3E-for-ImageBuffer%3CP%2C%20Container%3E" class="anchor"></a><h3 class="code-header">impl<T> <a class="trait" href="https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html" title="trait core::borrow::Borrow">Borrow</a><T> for T<span class="where fmt-newline">where<br> T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl has-srclink"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#213">source</a></span><a href="#method.borrow" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow" class="fnname">borrow</a>(&self) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>T</h4></section></summary><div class='docblock'>Immutably borrows from an owned value. <a href="https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow">Read more</a></div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-BorrowMut%3CT%3E-for-ImageBuffer%3CP%2C%20Container%3E" class="impl has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#220">source</a><a href="#impl-BorrowMut%3CT%3E-for-ImageBuffer%3CP%2C%20Container%3E" class="anchor"></a><h3 class="code-header">impl<T> <a class="trait" href="https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html" title="trait core::borrow::BorrowMut">BorrowMut</a><T> for T<span class="where fmt-newline">where<br> T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl has-srclink"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#221">source</a></span><a href="#method.borrow_mut" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut" class="fnname">borrow_mut</a>(&mut self) -> <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&mut </a>T</h4></section></summary><div class='docblock'>Mutably borrows from an owned value. <a href="https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut">Read more</a></div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-From%3CT%3E-for-ImageBuffer%3CP%2C%20Container%3E" class="impl has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#733">source</a><a href="#impl-From%3CT%3E-for-ImageBuffer%3CP%2C%20Container%3E" class="anchor"></a><h3 class="code-header">impl<T> <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.From.html" title="trait core::convert::From">From</a><T> for T</h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.from" class="method trait-impl has-srclink"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/88674" title="Tracking issue for const_convert">unstable</a></span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#736">source</a></span><a href="#method.from" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from" class="fnname">from</a>(t: T) -> T</h4></section></summary><div class="docblock"><p>Returns the argument unchanged.</p> |
| </div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Into%3CU%3E-for-ImageBuffer%3CP%2C%20Container%3E" class="impl has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#717">source</a><a href="#impl-Into%3CU%3E-for-ImageBuffer%3CP%2C%20Container%3E" class="anchor"></a><h3 class="code-header">impl<T, U> <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a><U> for T<span class="where fmt-newline">where<br> U: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.From.html" title="trait core::convert::From">From</a><T>,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.into" class="method trait-impl has-srclink"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/88674" title="Tracking issue for const_convert">unstable</a></span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#725">source</a></span><a href="#method.into" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html#tymethod.into" class="fnname">into</a>(self) -> U</h4></section></summary><div class="docblock"><p>Calls <code>U::from(self)</code>.</p> |
| <p>That is, this conversion is whatever the implementation of |
| <code><a href="https://doc.rust-lang.org/nightly/core/convert/trait.From.html" title="From">From</a><T> for U</code> chooses to do.</p> |
| </div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-ToOwned-for-ImageBuffer%3CP%2C%20Container%3E" class="impl has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/alloc/borrow.rs.html#83">source</a><a href="#impl-ToOwned-for-ImageBuffer%3CP%2C%20Container%3E" class="anchor"></a><h3 class="code-header">impl<T> <a class="trait" href="https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html" title="trait alloc::borrow::ToOwned">ToOwned</a> for T<span class="where fmt-newline">where<br> T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle" open><summary><section id="associatedtype.Owned" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.Owned" class="anchor"></a><h4 class="code-header">type <a href="https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html#associatedtype.Owned" class="associatedtype">Owned</a> = T</h4></section></summary><div class='docblock'>The resulting type after obtaining ownership.</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.to_owned" class="method trait-impl has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/alloc/borrow.rs.html#88">source</a><a href="#method.to_owned" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html#tymethod.to_owned" class="fnname">to_owned</a>(&self) -> T</h4></section></summary><div class='docblock'>Creates owned data from borrowed data, usually by cloning. <a href="https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html#tymethod.to_owned">Read more</a></div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.clone_into" class="method trait-impl has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/alloc/borrow.rs.html#92">source</a><a href="#method.clone_into" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html#method.clone_into" class="fnname">clone_into</a>(&self, target: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&mut </a>T)</h4></section></summary><div class='docblock'>Uses borrowed data to replace owned data, usually by cloning. <a href="https://doc.rust-lang.org/nightly/alloc/borrow/trait.ToOwned.html#method.clone_into">Read more</a></div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-TryFrom%3CU%3E-for-ImageBuffer%3CP%2C%20Container%3E" class="impl has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#775">source</a><a href="#impl-TryFrom%3CU%3E-for-ImageBuffer%3CP%2C%20Container%3E" class="anchor"></a><h3 class="code-header">impl<T, U> <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a><U> for T<span class="where fmt-newline">where<br> U: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a><T>,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle" open><summary><section id="associatedtype.Error-1" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.Error-1" class="anchor"></a><h4 class="code-header">type <a href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error" class="associatedtype">Error</a> = <a class="enum" href="https://doc.rust-lang.org/nightly/core/convert/enum.Infallible.html" title="enum core::convert::Infallible">Infallible</a></h4></section></summary><div class='docblock'>The type returned in the event of a conversion error.</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.try_from" class="method trait-impl has-srclink"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/88674" title="Tracking issue for const_convert">unstable</a></span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#781">source</a></span><a href="#method.try_from" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#tymethod.try_from" class="fnname">try_from</a>(value: U) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a><T, <T as <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a><U>>::<a class="associatedtype" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a>></h4></section></summary><div class='docblock'>Performs the conversion.</div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-TryInto%3CU%3E-for-ImageBuffer%3CP%2C%20Container%3E" class="impl has-srclink"><a class="srclink rightside" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#760">source</a><a href="#impl-TryInto%3CU%3E-for-ImageBuffer%3CP%2C%20Container%3E" class="anchor"></a><h3 class="code-header">impl<T, U> <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html" title="trait core::convert::TryInto">TryInto</a><U> for T<span class="where fmt-newline">where<br> U: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a><T>,</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle" open><summary><section id="associatedtype.Error" class="associatedtype trait-impl has-srclink"><a href="#associatedtype.Error" class="anchor"></a><h4 class="code-header">type <a href="https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#associatedtype.Error" class="associatedtype">Error</a> = <U as <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a><T>>::<a class="associatedtype" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a></h4></section></summary><div class='docblock'>The type returned in the event of a conversion error.</div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.try_into" class="method trait-impl has-srclink"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/88674" title="Tracking issue for const_convert">unstable</a></span> · <a class="srclink" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#766">source</a></span><a href="#method.try_into" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/core/convert/trait.TryInto.html#tymethod.try_into" class="fnname">try_into</a>(self) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a><U, <U as <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a><T>>::<a class="associatedtype" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a>></h4></section></summary><div class='docblock'>Performs the conversion.</div></details></div></details></div></section></div></main><div id="rustdoc-vars" data-root-path="../" data-current-crate="image" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.0-nightly (5c8bff74b 2022-10-21)" ></div></body></html> |