41 lines
848 B
C++
41 lines
848 B
C++
// Copyright 2006 The Android Open Source Project
|
|
|
|
#ifndef BITVECTOR_H
|
|
#define BITVECTOR_H
|
|
|
|
#include <inttypes.h>
|
|
#include <assert.h>
|
|
|
|
class Bitvector {
|
|
public:
|
|
explicit Bitvector(int num_bits) {
|
|
num_bits_ = num_bits;
|
|
|
|
// Round up to a multiple of 32
|
|
num_bits = (num_bits + 31) & ~31;
|
|
vector_ = new uint32_t[num_bits >> 5];
|
|
}
|
|
~Bitvector() {
|
|
delete[] vector_;
|
|
}
|
|
|
|
void SetBit(int bitnum) {
|
|
assert(bitnum < num_bits_);
|
|
vector_[bitnum >> 5] |= 1 << (bitnum & 31);
|
|
}
|
|
void ClearBit(int bitnum) {
|
|
assert(bitnum < num_bits_);
|
|
vector_[bitnum >> 5] &= ~(1 << (bitnum & 31));
|
|
}
|
|
bool GetBit(int bitnum) {
|
|
assert(bitnum < num_bits_);
|
|
return (vector_[bitnum >> 5] >> (bitnum & 31)) & 1;
|
|
}
|
|
|
|
private:
|
|
int num_bits_;
|
|
uint32_t *vector_;
|
|
};
|
|
|
|
#endif // BITVECTOR_H
|