• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/Attribute.h>
10 #include <mcld/MC/AttributeSet.h>
11 #include <cstddef>
12 
13 using namespace mcld;
14 
15 //===----------------------------------------------------------------------===//
16 // AttributeSet
17 //===----------------------------------------------------------------------===//
AttributeSet(unsigned int pNum,const Attribute & pPredefined)18 AttributeSet::AttributeSet(unsigned int pNum, const Attribute& pPredefined)
19   : m_AttrSet(), m_Predefined(pPredefined) {
20   m_AttrSet.reserve(pNum);
21 }
22 
~AttributeSet()23 AttributeSet::~AttributeSet()
24 {
25   iterator cur = m_AttrSet.begin();
26   iterator aEnd = m_AttrSet.end();
27 
28   while(cur != aEnd) {
29     delete (*cur);
30     ++cur;
31   }
32 }
33 
exists(const Attribute & pAttr) const34 Attribute* AttributeSet::exists(const Attribute& pAttr) const
35 {
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 {
52   m_AttrSet.push_back(&pAttr);
53 }
54 
55