Home | History | Annotate | Download | only in MC
      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 
     13 namespace mcld {
     14 
     15 //===---------------------------------------------------------------------===//
     16 // LDContextFactory
     17 ContextFactory::ContextFactory(size_t pNum)
     18     : UniqueGCFactoryBase<sys::fs::Path, LDContext, 0>(pNum) {
     19 }
     20 
     21 ContextFactory::~ContextFactory() {
     22 }
     23 
     24 LDContext* 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 
     34 LDContext* ContextFactory::produce(const char* pPath) {
     35   return produce(sys::fs::Path(pPath));
     36 }
     37 
     38 LDContext* ContextFactory::produce() {
     39   LDContext* result = allocate();
     40   new (result) LDContext();
     41   return result;
     42 }
     43 
     44 }  // namespace mcld
     45