1use core::fmt::Debug;
4
5use crate::read::{self, ComdatKind, ObjectComdat, ReadRef, Result, SectionIndex, SymbolIndex};
6use crate::xcoff;
7
8use super::{FileHeader, XcoffFile};
9
10pub type XcoffComdatIterator32<'data, 'file, R = &'data [u8]> =
12    XcoffComdatIterator<'data, 'file, xcoff::FileHeader32, R>;
13pub type XcoffComdatIterator64<'data, 'file, R = &'data [u8]> =
15    XcoffComdatIterator<'data, 'file, xcoff::FileHeader64, R>;
16
17#[derive(Debug)]
21pub struct XcoffComdatIterator<'data, 'file, Xcoff, R = &'data [u8]>
22where
23    Xcoff: FileHeader,
24    R: ReadRef<'data>,
25{
26    #[allow(unused)]
27    pub(crate) file: &'file XcoffFile<'data, Xcoff, R>,
28}
29
30impl<'data, 'file, Xcoff, R> Iterator for XcoffComdatIterator<'data, 'file, Xcoff, R>
31where
32    Xcoff: FileHeader,
33    R: ReadRef<'data>,
34{
35    type Item = XcoffComdat<'data, 'file, Xcoff, R>;
36
37    #[inline]
38    fn next(&mut self) -> Option<Self::Item> {
39        None
40    }
41}
42
43pub type XcoffComdat32<'data, 'file, R = &'data [u8]> =
45    XcoffComdat<'data, 'file, xcoff::FileHeader32, R>;
46
47pub type XcoffComdat64<'data, 'file, R = &'data [u8]> =
49    XcoffComdat<'data, 'file, xcoff::FileHeader64, R>;
50
51#[derive(Debug)]
55pub struct XcoffComdat<'data, 'file, Xcoff, R = &'data [u8]>
56where
57    Xcoff: FileHeader,
58    R: ReadRef<'data>,
59{
60    #[allow(unused)]
61    file: &'file XcoffFile<'data, Xcoff, R>,
62}
63
64impl<'data, 'file, Xcoff, R> read::private::Sealed for XcoffComdat<'data, 'file, Xcoff, R>
65where
66    Xcoff: FileHeader,
67    R: ReadRef<'data>,
68{
69}
70
71impl<'data, 'file, Xcoff, R> ObjectComdat<'data> for XcoffComdat<'data, 'file, Xcoff, R>
72where
73    Xcoff: FileHeader,
74    R: ReadRef<'data>,
75{
76    type SectionIterator = XcoffComdatSectionIterator<'data, 'file, Xcoff, R>;
77
78    #[inline]
79    fn kind(&self) -> ComdatKind {
80        unreachable!();
81    }
82
83    #[inline]
84    fn symbol(&self) -> SymbolIndex {
85        unreachable!();
86    }
87
88    #[inline]
89    fn name_bytes(&self) -> Result<&'data [u8]> {
90        unreachable!();
91    }
92
93    #[inline]
94    fn name(&self) -> Result<&'data str> {
95        unreachable!();
96    }
97
98    #[inline]
99    fn sections(&self) -> Self::SectionIterator {
100        unreachable!();
101    }
102}
103
104pub type XcoffComdatSectionIterator32<'data, 'file, R = &'data [u8]> =
106    XcoffComdatSectionIterator<'data, 'file, xcoff::FileHeader32, R>;
107pub type XcoffComdatSectionIterator64<'data, 'file, R = &'data [u8]> =
109    XcoffComdatSectionIterator<'data, 'file, xcoff::FileHeader64, R>;
110
111#[derive(Debug)]
115pub struct XcoffComdatSectionIterator<'data, 'file, Xcoff, R = &'data [u8]>
116where
117    Xcoff: FileHeader,
118    R: ReadRef<'data>,
119{
120    #[allow(unused)]
121    file: &'file XcoffFile<'data, Xcoff, R>,
122}
123
124impl<'data, 'file, Xcoff, R> Iterator for XcoffComdatSectionIterator<'data, 'file, Xcoff, R>
125where
126    Xcoff: FileHeader,
127    R: ReadRef<'data>,
128{
129    type Item = SectionIndex;
130
131    fn next(&mut self) -> Option<Self::Item> {
132        None
133    }
134}