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_INPUT_FACTORY_H
     10 #define MCLD_INPUT_FACTORY_H
     11 #ifdef ENABLE_UNITTEST
     12 #include <gtest.h>
     13 #endif
     14 #include "mcld/Support/GCFactory.h"
     15 #include "mcld/MC/MCLDInput.h"
     16 
     17 namespace mcld
     18 {
     19 
     20 class AttributeFactory;
     21 
     22 /** \class InputFactory
     23  *  \brief InputFactory controls the production and destruction of
     24  *  MCLDInput.
     25  *
     26  *  All MCLDFiles created by MCLDFileFactory are guaranteed to be destructed
     27  *  while MCLDFileFactory is destructed.
     28  *
     29  *  FIXME: the number of the Inputs should be passed in by Target or any
     30  *  target specific class.
     31  *
     32  *  \see llvm::sys::Path
     33  */
     34 class InputFactory : public GCFactory<Input,0>
     35 {
     36 public:
     37   typedef GCFactory<Input, 0> Alloc;
     38 
     39 public:
     40   InputFactory(size_t pNum, AttributeFactory& pAttrFactory);
     41   ~InputFactory();
     42 
     43   // -----  production  ----- //
     44   Input* produce(llvm::StringRef pName,
     45                  const sys::fs::Path& pPath,
     46                  unsigned int pType = Input::Unknown,
     47                  off_t pFileOffset = 0);
     48 
     49 private:
     50   AttributeFactory &m_AttrFactory;
     51 };
     52 
     53 } // namespace of mcld
     54 
     55 #endif
     56 
     57