C++程序  |  50行  |  1.33 KB

//===- LDSectionFactory.cpp -----------------------------------------------===//
//
//                     The MCLinker Project
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#include <mcld/LD/LDSectionFactory.h>

using namespace mcld;

//==========================
// LDSectionFactory
LDSectionFactory::LDSectionFactory(size_t pNum)
  : GCFactory<LDSection, 0>(pNum) {
}

LDSectionFactory::~LDSectionFactory()
{
}

LDSection* LDSectionFactory::produce(const std::string& pName,
                                   LDFileFormat::Kind pKind,
                                   uint32_t pType,
                                   uint32_t pFlag)
{
  // create a LDSection
  LDSection* result = allocate();
  new (result) LDSection(pName, pKind, pType, pFlag);
  return result;
}

void LDSectionFactory::destroy(LDSection*& pSection)
{
  // do not recycle LDSection. HeaderFactory will do that job.
  deallocate(pSection);
}

LDSection* LDSectionFactory::find(const std::string& pName)
{
  iterator sect_iter, sect_end = end();
  for (sect_iter = begin(); sect_iter != sect_end; ++sect_iter)
    if ((*sect_iter).name() == pName)
      break;
  if (sect_iter == sect_end)
    return NULL;
  return &(*sect_iter);
}