1//===- RegionFactory.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/Support/RegionFactory.h> 10#include <mcld/Support/MemoryArea.h> 11#include <mcld/Support/Space.h> 12 13using namespace mcld; 14 15//========================== 16// RegionFactory 17RegionFactory::RegionFactory(size_t pNum) 18 : GCFactory<MemoryRegion, 0>(pNum) { 19} 20 21RegionFactory::~RegionFactory() 22{ 23} 24 25MemoryRegion* RegionFactory::produce(Space& pSpace, void* pVMAStart, size_t pSize) 26{ 27 MemoryRegion* result = Alloc::allocate(); 28 new (result) MemoryRegion(pSpace, 29 static_cast<const MemoryRegion::Address>(pVMAStart), 30 pSize); 31 pSpace.addRegion(*result); 32 return result; 33} 34 35void RegionFactory::destruct(MemoryRegion* pRegion) 36{ 37 pRegion->parent()->removeRegion(*pRegion); 38 destroy(pRegion); 39 deallocate(pRegion); 40} 41 42