/rust/registry/src/index.crates.io-6f17d22bba15001f/ring-0.17.14/src/polyfill.rs
Line | Count | Source (jump to first uncovered line) |
1 | | // Copyright 2015-2016 Brian Smith. |
2 | | // |
3 | | // Permission to use, copy, modify, and/or distribute this software for any |
4 | | // purpose with or without fee is hereby granted, provided that the above |
5 | | // copyright notice and this permission notice appear in all copies. |
6 | | // |
7 | | // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
8 | | // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
9 | | // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY |
10 | | // SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
11 | | // WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION |
12 | | // OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN |
13 | | // CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
14 | | |
15 | | //! Polyfills for functionality that will (hopefully) be added to Rust's |
16 | | //! standard library soon. |
17 | | |
18 | | #[cfg(any(target_pointer_width = "32", target_pointer_width = "64"))] |
19 | | #[inline(always)] |
20 | 0 | pub const fn u64_from_usize(x: usize) -> u64 { |
21 | 0 | x as u64 |
22 | 0 | } |
23 | | |
24 | | #[cfg(any(target_pointer_width = "32", target_pointer_width = "64"))] |
25 | 0 | pub const fn usize_from_u32(x: u32) -> usize { |
26 | 0 | x as usize |
27 | 0 | } |
28 | | |
29 | | #[cfg(all( |
30 | | target_arch = "aarch64", |
31 | | target_endian = "little", |
32 | | target_pointer_width = "64" |
33 | | ))] |
34 | | #[allow(clippy::cast_possible_truncation)] |
35 | | pub fn usize_from_u64(x: u64) -> usize { |
36 | | x as usize |
37 | | } |
38 | | |
39 | | /// const-capable `x.try_into().unwrap_or(usize::MAX)` |
40 | | #[allow(clippy::cast_possible_truncation)] |
41 | | #[inline(always)] |
42 | 0 | pub const fn usize_from_u64_saturated(x: u64) -> usize { |
43 | | const USIZE_MAX: u64 = u64_from_usize(usize::MAX); |
44 | 0 | if x < USIZE_MAX { |
45 | 0 | x as usize |
46 | | } else { |
47 | 0 | usize::MAX |
48 | | } |
49 | 0 | } |
50 | | |
51 | | #[macro_use] |
52 | | mod cold_error; |
53 | | |
54 | | mod array_flat_map; |
55 | | mod array_split_map; |
56 | | |
57 | | pub mod cstr; |
58 | | |
59 | | pub mod sliceutil; |
60 | | |
61 | | #[cfg(feature = "alloc")] |
62 | | mod leading_zeros_skipped; |
63 | | |
64 | | #[cfg(any( |
65 | | all(target_arch = "aarch64", target_endian = "little"), |
66 | | all(target_arch = "arm", target_endian = "little"), |
67 | | target_arch = "x86", |
68 | | target_arch = "x86_64" |
69 | | ))] |
70 | | pub mod once_cell { |
71 | | pub mod race; |
72 | | } |
73 | | |
74 | | mod notsend; |
75 | | pub mod ptr; |
76 | | |
77 | | pub mod slice; |
78 | | |
79 | | #[cfg(test)] |
80 | | mod test; |
81 | | |
82 | | mod unwrap_const; |
83 | | |
84 | | pub use self::{ |
85 | | array_flat_map::ArrayFlatMap, array_split_map::ArraySplitMap, notsend::NotSend, |
86 | | unwrap_const::unwrap_const, |
87 | | }; |
88 | | |
89 | | #[cfg(feature = "alloc")] |
90 | | pub use leading_zeros_skipped::LeadingZerosStripped; |
91 | | |
92 | | #[cfg(test)] |
93 | | mod tests { |
94 | | use super::*; |
95 | | #[test] |
96 | | fn test_usize_from_u64_saturated() { |
97 | | const USIZE_MAX: u64 = u64_from_usize(usize::MAX); |
98 | | assert_eq!(usize_from_u64_saturated(u64::MIN), usize::MIN); |
99 | | assert_eq!(usize_from_u64_saturated(USIZE_MAX), usize::MAX); |
100 | | assert_eq!(usize_from_u64_saturated(USIZE_MAX - 1), usize::MAX - 1); |
101 | | |
102 | | #[cfg(not(target_pointer_width = "64"))] |
103 | | { |
104 | | assert_eq!(usize_from_u64_saturated(USIZE_MAX + 1), usize::MAX); |
105 | | } |
106 | | } |
107 | | } |