Home | History | Annotate | Download | only in LD
      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 {
     50     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