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/ADT/Uncopyable.h>
12 #include <vector>
13 
14 namespace mcld {
15 
16 class Attribute;
17 
18 /** \class AttributeSet
19  *  \brief AttributeSet is a set of Attribute.
20  *
21  *  Clients delegates Attributes to AttributeSet. AttributeSet deletes delegated
22  *  Attributes during destruction.
23  */
24 class AttributeSet : private Uncopyable
25 {
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  ----- //
begin()39   const_iterator begin() const { return m_AttrSet.begin(); }
begin()40   iterator       begin()       { return m_AttrSet.begin(); }
end()41   const_iterator end  () const { return m_AttrSet.end(); }
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 
56 } // namespace of mcld
57 
58 #endif
59 
60