flags.hpp
Go to the documentation of this file.
00001 
00006 /*****************************************************************************
00007  ** Ifdefs
00008  *****************************************************************************/
00009 
00010 #ifndef ECL_UTILITIES_FLAGS_HPP_
00011 #define ECL_UTILITIES_FLAGS_HPP_
00012 
00013 /*****************************************************************************
00014  ** Includes
00015  *****************************************************************************/
00016 
00017 /*****************************************************************************
00018  ** Namespaces
00019  *****************************************************************************/
00020 
00021 namespace ecl
00022 {
00023 
00024 /*****************************************************************************
00025  ** Classes
00026  *****************************************************************************/
00027 
00028 enum Bits
00029 {
00030   Bit0 =  0x0000, Bit1 =  0x0001, Bit2 =  0x0002, Bit3 =  0x0004, Bit4 =  0x0008, Bit5 =  0x0010, Bit6 =  0x0020,
00031   Bit7 =  0x0040, Bit8 =  0x0080, Bit9 =  0x0100, Bit10 = 0x0200, Bit11 = 0x0400, Bit12 = 0x0800, Bit13 = 0x1000,
00032   Bit14 = 0x2000, Bit15 = 0x4000, Bit16 = 0x8000,
00033 };
00064 template<typename Enum>
00065   class Flags
00066   {
00067   public:
00068     /*********************
00069      ** C&D
00070      **********************/
00071     Flags() : value(0) {}; 
00072     Flags(const Flags<Enum> & other) : value(other.value) {}; 
00073     Flags(Enum flag) : value(flag) {}; 
00074     ~Flags() { }
00075     ;
00076 
00077     /*********************
00078      ** Utility
00079      **********************/
00080     void clear() { value = 0; } 
00084     bool testFlag(Enum flag) const
00085     {
00086       if ((value & flag) != 0)
00087       {
00088         return true;
00089       }
00090       else
00091       {
00092         if ( ( flag == 0 ) && ( value == 0 ) ) {
00093           return true;
00094         } else {
00095           return false;
00096         }
00097       }
00098     }
00099     ;
00100 
00101     /*********************
00102      ** Type compatibility
00103      **********************/
00104     operator int() const
00105     {
00106       return value;
00107     }
00108     ; 
00110     /******************************************
00111      ** Return new instance
00112      *******************************************/
00117     Flags<Enum> operator&(int mask) const
00118     {
00119       Flags<Enum> f;
00120       f.value = value & mask;
00121       return f;
00122     }
00123     ;
00128     Flags<Enum> operator&(Enum flag) const
00129     {
00130       Flags<Enum> f;
00131       f.value = value & flag;
00132       return f;
00133     }
00134     ;
00139     Flags<Enum> operator|(Flags<Enum> other) const
00140     {
00141       Flags<Enum> f;
00142       f.value = value | other.value;
00143       return f;
00144     }
00145     ;
00150     Flags<Enum> operator|(Enum flag) const
00151     {
00152       Flags<Enum> f;
00153       f.value = value | flag;
00154       return f;
00155     }
00156     ;
00161     Flags<Enum> operator^(Flags<Enum> other) const
00162     {
00163       Flags<Enum> f;
00164       f.value = value ^ other.value;
00165       return f;
00166     }
00167     ;
00172     Flags<Enum> operator^(Enum flag) const
00173     {
00174       Flags<Enum> f;
00175       f.value = value ^ flag;
00176       return f;
00177     }
00178     ;
00183     Flags<Enum> operator~() const
00184     {
00185       Flags<Enum> f;
00186       f.value = ~value;
00187       return f;
00188     }
00189     ;
00190 
00191     /******************************************
00192      ** Update current instance
00193      *******************************************/
00198     Flags<Enum> & operator=(const Flags<Enum> & other)
00199     {
00200       value = other.value;
00201       return *this;
00202     }
00203     ;
00208     Flags<Enum> & operator=(const Enum & flag)
00209     {
00210       value = static_cast<int>(flag);
00211       return *this;
00212     }
00213     ;
00218     Flags<Enum> & operator&=(int mask)
00219     {
00220       value &= mask;
00221       return *this;
00222     }
00223     ;
00228     Flags<Enum> & operator|=(Flags<Enum> other)
00229     {
00230       value |= other;
00231       return *this;
00232     }
00233     ;
00238     Flags<Enum> & operator|=(Enum flag)
00239     {
00240       value |= flag;
00241       return *this;
00242     }
00243     ;
00248     Flags<Enum> & operator^=(Flags<Enum> other)
00249     {
00250       value ^= other;
00251       return *this;
00252     }
00253     ;
00258     Flags<Enum> & operator^=(Enum flag)
00259     {
00260       value ^= flag;
00261       return *this;
00262     }
00263     ;
00264 
00265     /*********************
00266      ** Helper Methods
00267      **********************/
00272     friend inline Flags<Enum> operator|(Enum flag, Flags<Enum> flags)
00273     {
00274       return flags | flag;
00275     }
00276   private:
00277     int value;
00278   };
00279 
00280 } // namespace ecl
00281 
00282 #endif /* ECL_UTILITIES_FLAGS_HPP_ */


ecl_utilities
Author(s): Daniel Stonier
autogenerated on Wed Aug 26 2015 11:27:19