62 lines
1.6 KiB
C++
62 lines
1.6 KiB
C++
//===- InputFactory.h -----------------------------------------------------===//
|
|
//
|
|
// The MCLinker Project
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
#ifndef MCLD_MC_INPUTFACTORY_H_
|
|
#define MCLD_MC_INPUTFACTORY_H_
|
|
#include "mcld/MC/Input.h"
|
|
#include "mcld/Support/GCFactory.h"
|
|
|
|
namespace mcld {
|
|
|
|
class AttributeProxy;
|
|
class AttributeSet;
|
|
class LinkerConfig;
|
|
|
|
/** \class InputFactory
|
|
* \brief InputFactory controls the production and destruction of
|
|
* MCLDInput.
|
|
*
|
|
* All MCLDFiles created by MCLDFileFactory are guaranteed to be destructed
|
|
* while MCLDFileFactory is destructed.
|
|
*
|
|
* \see llvm::sys::Path
|
|
*/
|
|
class InputFactory : public GCFactory<Input, 0> {
|
|
public:
|
|
typedef GCFactory<Input, 0> Alloc;
|
|
|
|
public:
|
|
InputFactory(size_t pNum, const LinkerConfig& pConfig);
|
|
|
|
~InputFactory();
|
|
|
|
// ----- input ----- //
|
|
Input* produce(llvm::StringRef pName,
|
|
const sys::fs::Path& pPath,
|
|
unsigned int pType = Input::Unknown,
|
|
off_t pFileOffset = 0);
|
|
|
|
Input* produce(llvm::StringRef pName,
|
|
const char* pPath,
|
|
unsigned int pType = Input::Unknown,
|
|
off_t pFileOffset = 0);
|
|
|
|
// ----- attributes ----- //
|
|
/// attr - the last touched attribute.
|
|
const AttributeProxy& attr() const { return *m_pLast; }
|
|
AttributeProxy& attr() { return *m_pLast; }
|
|
|
|
private:
|
|
AttributeProxy* m_pLast;
|
|
AttributeSet* m_pAttrSet;
|
|
};
|
|
|
|
} // namespace mcld
|
|
|
|
#endif // MCLD_MC_INPUTFACTORY_H_
|