00001 /* pieceMask64.h 00002 */ 00003 #ifndef PIECEMASK64_H 00004 #define PIECEMASK64_H 00005 #include "osl/bits/mask.h" 00006 00007 namespace osl 00008 { 00009 namespace container 00010 { 00011 class PieceMask64 00012 { 00013 protected: 00014 Mask64 mask; 00015 public: 00016 static int numToIndex(int) { return 0; } 00017 static int numToOffset(int num) { return num; } 00018 PieceMask64() { resetAll(); } 00019 explicit PieceMask64(misc::Mask64 const& m) : mask(m) {} 00020 protected: 00021 misc::Mask64& mutableMask(int) { return mask; } 00022 public: 00023 const misc::Mask64& getMask(int) const { return mask; } 00024 void resetAll() 00025 { 00026 mask=misc::Mask64::makeDirect(0uLL); 00027 } 00028 void setAll() 00029 { 00030 mask=misc::Mask64::makeDirect(0xffffffffffuLL); 00031 } 00032 PieceMask64& operator^=(const PieceMask64& o) 00033 { 00034 mask ^= o.mask; 00035 return *this; 00036 } 00037 PieceMask64& operator&=(const PieceMask64& o) 00038 { 00039 mask &= o.mask; 00040 return *this; 00041 } 00042 PieceMask64& operator|=(const PieceMask64& o) 00043 { 00044 mask |= o.mask; 00045 return *this; 00046 } 00047 PieceMask64& operator-=(const PieceMask64& o) 00048 { 00049 mask -= o.mask; 00050 return *this; 00051 } 00052 PieceMask64& operator+=(const PieceMask64& o) 00053 { 00054 mask += o.mask; 00055 return *this; 00056 } 00057 bool none() const { return mask.none(); } 00058 bool hasMultipleBit() const 00059 { 00060 if (none()) 00061 return false; 00062 return mask.hasMultipleBit(); 00063 } 00068 int countBit2() const 00069 { 00070 if (none()) 00071 return 0; 00072 return mask.countBit2(); 00073 } 00074 int 00075 #ifdef __GNUC__ 00076 __attribute__ ((pure)) 00077 #endif 00078 countBit() const 00079 { 00080 return mask.countBit(); 00081 } 00082 int takeOneBit() 00083 { 00084 assert(!none()); 00085 return mask.takeOneBit(); 00086 } 00087 }; 00088 } // namespace container 00089 using container::PieceMask64; 00090 } // namespace osl 00091 00092 00093 #endif /* PIECEMASK64_H */ 00094 // ;;; Local Variables: 00095 // ;;; mode:c++ 00096 // ;;; c-basic-offset:2 00097 // ;;; End: