//===- 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);
}

