122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===- GroupReader.h ------------------------------------------------------===//
222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//
322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//                     The MCLinker Project
422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//
522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// This file is distributed under the University of Illinois Open Source
622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// License. See LICENSE.TXT for details.
722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//
822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===//
922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#ifndef MCLD_GROUPREADER_H
1022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#define MCLD_GROUPREADER_H
1122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#ifdef ENABLE_UNITTEST
1222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <gtest.h>
1322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#endif
1422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
1522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <mcld/Module.h>
1622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
1722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaonamespace mcld
1822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao{
1922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass Archive;
2022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass ArchiveReader;
2122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass DynObjReader;
2222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass LinkerConfig;
2322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass ObjectReader;
24f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hinesclass BinaryReader;
2522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
2622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao/** \class GroupReader
2722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao *  \brief GroupReader handles the Group Node in InputTree
2822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao *
2922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao *  Group Node is the root of sub-tree in InputTree which includes the iputs in
3022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao *  the command line options --start-group and --end-group options
3122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao */
3222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass GroupReader
3322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao{
3422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaopublic:
3522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  GroupReader(Module& pModule,
3622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao              ObjectReader& pObjectReader,
3722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao              DynObjReader& pDynObjReader,
38f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines              ArchiveReader& pArchiveReader,
39f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines              BinaryReader& pBinaryReader);
4022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
4122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  ~GroupReader();
4222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
4322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  /// readGroup - handle the input sub-tree wich its root is pRoot
4422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  /// @param pRoot - the root Group node of the sub-tree
4522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  bool readGroup(Module::input_iterator pRoot,
4622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao                 InputBuilder& pBuilder,
4722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao                 const LinkerConfig& pConfig);
4822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
4922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoprivate:
5022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  /// ArchiveListEntry - record the Archive and the corresponding input iterator
5122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  /// of the archive node
5222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  struct ArchiveListEntry {
5322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao    ArchiveListEntry(Archive& pArchive, Module::input_iterator pIterator)
5422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao      : archive(pArchive), input(pIterator) {
5522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao    }
5622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao    Archive& archive;
5722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao    Module::input_iterator input;
5822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  };
5922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
6022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoprivate:
6122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  Module& m_Module;
6222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  ObjectReader& m_ObjectReader;
6322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  DynObjReader& m_DynObjReader;
6422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  ArchiveReader& m_ArchiveReader;
65f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines  BinaryReader& m_BinaryReader;
6622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao};
6722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
6822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} // namespace of mcld
6922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
7022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#endif
7122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
72