1affc150dc44fab1911775a49636d0ce85333b634Zonr Chang//===- Flags.h ------------------------------------------------------------===//
2affc150dc44fab1911775a49636d0ce85333b634Zonr Chang//
3affc150dc44fab1911775a49636d0ce85333b634Zonr Chang//                     The MCLinker Project
4affc150dc44fab1911775a49636d0ce85333b634Zonr Chang//
5affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// This file is distributed under the University of Illinois Open Source
6affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// License. See LICENSE.TXT for details.
7affc150dc44fab1911775a49636d0ce85333b634Zonr Chang//
8affc150dc44fab1911775a49636d0ce85333b634Zonr Chang//===----------------------------------------------------------------------===//
987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#ifndef MCLD_ADT_FLAGS_H
1087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#define MCLD_ADT_FLAGS_H
11affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
12affc150dc44fab1911775a49636d0ce85333b634Zonr Changnamespace mcld
13affc150dc44fab1911775a49636d0ce85333b634Zonr Chang{
14affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
15affc150dc44fab1911775a49636d0ce85333b634Zonr Changtemplate<typename Enum>
16affc150dc44fab1911775a49636d0ce85333b634Zonr Changclass Flags
17affc150dc44fab1911775a49636d0ce85333b634Zonr Chang{
18affc150dc44fab1911775a49636d0ce85333b634Zonr Changpublic:
19affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  typedef Enum enum_type;
20affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
21affc150dc44fab1911775a49636d0ce85333b634Zonr Changpublic:
22affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  Flags(const Flags& pOther)
23affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  : m_Data(pOther.m_Data) {}
24affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
25affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  Flags(Enum pFlag)
26affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  : m_Data(pFlag) {}
27affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
2822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  Flags(unsigned int pFlag = 0x0)
29affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  : m_Data(pFlag) {}
30affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
3122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  operator unsigned int () const
32affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  { return m_Data; }
33affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
34affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  bool operator! () const
35affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  { return (m_Data == 0x0); }
36affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
37affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  Flags operator& (int pMask ) const
38affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  { return Flags(m_Data & pMask); }
39affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
40affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  Flags operator& (unsigned int pMask ) const
41affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  { return Flags(m_Data & pMask); }
42affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
43affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  Flags operator& (Enum pMask ) const
44affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  { return Flags(m_Data & pMask); }
45affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
46affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  Flags& operator&= (unsigned int pMask ) {
47affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_Data &= pMask;
48affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    return *this;
49affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  }
50affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
51affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  Flags& operator=(Flags pOther) {
52affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_Data = pOther.m_Data;
53affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    return *this;
54affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  }
55affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
56affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  Flags operator^ (Flags pOther) const
57affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  { return Flags(m_Data^pOther.m_Data); }
58affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
59affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  Flags operator^ (Enum pOther) const
60affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  { return Flags(m_Data^pOther); }
61affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
62affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  Flags& operator^= (Flags pOther) {
63affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_Data ^= pOther.m_Data;
64affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    return *this;
65551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  }
66affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
67affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  Flags& operator^= (Enum pOther) {
68affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_Data ^= pOther;
69affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    return *this;
70affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  }
71affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
72affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  Flags operator| (Flags pOther) const
73affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  { return Flags(m_Data | pOther.m_Data); }
74affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
75affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  Flags operator| (Enum pOther ) const
76affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  { return Flags(m_Data | pOther); }
77affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
78affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  Flags& operator|= (Flags pOther) {
79affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_Data |= pOther.m_Data;
80affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    return *this;
81affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  }
82affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
83affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  Flags& operator|= (Enum pOther) {
84affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    m_Data |= pOther;
85affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    return *this;
86affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  }
87affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
88affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  Flags operator~ () const
89affc150dc44fab1911775a49636d0ce85333b634Zonr Chang  { return Flags(~m_Data); }
90affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
91affc150dc44fab1911775a49636d0ce85333b634Zonr Changprivate:
9222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  unsigned int m_Data;
93affc150dc44fab1911775a49636d0ce85333b634Zonr Chang};
94affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
95affc150dc44fab1911775a49636d0ce85333b634Zonr Chang} // namespace of mcld
96affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
97affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#endif
98affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
99