15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- LDSectionFactory.cpp -----------------------------------------------===//
25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//                     The MCLinker Project
45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file is distributed under the University of Illinois Open Source
65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// License. See LICENSE.TXT for details.
75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===//
95460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/LD/LDSectionFactory.h>
105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcld;
125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//==========================
145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// LDSectionFactory
155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoLDSectionFactory::LDSectionFactory(size_t pNum)
165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  : GCFactory<LDSection, 0>(pNum) {
175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoLDSectionFactory::~LDSectionFactory()
205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoLDSection* LDSectionFactory::produce(const std::string& pName,
245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                   LDFileFormat::Kind pKind,
255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                   uint32_t pType,
265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                                   uint32_t pFlag)
275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  // create a LDSection
295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  LDSection* result = allocate();
305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  new (result) LDSection(pName, pKind, pType, pFlag);
315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  return result;
325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaovoid LDSectionFactory::destroy(LDSection*& pSection)
355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  // do not recycle LDSection. HeaderFactory will do that job.
375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  deallocate(pSection);
385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoLDSection* LDSectionFactory::find(const std::string& pName)
415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  iterator sect_iter, sect_end = end();
435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  for (sect_iter = begin(); sect_iter != sect_end; ++sect_iter)
445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    if ((*sect_iter).name() == pName)
455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      break;
465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  if (sect_iter == sect_end)
475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return NULL;
485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  return &(*sect_iter);
495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}
50