Home | History | Annotate | Download | only in MC
      1 //===- InputFactory.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_MC_INPUTFACTORY_H_
     10 #define MCLD_MC_INPUTFACTORY_H_
     11 #include "mcld/MC/Input.h"
     12 #include "mcld/Support/GCFactory.h"
     13 
     14 namespace mcld {
     15 
     16 class AttributeProxy;
     17 class AttributeSet;
     18 class LinkerConfig;
     19 
     20 /** \class InputFactory
     21  *  \brief InputFactory controls the production and destruction of
     22  *  MCLDInput.
     23  *
     24  *  All MCLDFiles created by MCLDFileFactory are guaranteed to be destructed
     25  *  while MCLDFileFactory is destructed.
     26  *
     27  *  \see llvm::sys::Path
     28  */
     29 class InputFactory : public GCFactory<Input, 0> {
     30  public:
     31   typedef GCFactory<Input, 0> Alloc;
     32 
     33  public:
     34   InputFactory(size_t pNum, const LinkerConfig& pConfig);
     35 
     36   ~InputFactory();
     37 
     38   // -----  input  ----- //
     39   Input* produce(llvm::StringRef pName,
     40                  const sys::fs::Path& pPath,
     41                  unsigned int pType = Input::Unknown,
     42                  off_t pFileOffset = 0);
     43 
     44   Input* produce(llvm::StringRef pName,
     45                  const char* pPath,
     46                  unsigned int pType = Input::Unknown,
     47                  off_t pFileOffset = 0);
     48 
     49   // -----  attributes  ----- //
     50   /// attr - the last touched attribute.
     51   const AttributeProxy& attr() const { return *m_pLast; }
     52   AttributeProxy& attr() { return *m_pLast; }
     53 
     54  private:
     55   AttributeProxy* m_pLast;
     56   AttributeSet* m_pAttrSet;
     57 };
     58 
     59 }  // namespace mcld
     60 
     61 #endif  // MCLD_MC_INPUTFACTORY_H_
     62