//===- AttributeSet.h -----------------------------------------------------===//
//
// The MCLinker Project
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef MCLD_ATTRIBUTE_SET_H
#define MCLD_ATTRIBUTE_SET_H
#ifdef ENABLE_UNITTEST
#include <gtest.h>
#endif
#include <mcld/ADT/Uncopyable.h>
#include <vector>
namespace mcld {
class Attribute;
/** \class AttributeSet
* \brief AttributeSet is a set of Attribute.
*
* Clients delegates Attributes to AttributeSet. AttributeSet deletes delegated
* Attributes during destruction.
*/
class AttributeSet : private Uncopyable
{
private:
typedef std::vector<Attribute*> AttrSet;
public:
typedef AttrSet::iterator iterator;
typedef AttrSet::const_iterator const_iterator;
public:
AttributeSet(unsigned int pNum, const Attribute& pPredefined);
~AttributeSet();
// ----- iterators ----- //
const_iterator begin() const { return m_AttrSet.begin(); }
iterator begin() { return m_AttrSet.begin(); }
const_iterator end () const { return m_AttrSet.end(); }
iterator end () { return m_AttrSet.end(); }
// exists- return the recorded attribute whose content is identical to the
// input attribute.
Attribute *exists(const Attribute& pAttr) const;
// record - record the attribute no mater if it has been recorded.
void record(Attribute& pAttr);
private:
AttrSet m_AttrSet;
const Attribute& m_Predefined;
};
} // namespace of mcld
#endif