📄 bitmask.hpp
字号:
*/ static void clear(Uint32 data[]); void clear(); /** * isclear - Check if all bits are clear. This is faster * than checking count() == 0. */ static bool isclear(const Uint32 data[]); bool isclear() const; /** * count - Count number of set bits. */ static unsigned count(const Uint32 data[]); unsigned count() const; /** * find - Find first set bit, starting at given position. * Returns NotFound when not found. */ static unsigned find(const Uint32 data[], unsigned n); unsigned find(unsigned n) const; /** * equal - Bitwise equal. */ static bool equal(const Uint32 data[], const Uint32 data2[]); bool equal(const BitmaskPOD<size>& mask2) const; /** * bitOR - Bitwise (x | y) into first operand. */ static void bitOR(Uint32 data[], const Uint32 data2[]); BitmaskPOD<size>& bitOR(const BitmaskPOD<size>& mask2); /** * bitAND - Bitwise (x & y) into first operand. */ static void bitAND(Uint32 data[], const Uint32 data2[]); BitmaskPOD<size>& bitAND(const BitmaskPOD<size>& mask2); /** * bitANDC - Bitwise (x & ~y) into first operand. */ static void bitANDC(Uint32 data[], const Uint32 data2[]); BitmaskPOD<size>& bitANDC(const BitmaskPOD<size>& mask2); /** * bitXOR - Bitwise (x ^ y) into first operand. */ static void bitXOR(Uint32 data[], const Uint32 data2[]); BitmaskPOD<size>& bitXOR(const BitmaskPOD<size>& mask2); /** * bitXORC - Bitwise (x ^ ~y) into first operand. */ static void bitXORC(Uint32 data[], const Uint32 data2[]); BitmaskPOD<size>& bitXORC(const BitmaskPOD<size>& mask2); /** * contains - Check if all bits set in data2 (that) are also set in data (this) */ static bool contains(Uint32 data[], const Uint32 data2[]); bool contains(BitmaskPOD<size> that); /** * overlaps - Check if any bit set in this BitmaskPOD (data) is also set in that (data2) */ static bool overlaps(Uint32 data[], const Uint32 data2[]); bool overlaps(BitmaskPOD<size> that); /** * getText - Return as hex-digits (only for debug routines). */ static char* getText(const Uint32 data[], char* buf); char* getText(char* buf) const;};template <unsigned size>inline voidBitmaskPOD<size>::assign(Uint32 dst[], const Uint32 src[]){ BitmaskImpl::assign(size, dst, src);}template <unsigned size>inline voidBitmaskPOD<size>::assign(Uint32 dst[], const BitmaskPOD<size> & src){ BitmaskImpl::assign(size, dst, src.rep.data);}template <unsigned size>inline voidBitmaskPOD<size>::assign(const typename BitmaskPOD<size>::Data & src){ BitmaskPOD<size>::assign(rep.data, src.data);}template <unsigned size>inline voidBitmaskPOD<size>::assign(const BitmaskPOD<size> & src){ BitmaskPOD<size>::assign(rep.data, src.rep.data);}template <unsigned size>inline voidBitmaskPOD<size>::copyto(unsigned sz, Uint32 dst[]) const{ BitmaskImpl::assign(sz, dst, rep.data);}template <unsigned size>inline voidBitmaskPOD<size>::assign(unsigned sz, const Uint32 src[]){ BitmaskImpl::assign(sz, rep.data, src);}template <unsigned size>inline boolBitmaskPOD<size>::get(const Uint32 data[], unsigned n){ return BitmaskImpl::get(size, data, n);}template <unsigned size>inline boolBitmaskPOD<size>::get(unsigned n) const{ return BitmaskPOD<size>::get(rep.data, n);}template <unsigned size>inline voidBitmaskPOD<size>::set(Uint32 data[], unsigned n, bool value){ BitmaskImpl::set(size, data, n, value);}template <unsigned size>inline voidBitmaskPOD<size>::set(unsigned n, bool value){ BitmaskPOD<size>::set(rep.data, n, value);}template <unsigned size>inline voidBitmaskPOD<size>::set(Uint32 data[], unsigned n){ BitmaskImpl::set(size, data, n);}template <unsigned size>inline voidBitmaskPOD<size>::set(unsigned n){ BitmaskPOD<size>::set(rep.data, n);}template <unsigned size>inline voidBitmaskPOD<size>::set(Uint32 data[]){ BitmaskImpl::set(size, data);}template <unsigned size>inline voidBitmaskPOD<size>::set(){ BitmaskPOD<size>::set(rep.data);}template <unsigned size>inline voidBitmaskPOD<size>::clear(Uint32 data[], unsigned n){ BitmaskImpl::clear(size, data, n);}template <unsigned size>inline voidBitmaskPOD<size>::clear(unsigned n){ BitmaskPOD<size>::clear(rep.data, n);}template <unsigned size>inline voidBitmaskPOD<size>::clear(Uint32 data[]){ BitmaskImpl::clear(size, data);}template <unsigned size>inline voidBitmaskPOD<size>::clear(){ BitmaskPOD<size>::clear(rep.data);}template <unsigned size>inline boolBitmaskPOD<size>::isclear(const Uint32 data[]){ return BitmaskImpl::isclear(size, data);}template <unsigned size>inline boolBitmaskPOD<size>::isclear() const{ return BitmaskPOD<size>::isclear(rep.data);}template <unsigned size>unsignedBitmaskPOD<size>::count(const Uint32 data[]){ return BitmaskImpl::count(size, data);}template <unsigned size>inline unsignedBitmaskPOD<size>::count() const{ return BitmaskPOD<size>::count(rep.data);}template <unsigned size>unsignedBitmaskPOD<size>::find(const Uint32 data[], unsigned n){ return BitmaskImpl::find(size, data, n);}template <unsigned size>inline unsignedBitmaskPOD<size>::find(unsigned n) const{ return BitmaskPOD<size>::find(rep.data, n);}template <unsigned size>inline boolBitmaskPOD<size>::equal(const Uint32 data[], const Uint32 data2[]){ return BitmaskImpl::equal(size, data, data2);}template <unsigned size>inline boolBitmaskPOD<size>::equal(const BitmaskPOD<size>& mask2) const{ return BitmaskPOD<size>::equal(rep.data, mask2.rep.data);}template <unsigned size>inline voidBitmaskPOD<size>::bitOR(Uint32 data[], const Uint32 data2[]){ BitmaskImpl::bitOR(size,data, data2);}template <unsigned size>inline BitmaskPOD<size>&BitmaskPOD<size>::bitOR(const BitmaskPOD<size>& mask2){ BitmaskPOD<size>::bitOR(rep.data, mask2.rep.data); return *this;}template <unsigned size>inline voidBitmaskPOD<size>::bitAND(Uint32 data[], const Uint32 data2[]){ BitmaskImpl::bitAND(size,data, data2);}template <unsigned size>inline BitmaskPOD<size>&BitmaskPOD<size>::bitAND(const BitmaskPOD<size>& mask2){ BitmaskPOD<size>::bitAND(rep.data, mask2.rep.data); return *this;}template <unsigned size>inline voidBitmaskPOD<size>::bitANDC(Uint32 data[], const Uint32 data2[]){ BitmaskImpl::bitANDC(size,data, data2);}template <unsigned size>inline BitmaskPOD<size>&BitmaskPOD<size>::bitANDC(const BitmaskPOD<size>& mask2){ BitmaskPOD<size>::bitANDC(rep.data, mask2.rep.data); return *this;}template <unsigned size>inline voidBitmaskPOD<size>::bitXOR(Uint32 data[], const Uint32 data2[]){ BitmaskImpl::bitXOR(size,data, data2);}template <unsigned size>inline BitmaskPOD<size>&BitmaskPOD<size>::bitXOR(const BitmaskPOD<size>& mask2){ BitmaskPOD<size>::bitXOR(rep.data, mask2.rep.data); return *this;}template <unsigned size>inline voidBitmaskPOD<size>::bitXORC(Uint32 data[], const Uint32 data2[]){ BitmaskImpl::bitXORC(size,data, data2);}template <unsigned size>inline BitmaskPOD<size>&BitmaskPOD<size>::bitXORC(const BitmaskPOD<size>& mask2){ BitmaskPOD<size>::bitXORC(rep.data, mask2.rep.data); return *this;}template <unsigned size>char *BitmaskPOD<size>::getText(const Uint32 data[], char* buf){ return BitmaskImpl::getText(size, data, buf);}template <unsigned size>inline char *BitmaskPOD<size>::getText(char* buf) const{ return BitmaskPOD<size>::getText(rep.data, buf);}template <unsigned size>inline boolBitmaskPOD<size>::contains(Uint32 data[], const Uint32 data2[]){ return BitmaskImpl::contains(size, data, data2);}template <unsigned size>inline boolBitmaskPOD<size>::contains(BitmaskPOD<size> that){ return BitmaskPOD<size>::contains(this->rep.data, that.rep.data);}template <unsigned size>inline boolBitmaskPOD<size>::overlaps(Uint32 data[], const Uint32 data2[]){ return BitmaskImpl::overlaps(size, data, data2);}template <unsigned size>inline boolBitmaskPOD<size>::overlaps(BitmaskPOD<size> that){ return BitmaskPOD<size>::overlaps(this->rep.data, that.rep.data);}template <unsigned size>class Bitmask : public BitmaskPOD<size> {public: Bitmask() { this->clear();}};inline voidBitmaskImpl::getField(unsigned size, const Uint32 src[], unsigned pos, unsigned len, Uint32 dst[]){ assert(pos + len <= (size << 5)); src += (pos >> 5); Uint32 offset = pos & 31; * dst = (* src >> offset) & (len >= 32 ? ~0 : (1 << len) - 1); if(offset + len <= 32) { return; } Uint32 used = (32 - offset); assert(len > used); getFieldImpl(src+1, used & 31, len-used, dst+(used >> 5));}inline voidBitmaskImpl::setField(unsigned size, Uint32 dst[], unsigned pos, unsigned len, const Uint32 src[]){ assert(pos + len <= (size << 5)); dst += (pos >> 5); Uint32 offset = pos & 31; Uint32 mask = (len >= 32 ? ~0 : (1 << len) - 1) << offset; * dst = (* dst & ~mask) | ((*src << offset) & mask); if(offset + len <= 32) { return; } Uint32 used = (32 - offset); assert(len > used); setFieldImpl(dst+1, used & 31, len-used, src+(used >> 5));}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -