1//===- AttributeSet.h -----------------------------------------------------===//
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#ifndef MCLD_MC_ATTRIBUTESET_H_
10#define MCLD_MC_ATTRIBUTESET_H_
11#include "mcld/Support/Compiler.h"
12
13#include <vector>
14
15namespace mcld {
16
17class Attribute;
18
19/** \class AttributeSet
20 *  \brief AttributeSet is a set of Attribute.
21 *
22 *  Clients delegates Attributes to AttributeSet. AttributeSet deletes delegated
23 *  Attributes during destruction.
24 */
25class AttributeSet {
26 private:
27  typedef std::vector<Attribute*> AttrSet;
28
29 public:
30  typedef AttrSet::iterator iterator;
31  typedef AttrSet::const_iterator const_iterator;
32
33 public:
34  AttributeSet(unsigned int pNum, const Attribute& pPredefined);
35
36  ~AttributeSet();
37
38  // -----  iterators  ----- //
39  const_iterator begin() const { return m_AttrSet.begin(); }
40  iterator begin() { return m_AttrSet.begin(); }
41  const_iterator end() const { return m_AttrSet.end(); }
42  iterator end() { return m_AttrSet.end(); }
43
44  // exists- return the recorded attribute whose content is identical to the
45  // input attribute.
46  Attribute* exists(const Attribute& pAttr) const;
47
48  // record - record the attribute no mater if it has been recorded.
49  void record(Attribute& pAttr);
50
51 private:
52  AttrSet m_AttrSet;
53  const Attribute& m_Predefined;
54
55 private:
56  DISALLOW_COPY_AND_ASSIGN(AttributeSet);
57};
58
59}  // namespace mcld
60
61#endif  // MCLD_MC_ATTRIBUTESET_H_
62