| 119 | } |
| 120 | |
| 121 | int BitArray::getNextSet(int from) { |
| 122 | if (from >= size) { |
| 123 | return size; |
| 124 | } |
| 125 | int bitsOffset = from >> logBits; |
| 126 | int currentBits = bits[bitsOffset]; |
| 127 | // mask off lesser bits first |
| 128 | currentBits &= ~((1 << (from & bitsMask)) - 1); |
| 129 | while (currentBits == 0) { |
| 130 | if (++bitsOffset == (int)bits->size()) { |
| 131 | return size; |
| 132 | } |
| 133 | currentBits = bits[bitsOffset]; |
| 134 | } |
| 135 | int result = (bitsOffset << logBits) + numberOfTrailingZeros(currentBits); |
| 136 | return result > size ? size : result; |
| 137 | } |
| 138 | |
| 139 | int BitArray::getNextUnset(int from) { |
| 140 | if (from >= size) { |
no test coverage detected