|
@@ -212,8 +212,10 @@ bool BitfieldMan::getMissingIndexRandomly(size_t& index,
|
|
|
} else {
|
|
|
mask = 0xff;
|
|
|
}
|
|
|
- if(bitfield[byte]&mask) {
|
|
|
- index = byte*8+getNthBitIndex(bitfield[byte], 1);
|
|
|
+ unsigned char bits = bitfield[byte];
|
|
|
+
|
|
|
+ if(bits&mask) {
|
|
|
+ index = byte*8+getNthBitIndex(bits, 1);
|
|
|
return true;
|
|
|
}
|
|
|
byte++;
|
|
@@ -270,11 +272,12 @@ template<typename Array>
|
|
|
bool BitfieldMan::getFirstMissingIndex(size_t& index, const Array& bitfield, size_t bitfieldLength) const
|
|
|
{
|
|
|
for(size_t i = 0; i < bitfieldLength; ++i) {
|
|
|
- size_t base = i*8;
|
|
|
- for(size_t bi = 0; bi < 8 && base+bi < blocks; ++bi) {
|
|
|
- unsigned char mask = 128 >> bi;
|
|
|
- if(bitfield[i] & mask) {
|
|
|
- index = base+bi;
|
|
|
+ unsigned char bits = bitfield[i];
|
|
|
+ unsigned char mask = 128;
|
|
|
+ size_t tindex = i*8;
|
|
|
+ for(size_t bi = 0; bi < 8 && tindex < blocks; ++bi, mask >>= 1, ++tindex) {
|
|
|
+ if(bits & mask) {
|
|
|
+ index = tindex;
|
|
|
return true;
|
|
|
}
|
|
|
}
|
|
@@ -395,11 +398,12 @@ bool BitfieldMan::getAllMissingIndexes(std::deque<size_t>& indexes,
|
|
|
size_t bitfieldLength) const
|
|
|
{
|
|
|
for(size_t i = 0; i < bitfieldLength; ++i) {
|
|
|
- size_t base = i*8;
|
|
|
- for(size_t bi = 0; bi < 8 && base+bi < blocks; ++bi) {
|
|
|
- unsigned char mask = 128 >> bi;
|
|
|
- if(bitfield[i] & mask) {
|
|
|
- indexes.push_back(base+bi);
|
|
|
+ unsigned char bits = bitfield[i];
|
|
|
+ unsigned char mask = 128;
|
|
|
+ size_t index = i*8;
|
|
|
+ for(size_t bi = 0; bi < 8 && index < blocks; ++bi, mask >>= 1, ++index) {
|
|
|
+ if(bits & mask) {
|
|
|
+ indexes.push_back(index);
|
|
|
}
|
|
|
}
|
|
|
}
|