1//===- ContextFactory.cpp -------------------------------------------------===//
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#include "mcld/MC/ContextFactory.h"
10
11#include "mcld/LD/LDContext.h"
12
13namespace mcld {
14
15//===---------------------------------------------------------------------===//
16// LDContextFactory
17ContextFactory::ContextFactory(size_t pNum)
18    : UniqueGCFactoryBase<sys::fs::Path, LDContext, 0>(pNum) {
19}
20
21ContextFactory::~ContextFactory() {
22}
23
24LDContext* ContextFactory::produce(const sys::fs::Path& pPath) {
25  LDContext* result = find(pPath);
26  if (result == NULL) {
27    result = UniqueGCFactoryBase<sys::fs::Path, LDContext, 0>::allocate();
28    new (result) LDContext();
29    f_KeyMap.insert(std::make_pair(pPath, result));
30  }
31  return result;
32}
33
34LDContext* ContextFactory::produce(const char* pPath) {
35  return produce(sys::fs::Path(pPath));
36}
37
38LDContext* ContextFactory::produce() {
39  LDContext* result = allocate();
40  new (result) LDContext();
41  return result;
42}
43
44}  // namespace mcld
45