|
@@ -15,7 +15,7 @@ static constexpr int DIVIDE_BITS = Core::Math::roundUpLog2(INT_BITS);
|
|
|
|
|
|
static int readBits(const int* data, int index, int bits) {
|
|
static int readBits(const int* data, int index, int bits) {
|
|
int dataIndexA = (index * bits) >> DIVIDE_BITS;
|
|
int dataIndexA = (index * bits) >> DIVIDE_BITS;
|
|
- int dataIndexB = ((index + 1) * bits) >> DIVIDE_BITS;
|
|
|
|
|
|
+ int dataIndexB = ((index * bits) + (bits - 1)) >> DIVIDE_BITS;
|
|
int shifts = (index * bits) & (INT_BITS - 1);
|
|
int shifts = (index * bits) & (INT_BITS - 1);
|
|
if(dataIndexA == dataIndexB) {
|
|
if(dataIndexA == dataIndexB) {
|
|
return (data[dataIndexA] >> shifts) & ((1 << bits) - 1);
|
|
return (data[dataIndexA] >> shifts) & ((1 << bits) - 1);
|
|
@@ -30,7 +30,7 @@ static void setBits(int* data, int index, int bits, int value) {
|
|
int mask = (1 << bits) - 1;
|
|
int mask = (1 << bits) - 1;
|
|
value &= mask;
|
|
value &= mask;
|
|
int dataIndexA = (index * bits) >> DIVIDE_BITS;
|
|
int dataIndexA = (index * bits) >> DIVIDE_BITS;
|
|
- int dataIndexB = ((index + 1) * bits) >> DIVIDE_BITS;
|
|
|
|
|
|
+ int dataIndexB = ((index * bits) + (bits - 1)) >> DIVIDE_BITS;
|
|
int shifts = (index * bits) & (INT_BITS - 1);
|
|
int shifts = (index * bits) & (INT_BITS - 1);
|
|
data[dataIndexA] &= ~(mask << shifts);
|
|
data[dataIndexA] &= ~(mask << shifts);
|
|
data[dataIndexA] |= (value << shifts);
|
|
data[dataIndexA] |= (value << shifts);
|
|
@@ -42,7 +42,7 @@ static void setBits(int* data, int index, int bits, int value) {
|
|
}
|
|
}
|
|
|
|
|
|
static int getArrayLength(int length, int bits) {
|
|
static int getArrayLength(int length, int bits) {
|
|
- return roundUpDivide(length * bits, sizeof(int) * 8);
|
|
|
|
|
|
+ return roundUpDivide(length * bits, INT_BITS);
|
|
}
|
|
}
|
|
|
|
|
|
Core::BitArray::BitArray() : length(0), bits(0), data(nullptr) {
|
|
Core::BitArray::BitArray() : length(0), bits(0), data(nullptr) {
|