diff options
Diffstat (limited to 'runtime/base/bit_vector.h')
-rw-r--r-- | runtime/base/bit_vector.h | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/runtime/base/bit_vector.h b/runtime/base/bit_vector.h index 17835f5610..afa8dc187e 100644 --- a/runtime/base/bit_vector.h +++ b/runtime/base/bit_vector.h @@ -21,6 +21,7 @@ #include <iterator> #include "base/bit_utils.h" +#include "globals.h" namespace art { @@ -229,6 +230,19 @@ class BitVector { // Number of bits set in range [0, end) in storage. (No range check.) static uint32_t NumSetBits(const uint32_t* storage, uint32_t end); + // Fill given memory region with the contents of the vector and zero padding. + void CopyTo(void* dst, size_t len) const { + DCHECK_LE(static_cast<size_t>(GetHighestBitSet() + 1), len * kBitsPerByte); + size_t vec_len = GetSizeOf(); + if (vec_len < len) { + void* dst_padding = reinterpret_cast<uint8_t*>(dst) + vec_len; + memcpy(dst, storage_, vec_len); + memset(dst_padding, 0, len - vec_len); + } else { + memcpy(dst, storage_, len); + } + } + void Dump(std::ostream& os, const char* prefix) const; private: |