Coverage Report

Created: 2025-06-22 07:07

/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
}