//===- AttributeSet.cpp ---------------------------------------------------===// // // The MCLinker Project // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include <mcld/MC/Attribute.h> #include <mcld/MC/AttributeSet.h> #include <cstddef> using namespace mcld; //===----------------------------------------------------------------------===// // AttributeSet //===----------------------------------------------------------------------===// AttributeSet::AttributeSet(unsigned int pNum, const Attribute& pPredefined) : m_AttrSet(), m_Predefined(pPredefined) { m_AttrSet.reserve(pNum); } AttributeSet::~AttributeSet() { iterator cur = m_AttrSet.begin(); iterator aEnd = m_AttrSet.end(); while(cur != aEnd) { delete (*cur); ++cur; } } Attribute* AttributeSet::exists(const Attribute& pAttr) const { if (m_Predefined == pAttr) return const_cast<Attribute*>(&m_Predefined); const_iterator cur = m_AttrSet.begin(); const_iterator aEnd = m_AttrSet.end(); while(cur != aEnd) { if (*(*cur) == pAttr) { return *cur; } ++cur; } return NULL; } void AttributeSet::record(mcld::Attribute &pAttr) { m_AttrSet.push_back(&pAttr); }