15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- InputFactory.cpp ---------------------------------------------------===//
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//===----------------------------------------------------------------------===//
937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/MC/InputFactory.h"
105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1137b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/LinkerConfig.h"
1237b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/AttributeOption.h"
1337b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/MC/AttributeSet.h"
1437b74a387bb3993387029859c2d9d051c41c724eStephen Hines
1537b74a387bb3993387029859c2d9d051c41c724eStephen Hinesnamespace mcld {
165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===//
185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// InputFactory
1922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===//
2022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei LiaoInputFactory::InputFactory(size_t pNum, const LinkerConfig& pConfig)
2137b74a387bb3993387029859c2d9d051c41c724eStephen Hines    : GCFactory<Input, 0>(pNum) {
2222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  m_pAttrSet = new AttributeSet(16, pConfig.attribute().predefined());
2322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  m_pLast = new AttributeProxy(*m_pAttrSet,
2422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao                               pConfig.attribute().predefined(),
2522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao                               pConfig.attribute().constraint());
265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
2837b74a387bb3993387029859c2d9d051c41c724eStephen HinesInputFactory::~InputFactory() {
2922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  delete m_pAttrSet;
3022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  delete m_pLast;
315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoInput* InputFactory::produce(llvm::StringRef pName,
345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                             const sys::fs::Path& pPath,
355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                             unsigned int pType,
3637b74a387bb3993387029859c2d9d051c41c724eStephen Hines                             off_t pFileOffset) {
3722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  Input* result = Alloc::allocate();
3822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  new (result) Input(pName, pPath, *m_pLast, pType, pFileOffset);
395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  return result;
405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
4237b74a387bb3993387029859c2d9d051c41c724eStephen HinesInput* InputFactory::produce(llvm::StringRef pName,
4337b74a387bb3993387029859c2d9d051c41c724eStephen Hines                             const char* pPath,
4437b74a387bb3993387029859c2d9d051c41c724eStephen Hines                             unsigned int pType,
4537b74a387bb3993387029859c2d9d051c41c724eStephen Hines                             off_t pFileOffset) {
4637b74a387bb3993387029859c2d9d051c41c724eStephen Hines  Input* result = Alloc::allocate();
4737b74a387bb3993387029859c2d9d051c41c724eStephen Hines  new (result) Input(pName, sys::fs::Path(pPath), *m_pLast, pType, pFileOffset);
4837b74a387bb3993387029859c2d9d051c41c724eStephen Hines  return result;
4937b74a387bb3993387029859c2d9d051c41c724eStephen Hines}
5037b74a387bb3993387029859c2d9d051c41c724eStephen Hines
5137b74a387bb3993387029859c2d9d051c41c724eStephen Hines}  // namespace mcld
52