Coverage Report

Created: 2026-01-10 06:06

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/rust/registry/src/index.crates.io-1949cf8c6b5b557f/ahash-0.8.12/src/convert.rs
Line
Count
Source
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
24.4M
            fn convert(self) -> $b {
10
24.4M
                zerocopy::transmute!(self)
11
24.4M
            }
<u128 as ahash::convert::Convert<[u64; 2]>>::convert
Line
Count
Source
9
24.4M
            fn convert(self) -> $b {
10
24.4M
                zerocopy::transmute!(self)
11
24.4M
            }
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: <[u128; 4] as ahash::convert::Convert<[u8; 64]>>::convert
Unexecuted instantiation: <[[u64; 4]; 2] as ahash::convert::Convert<[u8; 64]>>::convert
12
        }
13
        impl Convert<$a> for $b {
14
            #[inline(always)]
15
4.59M
            fn convert(self) -> $a {
16
4.59M
                zerocopy::transmute!(self)
17
4.59M
            }
<[u64; 2] as ahash::convert::Convert<u128>>::convert
Line
Count
Source
15
4.59M
            fn convert(self) -> $a {
16
4.59M
                zerocopy::transmute!(self)
17
4.59M
            }
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
24.2M
            fn convert(self) -> $a {
33
24.2M
                <$a>::from_ne_bytes(self)
34
24.2M
            }
<[u8; 16] as ahash::convert::Convert<u128>>::convert
Line
Count
Source
32
19.8M
            fn convert(self) -> $a {
33
19.8M
                <$a>::from_ne_bytes(self)
34
19.8M
            }
<[u8; 8] as ahash::convert::Convert<u64>>::convert
Line
Count
Source
32
1.05M
            fn convert(self) -> $a {
33
1.05M
                <$a>::from_ne_bytes(self)
34
1.05M
            }
<[u8; 4] as ahash::convert::Convert<u32>>::convert
Line
Count
Source
32
2.30M
            fn convert(self) -> $a {
33
2.30M
                <$a>::from_ne_bytes(self)
34
2.30M
            }
<[u8; 2] as ahash::convert::Convert<u16>>::convert
Line
Count
Source
32
1.07M
            fn convert(self) -> $a {
33
1.07M
                <$a>::from_ne_bytes(self)
34
1.07M
            }
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
24.2M
            fn as_array<T>(slice: &[T]) -> &[T; $len] {
57
24.2M
                core::convert::TryFrom::try_from(slice).unwrap()
58
24.2M
            }
<[u8] as ahash::convert::ReadFromSlice>::read_last_u32::as_array::<u8>
Line
Count
Source
56
1.15M
            fn as_array<T>(slice: &[T]) -> &[T; $len] {
57
1.15M
                core::convert::TryFrom::try_from(slice).unwrap()
58
1.15M
            }
<[u8] as ahash::convert::ReadFromSlice>::read_last_u64::as_array::<u8>
Line
Count
Source
56
529k
            fn as_array<T>(slice: &[T]) -> &[T; $len] {
57
529k
                core::convert::TryFrom::try_from(slice).unwrap()
58
529k
            }
<[u8] as ahash::convert::ReadFromSlice>::read_last_u128::as_array::<u8>
Line
Count
Source
56
523k
            fn as_array<T>(slice: &[T]) -> &[T; $len] {
57
523k
                core::convert::TryFrom::try_from(slice).unwrap()
58
523k
            }
<[u8] as ahash::convert::ReadFromSlice>::read_u16::as_array::<u8>
Line
Count
Source
56
1.07M
            fn as_array<T>(slice: &[T]) -> &[T; $len] {
57
1.07M
                core::convert::TryFrom::try_from(slice).unwrap()
58
1.07M
            }
<[u8] as ahash::convert::ReadFromSlice>::read_u32::as_array::<u8>
Line
Count
Source
56
1.15M
            fn as_array<T>(slice: &[T]) -> &[T; $len] {
57
1.15M
                core::convert::TryFrom::try_from(slice).unwrap()
58
1.15M
            }
<[u8] as ahash::convert::ReadFromSlice>::read_u64::as_array::<u8>
Line
Count
Source
56
529k
            fn as_array<T>(slice: &[T]) -> &[T; $len] {
57
529k
                core::convert::TryFrom::try_from(slice).unwrap()
58
529k
            }
<[u8] as ahash::convert::ReadFromSlice>::read_u128::as_array::<u8>
Line
Count
Source
56
19.2M
            fn as_array<T>(slice: &[T]) -> &[T; $len] {
57
19.2M
                core::convert::TryFrom::try_from(slice).unwrap()
58
19.2M
            }
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::<_>
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::<_>
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
1.07M
    fn read_u16(&self) -> (u16, &[u8]) {
82
1.07M
        let (value, rest) = self.split_at(2);
83
1.07M
        (as_array!(value, 2).convert(), rest)
84
1.07M
    }
85
86
    #[inline(always)]
87
1.15M
    fn read_u32(&self) -> (u32, &[u8]) {
88
1.15M
        let (value, rest) = self.split_at(4);
89
1.15M
        (as_array!(value, 4).convert(), rest)
90
1.15M
    }
91
92
    #[inline(always)]
93
529k
    fn read_u64(&self) -> (u64, &[u8]) {
94
529k
        let (value, rest) = self.split_at(8);
95
529k
        (as_array!(value, 8).convert(), rest)
96
529k
    }
97
98
    #[inline(always)]
99
19.2M
    fn read_u128(&self) -> (u128, &[u8]) {
100
19.2M
        let (value, rest) = self.split_at(16);
101
19.2M
        (as_array!(value, 16).convert(), rest)
102
19.2M
    }
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
1.15M
    fn read_last_u32(&self) -> u32 {
124
1.15M
        let (_, value) = self.split_at(self.len() - 4);
125
1.15M
        as_array!(value, 4).convert()
126
1.15M
    }
127
128
    #[inline(always)]
129
529k
    fn read_last_u64(&self) -> u64 {
130
529k
        let (_, value) = self.split_at(self.len() - 8);
131
529k
        as_array!(value, 8).convert()
132
529k
    }
133
134
    #[inline(always)]
135
523k
    fn read_last_u128(&self) -> u128 {
136
523k
        let (_, value) = self.split_at(self.len() - 16);
137
523k
        as_array!(value, 16).convert()
138
523k
    }
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
}