You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
1.9 KiB
67 lines
1.9 KiB
7 months ago
|
//===- GroupReader.h ------------------------------------------------------===//
|
||
|
//
|
||
|
// The MCLinker Project
|
||
|
//
|
||
|
// This file is distributed under the University of Illinois Open Source
|
||
|
// License. See LICENSE.TXT for details.
|
||
|
//
|
||
|
//===----------------------------------------------------------------------===//
|
||
|
#ifndef MCLD_LD_GROUPREADER_H_
|
||
|
#define MCLD_LD_GROUPREADER_H_
|
||
|
|
||
|
#include "mcld/Module.h"
|
||
|
|
||
|
namespace mcld {
|
||
|
class Archive;
|
||
|
class ArchiveReader;
|
||
|
class BinaryReader;
|
||
|
class DynObjReader;
|
||
|
class InputBuilder;
|
||
|
class LinkerConfig;
|
||
|
class ObjectReader;
|
||
|
|
||
|
/** \class GroupReader
|
||
|
* \brief GroupReader handles the Group Node in InputTree
|
||
|
*
|
||
|
* Group Node is the root of sub-tree in InputTree which includes the iputs in
|
||
|
* the command line options --start-group and --end-group options
|
||
|
*/
|
||
|
class GroupReader {
|
||
|
public:
|
||
|
GroupReader(Module& pModule,
|
||
|
ObjectReader& pObjectReader,
|
||
|
DynObjReader& pDynObjReader,
|
||
|
ArchiveReader& pArchiveReader,
|
||
|
BinaryReader& pBinaryReader);
|
||
|
|
||
|
~GroupReader();
|
||
|
|
||
|
/// readGroup - handle the input sub-tree wich its root is pRoot
|
||
|
/// @param pRoot - the root Group node of the sub-tree
|
||
|
bool readGroup(Module::input_iterator pRoot,
|
||
|
Module::input_iterator pEnd,
|
||
|
InputBuilder& pBuilder,
|
||
|
const LinkerConfig& pConfig);
|
||
|
|
||
|
private:
|
||
|
/// ArchiveListEntry - record the Archive and the corresponding input iterator
|
||
|
/// of the archive node
|
||
|
struct ArchiveListEntry {
|
||
|
ArchiveListEntry(Archive& pArchive, Module::input_iterator pIterator)
|
||
|
: archive(pArchive), input(pIterator) {}
|
||
|
Archive& archive;
|
||
|
Module::input_iterator input;
|
||
|
};
|
||
|
|
||
|
private:
|
||
|
Module& m_Module;
|
||
|
ObjectReader& m_ObjectReader;
|
||
|
DynObjReader& m_DynObjReader;
|
||
|
ArchiveReader& m_ArchiveReader;
|
||
|
BinaryReader& m_BinaryReader;
|
||
|
};
|
||
|
|
||
|
} // namespace mcld
|
||
|
|
||
|
#endif // MCLD_LD_GROUPREADER_H_
|