Home | History | Annotate | Download | only in qtools
      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:
     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   }
     18   ~Bitvector() {
     19     delete[] vector_;
     20   }
     21 
     22   void        SetBit(int bitnum) {
     23     assert(bitnum < num_bits_);
     24     vector_[bitnum >> 5] |= 1 << (bitnum & 31);
     25   }
     26   void        ClearBit(int bitnum) {
     27     assert(bitnum < num_bits_);
     28     vector_[bitnum >> 5] &= ~(1 << (bitnum & 31));
     29   }
     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