]>
Commit | Line | Data |
---|---|---|
f035d41b XL |
1 | use core::fmt::Debug; |
2 | ||
3 | use crate::elf; | |
4 | use crate::endian; | |
5 | use crate::pod::Pod; | |
6 | ||
7 | /// A trait for generic access to `CompressionHeader32` and `CompressionHeader64`. | |
8 | #[allow(missing_docs)] | |
9 | pub trait CompressionHeader: Debug + Pod { | |
10 | type Word: Into<u64>; | |
11 | type Endian: endian::Endian; | |
12 | ||
13 | fn ch_type(&self, endian: Self::Endian) -> u32; | |
14 | fn ch_size(&self, endian: Self::Endian) -> Self::Word; | |
15 | fn ch_addralign(&self, endian: Self::Endian) -> Self::Word; | |
16 | } | |
17 | ||
18 | impl<Endian: endian::Endian> CompressionHeader for elf::CompressionHeader32<Endian> { | |
19 | type Word = u32; | |
20 | type Endian = Endian; | |
21 | ||
22 | #[inline] | |
23 | fn ch_type(&self, endian: Self::Endian) -> u32 { | |
24 | self.ch_type.get(endian) | |
25 | } | |
26 | ||
27 | #[inline] | |
28 | fn ch_size(&self, endian: Self::Endian) -> Self::Word { | |
29 | self.ch_size.get(endian) | |
30 | } | |
31 | ||
32 | #[inline] | |
33 | fn ch_addralign(&self, endian: Self::Endian) -> Self::Word { | |
34 | self.ch_addralign.get(endian) | |
35 | } | |
36 | } | |
37 | ||
38 | impl<Endian: endian::Endian> CompressionHeader for elf::CompressionHeader64<Endian> { | |
39 | type Word = u64; | |
40 | type Endian = Endian; | |
41 | ||
42 | #[inline] | |
43 | fn ch_type(&self, endian: Self::Endian) -> u32 { | |
44 | self.ch_type.get(endian) | |
45 | } | |
46 | ||
47 | #[inline] | |
48 | fn ch_size(&self, endian: Self::Endian) -> Self::Word { | |
49 | self.ch_size.get(endian) | |
50 | } | |
51 | ||
52 | #[inline] | |
53 | fn ch_addralign(&self, endian: Self::Endian) -> Self::Word { | |
54 | self.ch_addralign.get(endian) | |
55 | } | |
56 | } |