summaryrefslogtreecommitdiff
path: root/runtime/base/bit_vector-inl.h
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/base/bit_vector-inl.h')
-rw-r--r--runtime/base/bit_vector-inl.h18
1 files changed, 18 insertions, 0 deletions
diff --git a/runtime/base/bit_vector-inl.h b/runtime/base/bit_vector-inl.h
index 08877987b1..0e67f77e19 100644
--- a/runtime/base/bit_vector-inl.h
+++ b/runtime/base/bit_vector-inl.h
@@ -65,6 +65,24 @@ inline uint32_t BitVector::IndexIterator::FindIndex(uint32_t start_index) const
return word_index * 32u + CTZ(word);
}
+inline BitVector::IndexIterator::IndexIterator(const BitVector* bit_vector, begin_tag)
+ : bit_storage_(bit_vector->GetRawStorage()),
+ storage_size_(bit_vector->storage_size_),
+ bit_index_(FindIndex(0u)) { }
+
+inline BitVector::IndexIterator::IndexIterator(const BitVector* bit_vector, end_tag)
+ : bit_storage_(bit_vector->GetRawStorage()),
+ storage_size_(bit_vector->storage_size_),
+ bit_index_(BitSize()) { }
+
+inline BitVector::IndexIterator BitVector::IndexContainer::begin() const {
+ return IndexIterator(bit_vector_, IndexIterator::begin_tag());
+}
+
+inline BitVector::IndexIterator BitVector::IndexContainer::end() const {
+ return IndexIterator(bit_vector_, IndexIterator::end_tag());
+}
+
inline void BitVector::ClearAllBits() {
memset(storage_, 0, storage_size_ * kWordBytes);
}