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