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  //===----------------------------------------------------------------------===//
AttributeSet(unsigned int pNum,const Attribute & pPredefined)20  AttributeSet::AttributeSet(unsigned int pNum, const Attribute& pPredefined)
21      : m_AttrSet(), m_Predefined(pPredefined) {
22    m_AttrSet.reserve(pNum);
23  }
24  
~AttributeSet()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  
exists(const Attribute & pAttr) const35  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  
record(mcld::Attribute & pAttr)50  void AttributeSet::record(mcld::Attribute& pAttr) {
51    m_AttrSet.push_back(&pAttr);
52  }
53  
54  }  // namespace mcld
55