Home | History | Annotate | Download | only in MC
      1 //===- AttributeSet.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/MC/AttributeSet.h"
     10 
     11 #include "mcld/MC/Attribute.h"
     12 
     13 #include <cstddef>
     14 
     15 namespace mcld {
     16 
     17 //===----------------------------------------------------------------------===//
     18 // AttributeSet
     19 //===----------------------------------------------------------------------===//
     20 AttributeSet::AttributeSet(unsigned int pNum, const Attribute& pPredefined)
     21     : m_AttrSet(), m_Predefined(pPredefined) {
     22   m_AttrSet.reserve(pNum);
     23 }
     24 
     25 AttributeSet::~AttributeSet() {
     26   iterator cur = m_AttrSet.begin();
     27   iterator aEnd = m_AttrSet.end();
     28 
     29   while (cur != aEnd) {
     30     delete (*cur);
     31     ++cur;
     32   }
     33 }
     34 
     35 Attribute* AttributeSet::exists(const Attribute& pAttr) const {
     36   if (m_Predefined == pAttr)
     37     return const_cast<Attribute*>(&m_Predefined);
     38 
     39   const_iterator cur = m_AttrSet.begin();
     40   const_iterator aEnd = m_AttrSet.end();
     41   while (cur != aEnd) {
     42     if (*(*cur) == pAttr) {
     43       return *cur;
     44     }
     45     ++cur;
     46   }
     47   return NULL;
     48 }
     49 
     50 void AttributeSet::record(mcld::Attribute& pAttr) {
     51   m_AttrSet.push_back(&pAttr);
     52 }
     53 
     54 }  // namespace mcld
     55