Home | History | Annotate | Download | only in LD
      1 //===- LDSectionFactory.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/LD/LDSectionFactory.h>
     10 
     11 using namespace mcld;
     12 
     13 //==========================
     14 // LDSectionFactory
     15 LDSectionFactory::LDSectionFactory(size_t pNum)
     16   : GCFactory<LDSection, 0>(pNum) {
     17 }
     18 
     19 LDSectionFactory::~LDSectionFactory()
     20 {
     21 }
     22 
     23 LDSection* LDSectionFactory::produce(const std::string& pName,
     24                                    LDFileFormat::Kind pKind,
     25                                    uint32_t pType,
     26                                    uint32_t pFlag)
     27 {
     28   // create a LDSection
     29   LDSection* result = allocate();
     30   new (result) LDSection(pName, pKind, pType, pFlag);
     31   return result;
     32 }
     33 
     34 void LDSectionFactory::destroy(LDSection*& pSection)
     35 {
     36   // do not recycle LDSection. HeaderFactory will do that job.
     37   deallocate(pSection);
     38 }
     39 
     40 LDSection* LDSectionFactory::find(const std::string& pName)
     41 {
     42   iterator sect_iter, sect_end = end();
     43   for (sect_iter = begin(); sect_iter != sect_end; ++sect_iter)
     44     if ((*sect_iter).name() == pName)
     45       break;
     46   if (sect_iter == sect_end)
     47     return NULL;
     48   return &(*sect_iter);
     49 }
     50