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