Index: vm/bitmap.h |
=================================================================== |
--- vm/bitmap.h (revision 0) |
+++ vm/bitmap.h (revision 0) |
@@ -0,0 +1,67 @@ |
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+ |
+#ifndef VM_BITMAP_H_ |
+#define VM_BITMAP_H_ |
+ |
+#include "vm/allocation.h" |
+ |
+namespace dart { |
+ |
+// Forward declarations. |
+class RawStackmap; |
+class Stackmap; |
+ |
+ |
+// BitmapBuilder is used to build a bitmap. The implementation is optimized for |
+// a dense set of small bit maps without an upper bound (e.g: a pointer map |
+// description of a stack). |
+class BitmapBuilder : public ZoneAllocated { |
+ public: |
+ BitmapBuilder() : size_in_bytes_(kInitialSizeInBytes), |
+ bit_list_(bit_list_data_) { |
+ memset(bit_list_data_, 0, kInitialSizeInBytes); |
+ } |
+ |
+ intptr_t SizeInBits() const { return (size_in_bytes_ * kBitsPerByte); } |
+ intptr_t SizeInBytes() const { return size_in_bytes_; } |
+ |
+ // Get/Set individual bits in the bitmap, set expands the underlying bitmap |
+ // if needed. |
+ bool Get(intptr_t bit_offset) const; |
+ void Set(intptr_t bit_offset, bool value); |
+ |
+ // Return the bit offset of the highest bit set. |
+ intptr_t Maximum() const; |
+ |
+ // Return the bit offset of the lowest bit set. |
+ intptr_t Minimum() const; |
+ |
+ // Sets min..max (inclusive) to value. |
+ void SetRange(intptr_t min, intptr_t max, bool value); |
+ |
+ // Replicates the bit map setting of the passed in Stackmap object. |
+ void SetBits(const Stackmap& bitmap); |
+ |
+ private: |
+ static const intptr_t kInitialSizeInBytes = 16; |
+ static const intptr_t kIncrementSizeInBytes = 16; |
+ |
+ bool InRange(intptr_t offset) const { |
+ return (offset >= 0) && (offset < SizeInBits()); |
+ } |
+ |
+ bool GetBit(intptr_t bit_offset) const; |
+ void SetBit(intptr_t bit_offset, bool value); |
+ |
+ intptr_t size_in_bytes_; |
+ uint8_t bit_list_data_[kInitialSizeInBytes]; |
+ uint8_t* bit_list_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(BitmapBuilder); |
+}; |
+ |
+} // namespace dart |
+ |
+#endif // VM_BITMAP_H_ |