/rust/registry/src/index.crates.io-6f17d22bba15001f/ring-0.17.14/src/polyfill/slice.rs
Line | Count | Source (jump to first uncovered line) |
1 | | // Permission is hereby granted, free of charge, to any |
2 | | // person obtaining a copy of this software and associated |
3 | | // documentation files (the "Software"), to deal in the |
4 | | // Software without restriction, including without |
5 | | // limitation the rights to use, copy, modify, merge, |
6 | | // publish, distribute, sublicense, and/or sell copies of |
7 | | // the Software, and to permit persons to whom the Software |
8 | | // is furnished to do so, subject to the following |
9 | | // conditions: |
10 | | // |
11 | | // The above copyright notice and this permission notice |
12 | | // shall be included in all copies or substantial portions |
13 | | // of the Software. |
14 | | // |
15 | | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF |
16 | | // ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED |
17 | | // TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A |
18 | | // PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT |
19 | | // SHALL THE AUTHOR OR COPYRIGHT HOLDERS BE LIABLE FOR ANY |
20 | | // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION |
21 | | // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR |
22 | | // IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
23 | | // DEALINGS IN THE SOFTWARE. |
24 | | |
25 | | mod as_chunks; |
26 | | mod as_chunks_mut; |
27 | | |
28 | | pub use as_chunks::{as_chunks, AsChunks}; |
29 | | pub use as_chunks_mut::{as_chunks_mut, AsChunksMut}; |
30 | | |
31 | | // TODO(MSRV feature(split_at_checked)): Use `slice::split_at_checked`. |
32 | | // |
33 | | // Note that the libcore version is implemented in terms of |
34 | | // `slice::split_at_unchecked()`, and `slice::split_at()` was changed to be |
35 | | // implemented in terms of `split_at_checked`. For now, we implement this in |
36 | | // terms of `split_at` and rely on the optimizer to eliminate the panic. |
37 | | #[inline(always)] |
38 | 0 | pub fn split_at_checked<T>(slice: &[T], i: usize) -> Option<(&[T], &[T])> { |
39 | 0 | if slice.len() >= i { |
40 | 0 | Some(slice.split_at(i)) |
41 | | } else { |
42 | 0 | None |
43 | | } |
44 | 0 | } |
45 | | |
46 | | // TODO(MSRV-1.77): Use `slice::split_first_chunk_mut`. |
47 | | #[inline(always)] |
48 | 0 | pub fn split_first_chunk_mut<T, const N: usize>( |
49 | 0 | slice: &mut [T], |
50 | 0 | ) -> Option<(&mut [T; N], &mut [T])> { |
51 | 0 | if slice.len() >= N { |
52 | 0 | let (head, tail) = slice.split_at_mut(N); |
53 | 0 | head.try_into().ok().map(|head| (head, tail)) |
54 | | } else { |
55 | 0 | None |
56 | | } |
57 | 0 | } |