InputFactory.h revision 533eae20118036f425f27bf0536ef0ccbb090b65
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/Support/GCFactory.h>
12#include <mcld/MC/Input.h>
13
14namespace mcld {
15
16class LinkerConfig;
17class AttributeProxy;
18class AttributeSet;
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 */
29class InputFactory : public GCFactory<Input,0>
30{
31public:
32  typedef GCFactory<Input, 0> Alloc;
33
34public:
35  InputFactory(size_t pNum, const LinkerConfig& pConfig);
36
37  ~InputFactory();
38
39  // -----  input  ----- //
40  Input* produce(llvm::StringRef pName,
41                 const sys::fs::Path& pPath,
42                 unsigned int pType = Input::Unknown,
43                 off_t pFileOffset = 0);
44
45  // -----  attributes  ----- //
46  /// attr - the last touched attribute.
47  const AttributeProxy& attr() const { return *m_pLast; }
48  AttributeProxy&       attr()       { return *m_pLast; }
49
50private:
51  AttributeProxy* m_pLast;
52  AttributeSet* m_pAttrSet;
53};
54
55} // namespace of mcld
56
57#endif
58
59