1 //===- GroupReader.h ------------------------------------------------------===// 2 // 3 // The MCLinker Project 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 #ifndef MCLD_LD_GROUPREADER_H_ 10 #define MCLD_LD_GROUPREADER_H_ 11 12 #include "mcld/Module.h" 13 14 namespace mcld { 15 class Archive; 16 class ArchiveReader; 17 class BinaryReader; 18 class DynObjReader; 19 class InputBuilder; 20 class LinkerConfig; 21 class ObjectReader; 22 23 /** \class GroupReader 24 * \brief GroupReader handles the Group Node in InputTree 25 * 26 * Group Node is the root of sub-tree in InputTree which includes the iputs in 27 * the command line options --start-group and --end-group options 28 */ 29 class GroupReader { 30 public: 31 GroupReader(Module& pModule, 32 ObjectReader& pObjectReader, 33 DynObjReader& pDynObjReader, 34 ArchiveReader& pArchiveReader, 35 BinaryReader& pBinaryReader); 36 37 ~GroupReader(); 38 39 /// readGroup - handle the input sub-tree wich its root is pRoot 40 /// @param pRoot - the root Group node of the sub-tree 41 bool readGroup(Module::input_iterator pRoot, 42 Module::input_iterator pEnd, 43 InputBuilder& pBuilder, 44 const LinkerConfig& pConfig); 45 46 private: 47 /// ArchiveListEntry - record the Archive and the corresponding input iterator 48 /// of the archive node 49 struct ArchiveListEntry { ArchiveListEntryArchiveListEntry50 ArchiveListEntry(Archive& pArchive, Module::input_iterator pIterator) 51 : archive(pArchive), input(pIterator) {} 52 Archive& archive; 53 Module::input_iterator input; 54 }; 55 56 private: 57 Module& m_Module; 58 ObjectReader& m_ObjectReader; 59 DynObjReader& m_DynObjReader; 60 ArchiveReader& m_ArchiveReader; 61 BinaryReader& m_BinaryReader; 62 }; 63 64 } // namespace mcld 65 66 #endif // MCLD_LD_GROUPREADER_H_ 67