//===- 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/AttributeSet.h" #include "mcld/MC/Attribute.h" #include <cstddef> 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); } } // namespace mcld