/rust/registry/src/index.crates.io-6f17d22bba15001f/ahash-0.8.12/src/convert.rs
Line | Count | Source (jump to first uncovered line) |
1 | | pub(crate) trait Convert<To> { |
2 | | fn convert(self) -> To; |
3 | | } |
4 | | |
5 | | macro_rules! convert { |
6 | | ($a:ty, $b:ty) => { |
7 | | impl Convert<$b> for $a { |
8 | | #[inline(always)] |
9 | 6.15M | fn convert(self) -> $b { |
10 | 6.15M | zerocopy::transmute!(self) |
11 | 6.15M | } <u128 as ahash::convert::Convert<[u64; 2]>>::convert Line | Count | Source | 9 | 6.15M | fn convert(self) -> $b { | 10 | 6.15M | zerocopy::transmute!(self) | 11 | 6.15M | } |
Unexecuted instantiation: <[u128; 4] as ahash::convert::Convert<[u8; 64]>>::convert Unexecuted instantiation: <[u128; 2] as ahash::convert::Convert<[u64; 4]>>::convert Unexecuted instantiation: <[u128; 2] as ahash::convert::Convert<[u8; 32]>>::convert Unexecuted instantiation: <[u64; 2] as ahash::convert::Convert<[u32; 4]>>::convert Unexecuted instantiation: <[[u64; 4]; 2] as ahash::convert::Convert<[u8; 64]>>::convert |
12 | | } |
13 | | impl Convert<$a> for $b { |
14 | | #[inline(always)] |
15 | 2.56M | fn convert(self) -> $a { |
16 | 2.56M | zerocopy::transmute!(self) |
17 | 2.56M | } <[u64; 2] as ahash::convert::Convert<u128>>::convert Line | Count | Source | 15 | 2.56M | fn convert(self) -> $a { | 16 | 2.56M | zerocopy::transmute!(self) | 17 | 2.56M | } |
Unexecuted instantiation: <[u8; 64] as ahash::convert::Convert<[u128; 4]>>::convert Unexecuted instantiation: <[u64; 4] as ahash::convert::Convert<[u128; 2]>>::convert Unexecuted instantiation: <[u8; 32] as ahash::convert::Convert<[u128; 2]>>::convert Unexecuted instantiation: <[u32; 4] as ahash::convert::Convert<[u64; 2]>>::convert Unexecuted instantiation: <[u8; 64] as ahash::convert::Convert<[[u64; 4]; 2]>>::convert |
18 | | } |
19 | | }; |
20 | | } |
21 | | |
22 | | macro_rules! convert_primitive_bytes { |
23 | | ($a:ty, $b:ty) => { |
24 | | impl Convert<$b> for $a { |
25 | | #[inline(always)] |
26 | 0 | fn convert(self) -> $b { |
27 | 0 | self.to_ne_bytes() |
28 | 0 | } Unexecuted instantiation: <u128 as ahash::convert::Convert<[u8; 16]>>::convert Unexecuted instantiation: <u64 as ahash::convert::Convert<[u8; 8]>>::convert Unexecuted instantiation: <u32 as ahash::convert::Convert<[u8; 4]>>::convert Unexecuted instantiation: <u16 as ahash::convert::Convert<[u8; 2]>>::convert |
29 | | } |
30 | | impl Convert<$a> for $b { |
31 | | #[inline(always)] |
32 | 6.00M | fn convert(self) -> $a { |
33 | 6.00M | <$a>::from_ne_bytes(self) |
34 | 6.00M | } <[u8; 16] as ahash::convert::Convert<u128>>::convert Line | Count | Source | 32 | 3.59M | fn convert(self) -> $a { | 33 | 3.59M | <$a>::from_ne_bytes(self) | 34 | 3.59M | } |
<[u8; 8] as ahash::convert::Convert<u64>>::convert Line | Count | Source | 32 | 603k | fn convert(self) -> $a { | 33 | 603k | <$a>::from_ne_bytes(self) | 34 | 603k | } |
<[u8; 4] as ahash::convert::Convert<u32>>::convert Line | Count | Source | 32 | 1.21M | fn convert(self) -> $a { | 33 | 1.21M | <$a>::from_ne_bytes(self) | 34 | 1.21M | } |
<[u8; 2] as ahash::convert::Convert<u16>>::convert Line | Count | Source | 32 | 590k | fn convert(self) -> $a { | 33 | 590k | <$a>::from_ne_bytes(self) | 34 | 590k | } |
|
35 | | } |
36 | | }; |
37 | | } |
38 | | |
39 | | convert!([u128; 4], [u8; 64]); |
40 | | convert!([u128; 2], [u64; 4]); |
41 | | convert!([u128; 2], [u8; 32]); |
42 | | convert!(u128, [u64; 2]); |
43 | | convert_primitive_bytes!(u128, [u8; 16]); |
44 | | convert!([u64; 2], [u32; 4]); |
45 | | #[cfg(test)] |
46 | | convert!([u64; 2], [u8; 16]); |
47 | | convert_primitive_bytes!(u64, [u8; 8]); |
48 | | convert_primitive_bytes!(u32, [u8; 4]); |
49 | | convert_primitive_bytes!(u16, [u8; 2]); |
50 | | convert!([[u64; 4]; 2], [u8; 64]); |
51 | | |
52 | | macro_rules! as_array { |
53 | | ($input:expr, $len:expr) => {{ |
54 | | { |
55 | | #[inline(always)] |
56 | 6.00M | fn as_array<T>(slice: &[T]) -> &[T; $len] { |
57 | 6.00M | core::convert::TryFrom::try_from(slice).unwrap() |
58 | 6.00M | } <[u8] as ahash::convert::ReadFromSlice>::read_last_u32::as_array::<u8> Line | Count | Source | 56 | 609k | fn as_array<T>(slice: &[T]) -> &[T; $len] { | 57 | 609k | core::convert::TryFrom::try_from(slice).unwrap() | 58 | 609k | } |
<[u8] as ahash::convert::ReadFromSlice>::read_last_u64::as_array::<u8> Line | Count | Source | 56 | 301k | fn as_array<T>(slice: &[T]) -> &[T; $len] { | 57 | 301k | core::convert::TryFrom::try_from(slice).unwrap() | 58 | 301k | } |
<[u8] as ahash::convert::ReadFromSlice>::read_last_u128::as_array::<u8> Line | Count | Source | 56 | 343k | fn as_array<T>(slice: &[T]) -> &[T; $len] { | 57 | 343k | core::convert::TryFrom::try_from(slice).unwrap() | 58 | 343k | } |
<[u8] as ahash::convert::ReadFromSlice>::read_u16::as_array::<u8> Line | Count | Source | 56 | 590k | fn as_array<T>(slice: &[T]) -> &[T; $len] { | 57 | 590k | core::convert::TryFrom::try_from(slice).unwrap() | 58 | 590k | } |
<[u8] as ahash::convert::ReadFromSlice>::read_u32::as_array::<u8> Line | Count | Source | 56 | 609k | fn as_array<T>(slice: &[T]) -> &[T; $len] { | 57 | 609k | core::convert::TryFrom::try_from(slice).unwrap() | 58 | 609k | } |
<[u8] as ahash::convert::ReadFromSlice>::read_u64::as_array::<u8> Line | Count | Source | 56 | 301k | fn as_array<T>(slice: &[T]) -> &[T; $len] { | 57 | 301k | core::convert::TryFrom::try_from(slice).unwrap() | 58 | 301k | } |
<[u8] as ahash::convert::ReadFromSlice>::read_u128::as_array::<u8> Line | Count | Source | 56 | 3.25M | fn as_array<T>(slice: &[T]) -> &[T; $len] { | 57 | 3.25M | core::convert::TryFrom::try_from(slice).unwrap() | 58 | 3.25M | } |
Unexecuted instantiation: <[u8] as ahash::convert::ReadFromSlice>::read_u16::as_array::<_> Unexecuted instantiation: <[u8] as ahash::convert::ReadFromSlice>::read_u32::as_array::<_> Unexecuted instantiation: <[u8] as ahash::convert::ReadFromSlice>::read_u64::as_array::<_> Unexecuted instantiation: <[u8] as ahash::convert::ReadFromSlice>::read_u128::as_array::<_> Unexecuted instantiation: <[u8] as ahash::convert::ReadFromSlice>::read_u128x2::as_array::<_> Unexecuted instantiation: <[u8] as ahash::convert::ReadFromSlice>::read_u128x4::as_array::<_> Unexecuted instantiation: <[u8] as ahash::convert::ReadFromSlice>::read_last_u16::as_array::<_> Unexecuted instantiation: <[u8] as ahash::convert::ReadFromSlice>::read_last_u32::as_array::<_> Unexecuted instantiation: <[u8] as ahash::convert::ReadFromSlice>::read_last_u64::as_array::<_> Unexecuted instantiation: <[u8] as ahash::convert::ReadFromSlice>::read_last_u128::as_array::<_> Unexecuted instantiation: <[u8] as ahash::convert::ReadFromSlice>::read_last_u128x2::as_array::<_> Unexecuted instantiation: <[u8] as ahash::convert::ReadFromSlice>::read_last_u128x4::as_array::<_> |
59 | | as_array($input) |
60 | | } |
61 | | }}; |
62 | | } |
63 | | |
64 | | pub(crate) trait ReadFromSlice { |
65 | | fn read_u16(&self) -> (u16, &[u8]); |
66 | | fn read_u32(&self) -> (u32, &[u8]); |
67 | | fn read_u64(&self) -> (u64, &[u8]); |
68 | | fn read_u128(&self) -> (u128, &[u8]); |
69 | | fn read_u128x2(&self) -> ([u128; 2], &[u8]); |
70 | | fn read_u128x4(&self) -> ([u128; 4], &[u8]); |
71 | | fn read_last_u16(&self) -> u16; |
72 | | fn read_last_u32(&self) -> u32; |
73 | | fn read_last_u64(&self) -> u64; |
74 | | fn read_last_u128(&self) -> u128; |
75 | | fn read_last_u128x2(&self) -> [u128; 2]; |
76 | | fn read_last_u128x4(&self) -> [u128; 4]; |
77 | | } |
78 | | |
79 | | impl ReadFromSlice for [u8] { |
80 | | #[inline(always)] |
81 | 590k | fn read_u16(&self) -> (u16, &[u8]) { |
82 | 590k | let (value, rest) = self.split_at(2); |
83 | 590k | (as_array!(value, 2).convert(), rest) |
84 | 590k | } |
85 | | |
86 | | #[inline(always)] |
87 | 609k | fn read_u32(&self) -> (u32, &[u8]) { |
88 | 609k | let (value, rest) = self.split_at(4); |
89 | 609k | (as_array!(value, 4).convert(), rest) |
90 | 609k | } |
91 | | |
92 | | #[inline(always)] |
93 | 301k | fn read_u64(&self) -> (u64, &[u8]) { |
94 | 301k | let (value, rest) = self.split_at(8); |
95 | 301k | (as_array!(value, 8).convert(), rest) |
96 | 301k | } |
97 | | |
98 | | #[inline(always)] |
99 | 3.25M | fn read_u128(&self) -> (u128, &[u8]) { |
100 | 3.25M | let (value, rest) = self.split_at(16); |
101 | 3.25M | (as_array!(value, 16).convert(), rest) |
102 | 3.25M | } |
103 | | |
104 | | #[inline(always)] |
105 | 0 | fn read_u128x2(&self) -> ([u128; 2], &[u8]) { |
106 | 0 | let (value, rest) = self.split_at(32); |
107 | 0 | (as_array!(value, 32).convert(), rest) |
108 | 0 | } |
109 | | |
110 | | #[inline(always)] |
111 | 0 | fn read_u128x4(&self) -> ([u128; 4], &[u8]) { |
112 | 0 | let (value, rest) = self.split_at(64); |
113 | 0 | (as_array!(value, 64).convert(), rest) |
114 | 0 | } |
115 | | |
116 | | #[inline(always)] |
117 | 0 | fn read_last_u16(&self) -> u16 { |
118 | 0 | let (_, value) = self.split_at(self.len() - 2); |
119 | 0 | as_array!(value, 2).convert() |
120 | 0 | } |
121 | | |
122 | | #[inline(always)] |
123 | 609k | fn read_last_u32(&self) -> u32 { |
124 | 609k | let (_, value) = self.split_at(self.len() - 4); |
125 | 609k | as_array!(value, 4).convert() |
126 | 609k | } |
127 | | |
128 | | #[inline(always)] |
129 | 301k | fn read_last_u64(&self) -> u64 { |
130 | 301k | let (_, value) = self.split_at(self.len() - 8); |
131 | 301k | as_array!(value, 8).convert() |
132 | 301k | } |
133 | | |
134 | | #[inline(always)] |
135 | 343k | fn read_last_u128(&self) -> u128 { |
136 | 343k | let (_, value) = self.split_at(self.len() - 16); |
137 | 343k | as_array!(value, 16).convert() |
138 | 343k | } |
139 | | |
140 | | #[inline(always)] |
141 | 0 | fn read_last_u128x2(&self) -> [u128; 2] { |
142 | 0 | let (_, value) = self.split_at(self.len() - 32); |
143 | 0 | as_array!(value, 32).convert() |
144 | 0 | } |
145 | | |
146 | | #[inline(always)] |
147 | 0 | fn read_last_u128x4(&self) -> [u128; 4] { |
148 | 0 | let (_, value) = self.split_at(self.len() - 64); |
149 | 0 | as_array!(value, 64).convert() |
150 | 0 | } |
151 | | } |