]> git.proxmox.com Git - rustc.git/blob - vendor/object/src/read/elf/compression.rs
New upstream version 1.60.0+dfsg1
[rustc.git] / vendor / object / src / read / elf / compression.rs
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 }