OSDN Git Service

original
[gb-231r1-is01/GB_2.3_IS01.git] / sdk / emulator / qtools / bitvector.h
diff --git a/sdk/emulator/qtools/bitvector.h b/sdk/emulator/qtools/bitvector.h
new file mode 100644 (file)
index 0000000..d3f5cf1
--- /dev/null
@@ -0,0 +1,40 @@
+// 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