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_GROUPREADER_H
     10 #define MCLD_GROUPREADER_H
     11 #ifdef ENABLE_UNITTEST
     12 #include <gtest.h>
     13 #endif
     14 
     15 #include <mcld/Module.h>
     16 
     17 namespace mcld
     18 {
     19 class Archive;
     20 class ArchiveReader;
     21 class DynObjReader;
     22 class LinkerConfig;
     23 class ObjectReader;
     24 class BinaryReader;
     25 
     26 /** \class GroupReader
     27  *  \brief GroupReader handles the Group Node in InputTree
     28  *
     29  *  Group Node is the root of sub-tree in InputTree which includes the iputs in
     30  *  the command line options --start-group and --end-group options
     31  */
     32 class GroupReader
     33 {
     34 public:
     35   GroupReader(Module& pModule,
     36               ObjectReader& pObjectReader,
     37               DynObjReader& pDynObjReader,
     38               ArchiveReader& pArchiveReader,
     39               BinaryReader& pBinaryReader);
     40 
     41   ~GroupReader();
     42 
     43   /// readGroup - handle the input sub-tree wich its root is pRoot
     44   /// @param pRoot - the root Group node of the sub-tree
     45   bool readGroup(Module::input_iterator pRoot,
     46                  InputBuilder& pBuilder,
     47                  const LinkerConfig& pConfig);
     48 
     49 private:
     50   /// ArchiveListEntry - record the Archive and the corresponding input iterator
     51   /// of the archive node
     52   struct ArchiveListEntry {
     53     ArchiveListEntry(Archive& pArchive, Module::input_iterator pIterator)
     54       : archive(pArchive), input(pIterator) {
     55     }
     56     Archive& archive;
     57     Module::input_iterator input;
     58   };
     59 
     60 private:
     61   Module& m_Module;
     62   ObjectReader& m_ObjectReader;
     63   DynObjReader& m_DynObjReader;
     64   ArchiveReader& m_ArchiveReader;
     65   BinaryReader& m_BinaryReader;
     66 };
     67 
     68 } // namespace of mcld
     69 
     70 #endif
     71 
     72