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