| //===- RegionFactory.cpp --------------------------------------------------===// |
| // |
| // The MCLinker Project |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| #include <mcld/Support/RegionFactory.h> |
| #include <mcld/Support/MemoryArea.h> |
| #include <mcld/Support/Space.h> |
| |
| using namespace mcld; |
| |
| //========================== |
| // RegionFactory |
| RegionFactory::RegionFactory(size_t pNum) |
| : GCFactory<MemoryRegion, 0>(pNum) { |
| } |
| |
| RegionFactory::~RegionFactory() |
| { |
| } |
| |
| MemoryRegion* RegionFactory::produce(Space& pSpace, void* pVMAStart, size_t pSize) |
| { |
| MemoryRegion* result = Alloc::allocate(); |
| new (result) MemoryRegion(pSpace, |
| static_cast<const MemoryRegion::Address>(pVMAStart), |
| pSize); |
| pSpace.addRegion(*result); |
| return result; |
| } |
| |
| void RegionFactory::destruct(MemoryRegion* pRegion) |
| { |
| pRegion->parent()->removeRegion(*pRegion); |
| destroy(pRegion); |
| deallocate(pRegion); |
| } |
| |