• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  // Copyright 2006 The Android Open Source Project
2  
3  #ifndef BITVECTOR_H
4  #define BITVECTOR_H
5  
6  #include <inttypes.h>
7  #include <assert.h>
8  
9  class Bitvector {
10   public:
Bitvector(int num_bits)11    explicit Bitvector(int num_bits) {
12      num_bits_ = num_bits;
13  
14      // Round up to a multiple of 32
15      num_bits = (num_bits + 31) & ~31;
16      vector_ = new uint32_t[num_bits >> 5];
17    }
~Bitvector()18    ~Bitvector() {
19      delete[] vector_;
20    }
21  
SetBit(int bitnum)22    void        SetBit(int bitnum) {
23      assert(bitnum < num_bits_);
24      vector_[bitnum >> 5] |= 1 << (bitnum & 31);
25    }
ClearBit(int bitnum)26    void        ClearBit(int bitnum) {
27      assert(bitnum < num_bits_);
28      vector_[bitnum >> 5] &= ~(1 << (bitnum & 31));
29    }
GetBit(int bitnum)30    bool        GetBit(int bitnum) {
31      assert(bitnum < num_bits_);
32      return (vector_[bitnum >> 5] >> (bitnum & 31)) & 1;
33    }
34  
35   private:
36    int         num_bits_;
37    uint32_t    *vector_;
38  };
39  
40  #endif  // BITVECTOR_H
41