15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- InputFactory.h -----------------------------------------------------===//
25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//                     The MCLinker Project
45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file is distributed under the University of Illinois Open Source
65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// License. See LICENSE.TXT for details.
75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===//
95460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifndef MCLD_INPUT_FACTORY_H
105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define MCLD_INPUT_FACTORY_H
115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifdef ENABLE_UNITTEST
125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <gtest.h>
135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif
1422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <mcld/Support/GCFactory.h>
1522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <mcld/MC/MCLDInput.h>
165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaonamespace mcld {
185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass LinkerConfig;
2022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass AttributeProxy;
2122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass AttributeSet;
225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao/** \class InputFactory
245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *  \brief InputFactory controls the production and destruction of
255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *  MCLDInput.
265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *
275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *  All MCLDFiles created by MCLDFileFactory are guaranteed to be destructed
285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *  while MCLDFileFactory is destructed.
295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *
305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *  \see llvm::sys::Path
315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */
325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass InputFactory : public GCFactory<Input,0>
335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic:
355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef GCFactory<Input, 0> Alloc;
365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic:
3822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  InputFactory(size_t pNum, const LinkerConfig& pConfig);
3922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  ~InputFactory();
415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  // -----  input  ----- //
435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  Input* produce(llvm::StringRef pName,
445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                 const sys::fs::Path& pPath,
455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                 unsigned int pType = Input::Unknown,
465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                 off_t pFileOffset = 0);
475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  // -----  attributes  ----- //
4922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  /// attr - the last touched attribute.
5022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  const AttributeProxy& attr() const { return *m_pLast; }
5122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  AttributeProxy&       attr()       { return *m_pLast; }
5222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoprivate:
5422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  AttributeProxy* m_pLast;
5522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  AttributeSet* m_pAttrSet;
565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao};
575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of mcld
595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif
615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
62