/usr/include/osl/container/pieceMask32.h is in libosl-dev 0.6.0-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | /* pieceMask32.h
*/
#ifndef PIECEMASK32_H
#define PIECEMASK32_H
#include "osl/misc/mask.h"
#include "osl/misc/carray.h"
namespace osl
{
namespace container
{
class PieceMask32
{
protected:
CArray<misc::Mask32,2> mask;
public:
static int numToIndex(int num) { return num>>5; }
static int numToOffset(int num) { return num&31; }
PieceMask32()
{
resetAll();
}
PieceMask32(const misc::Mask32& m1,const misc::Mask32& m2)
{
mask[0]=m1; mask[1]=m2;
}
protected:
misc::Mask32& mutableMask(int index) { return mask[index]; }
public:
const misc::Mask32& getMask(int index) const
{
return mask[index];
}
PieceMask32& operator^=(const PieceMask32& o)
{
mask[0] ^= o.mask[0];
mask[1] ^= o.mask[1];
return *this;
}
PieceMask32& operator&=(const PieceMask32& o)
{
mask[0] &= o.mask[0];
mask[1] &= o.mask[1];
return *this;
}
PieceMask32& operator|=(const PieceMask32& o)
{
mask[0] |= o.mask[0];
mask[1] |= o.mask[1];
return *this;
}
PieceMask32& operator-=(const PieceMask32& o)
{
mask[0] -= o.mask[0];
mask[1] -= o.mask[1];
return *this;
}
PieceMask32& operator+=(const PieceMask32& o)
{
mask[0] += o.mask[0];
mask[1] += o.mask[1];
return *this;
}
void resetAll()
{
mask[0]=mask[1]=misc::Mask32::makeDirect(0u);
}
void setAll()
{
mask[0]=misc::Mask32::makeDirect(0xffffffffu);
mask[1]=misc::Mask32::makeDirect(0xffu);
}
bool none() const
{
return (mask[0]|mask[1]).none();
}
bool hasMultipleBit() const
{
if (none())
return false;
if (! mask[0].any())
return mask[1].hasMultipleBit();
if (! mask[1].any())
return mask[0].hasMultipleBit();
return true;
}
/**
* bit の数を2まで数える
* @return 0,1,2 (2の場合は2以上)
*/
int countBit2() const
{
if (none())
return 0;
if (! mask[0].any())
return mask[1].countBit2();
if (! mask[1].any())
return mask[0].countBit2();
return 2;
}
int countBit() const
{
return mask[0].countBit() + mask[1].countBit();
}
int takeOneBit()
{
assert(!none());
if(! mask[0].none())
return mask[0].takeOneBit();
return mask[1].takeOneBit()+32;
}
};
} // namespace container
using container::PieceMask32;
} // namespace osl
#endif /* PIECEMASK32_H */
// ;;; Local Variables:
// ;;; mode:c++
// ;;; c-basic-offset:2
// ;;; End:
|