1#[cfg(any(target_pointer_width = "32", target_pointer_width = "64"))]
19#[inline(always)]
20pub const fn u64_from_usize(x: usize) -> u64 {
21 x as u64
22}
23
24#[cfg(any(target_pointer_width = "32", target_pointer_width = "64"))]
25pub fn usize_from_u32(x: u32) -> usize {
26 x as usize
27}
28
29#[cfg(all(target_arch = "aarch64", target_pointer_width = "64"))]
30#[allow(clippy::cast_possible_truncation)]
31pub fn usize_from_u64(x: u64) -> usize {
32 x as usize
33}
34
35#[allow(clippy::cast_possible_truncation)]
37#[inline(always)]
38pub const fn usize_from_u64_saturated(x: u64) -> usize {
39 const USIZE_MAX: u64 = u64_from_usize(usize::MAX);
40 if x < USIZE_MAX {
41 x as usize
42 } else {
43 usize::MAX
44 }
45}
46
47mod array_flat_map;
48mod array_flatten;
49mod array_split_map;
50
51#[cfg(feature = "alloc")]
52mod leading_zeros_skipped;
53
54#[cfg(test)]
55mod test;
56
57mod unwrap_const;
58
59pub use self::{
60 array_flat_map::ArrayFlatMap, array_flatten::ArrayFlatten, array_split_map::ArraySplitMap,
61 unwrap_const::unwrap_const,
62};
63
64#[cfg(feature = "alloc")]
65pub use leading_zeros_skipped::LeadingZerosStripped;
66
67#[cfg(test)]
68mod tests {
69 use super::*;
70 #[test]
71 fn test_usize_from_u64_saturated() {
72 const USIZE_MAX: u64 = u64_from_usize(usize::MAX);
73 assert_eq!(usize_from_u64_saturated(u64::MIN), usize::MIN);
74 assert_eq!(usize_from_u64_saturated(USIZE_MAX), usize::MAX);
75 assert_eq!(usize_from_u64_saturated(USIZE_MAX - 1), usize::MAX - 1);
76
77 #[cfg(not(target_pointer_width = "64"))]
78 {
79 assert_eq!(usize_from_u64_saturated(USIZE_MAX + 1), usize::MAX);
80 }
81 }
82}