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