//===- 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_