| //===- MemoryAreaFactory.cpp ----------------------------------------------===// |
| // |
| // The MCLinker Project |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| #include <mcld/Support/MemoryAreaFactory.h> |
| #include <mcld/Support/MsgHandling.h> |
| #include <mcld/Support/SystemUtils.h> |
| |
| using namespace mcld; |
| |
| //===----------------------------------------------------------------------===// |
| // MemoryAreaFactory |
| //===----------------------------------------------------------------------===// |
| MemoryAreaFactory::MemoryAreaFactory(size_t pNum) |
| : GCFactory<MemoryArea, 0>(pNum) { |
| } |
| |
| MemoryAreaFactory::~MemoryAreaFactory() |
| { |
| } |
| |
| MemoryArea* MemoryAreaFactory::produce(const sys::fs::Path& pPath, |
| FileHandle::OpenMode pMode) |
| { |
| llvm::StringRef name(pPath.native()); |
| if (m_AreaMap.find(name) == m_AreaMap.end()) { |
| MemoryArea* result = allocate(); |
| new (result) MemoryArea(name); |
| m_AreaMap[name] = result; |
| return result; |
| } |
| |
| return m_AreaMap[name]; |
| } |
| |
| MemoryArea* MemoryAreaFactory::produce(const sys::fs::Path& pPath, |
| FileHandle::OpenMode pMode, |
| FileHandle::Permission pPerm) |
| { |
| llvm::StringRef name(pPath.native()); |
| if (m_AreaMap.find(name) == m_AreaMap.end()) { |
| MemoryArea* result = allocate(); |
| new (result) MemoryArea(name); |
| m_AreaMap[name] = result; |
| return result; |
| } |
| |
| return m_AreaMap[name]; |
| } |
| |
| MemoryArea* MemoryAreaFactory::produce(void* pMemBuffer, size_t pSize) |
| { |
| const char* base = reinterpret_cast<const char*>(pMemBuffer); |
| llvm::StringRef name(base, pSize); |
| if (m_AreaMap.find(name) == m_AreaMap.end()) { |
| MemoryArea* result = allocate(); |
| new (result) MemoryArea(base, pSize); |
| m_AreaMap[name] = result; |
| return result; |
| } |
| |
| return m_AreaMap[name]; |
| } |
| |
| MemoryArea* MemoryAreaFactory::produce(int pFD, FileHandle::OpenMode pMode) |
| { |
| // TODO |
| return NULL; |
| } |
| |
| void MemoryAreaFactory::destruct(MemoryArea* pArea) |
| { |
| destroy(pArea); |
| deallocate(pArea); |
| } |