// 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