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//===----------------------------------------------------------------------===// 937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#ifndef MCLD_ADT_FLAGS_H_ 1037b74a387bb3993387029859c2d9d051c41c724eStephen Hines#define MCLD_ADT_FLAGS_H_ 11affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 1237b74a387bb3993387029859c2d9d051c41c724eStephen Hinesnamespace mcld { 13affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 1437b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <typename Enum> 1537b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass Flags { 1637b74a387bb3993387029859c2d9d051c41c724eStephen Hines public: 17affc150dc44fab1911775a49636d0ce85333b634Zonr Chang typedef Enum enum_type; 18affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 1937b74a387bb3993387029859c2d9d051c41c724eStephen Hines public: 2037b74a387bb3993387029859c2d9d051c41c724eStephen Hines Flags(const Flags& pOther) : m_Data(pOther.m_Data) {} 21affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 2237b74a387bb3993387029859c2d9d051c41c724eStephen Hines explicit Flags(Enum pFlag) : m_Data(pFlag) {} 23affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 2437b74a387bb3993387029859c2d9d051c41c724eStephen Hines explicit Flags(unsigned int pFlag = 0x0) : m_Data(pFlag) {} 25affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 2637b74a387bb3993387029859c2d9d051c41c724eStephen Hines operator unsigned int() const { return m_Data; } 27affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 2837b74a387bb3993387029859c2d9d051c41c724eStephen Hines bool operator!() const { return (m_Data == 0x0); } 29affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 3037b74a387bb3993387029859c2d9d051c41c724eStephen Hines Flags operator&(int pMask) const { return Flags(m_Data & pMask); } 31affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 3237b74a387bb3993387029859c2d9d051c41c724eStephen Hines Flags operator&(unsigned int pMask) const { return Flags(m_Data & pMask); } 33affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 3437b74a387bb3993387029859c2d9d051c41c724eStephen Hines Flags operator&(Enum pMask) const { return Flags(m_Data & pMask); } 35affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 3637b74a387bb3993387029859c2d9d051c41c724eStephen Hines Flags& operator&=(unsigned int pMask) { 37affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_Data &= pMask; 38affc150dc44fab1911775a49636d0ce85333b634Zonr Chang return *this; 39affc150dc44fab1911775a49636d0ce85333b634Zonr Chang } 40affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 41affc150dc44fab1911775a49636d0ce85333b634Zonr Chang Flags& operator=(Flags pOther) { 42affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_Data = pOther.m_Data; 43affc150dc44fab1911775a49636d0ce85333b634Zonr Chang return *this; 44affc150dc44fab1911775a49636d0ce85333b634Zonr Chang } 45affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 4637b74a387bb3993387029859c2d9d051c41c724eStephen Hines Flags operator^(Flags pOther) const { return Flags(m_Data ^ pOther.m_Data); } 47affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 4837b74a387bb3993387029859c2d9d051c41c724eStephen Hines Flags operator^(Enum pOther) const { return Flags(m_Data ^ pOther); } 49affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 5037b74a387bb3993387029859c2d9d051c41c724eStephen Hines Flags& operator^=(Flags pOther) { 51affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_Data ^= pOther.m_Data; 52affc150dc44fab1911775a49636d0ce85333b634Zonr Chang return *this; 53551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines } 54affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 5537b74a387bb3993387029859c2d9d051c41c724eStephen Hines Flags& operator^=(Enum pOther) { 56affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_Data ^= pOther; 57affc150dc44fab1911775a49636d0ce85333b634Zonr Chang return *this; 58affc150dc44fab1911775a49636d0ce85333b634Zonr Chang } 59affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 6037b74a387bb3993387029859c2d9d051c41c724eStephen Hines Flags operator|(Flags pOther) const { return Flags(m_Data | pOther.m_Data); } 61affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 6237b74a387bb3993387029859c2d9d051c41c724eStephen Hines Flags operator|(Enum pOther) const { return Flags(m_Data | pOther); } 63affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 6437b74a387bb3993387029859c2d9d051c41c724eStephen Hines Flags& operator|=(Flags pOther) { 65affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_Data |= pOther.m_Data; 66affc150dc44fab1911775a49636d0ce85333b634Zonr Chang return *this; 67affc150dc44fab1911775a49636d0ce85333b634Zonr Chang } 68affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 6937b74a387bb3993387029859c2d9d051c41c724eStephen Hines Flags& operator|=(Enum pOther) { 70affc150dc44fab1911775a49636d0ce85333b634Zonr Chang m_Data |= pOther; 71affc150dc44fab1911775a49636d0ce85333b634Zonr Chang return *this; 72affc150dc44fab1911775a49636d0ce85333b634Zonr Chang } 73affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 7437b74a387bb3993387029859c2d9d051c41c724eStephen Hines Flags operator~() const { return Flags(~m_Data); } 75affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 7637b74a387bb3993387029859c2d9d051c41c724eStephen Hines private: 7722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao unsigned int m_Data; 78affc150dc44fab1911775a49636d0ce85333b634Zonr Chang}; 79affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 8037b74a387bb3993387029859c2d9d051c41c724eStephen Hines} // namespace mcld 81affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 8237b74a387bb3993387029859c2d9d051c41c724eStephen Hines#endif // MCLD_ADT_FLAGS_H_ 83