diff --git a/persistent-data/data-structures/bitset.cc b/persistent-data/data-structures/bitset.cc index 98805fa..fae1f34 100644 --- a/persistent-data/data-structures/bitset.cc +++ b/persistent-data/data-structures/bitset.cc @@ -82,7 +82,7 @@ namespace persistent_data { } void walk_bitset(bitset_visitor &v) const { - bit_visitor vv(v); + bit_visitor vv(v, nr_bits_); damage_visitor dv(v); array_.visit_values(vv, dv); } @@ -90,18 +90,20 @@ namespace persistent_data { private: class bit_visitor { public: - bit_visitor(bitset_visitor &v) - : v_(v) { + bit_visitor(bitset_visitor &v, unsigned nr_bits) + : v_(v), + nr_bits_(nr_bits) { } void visit(uint32_t word_index, uint64_t word) { uint32_t bit_index = word_index * 64; - for (unsigned bit = 0; bit < 64; bit++, bit_index++) - v_.visit(bit_index, !!(word & (1 << bit))); + for (unsigned bit = 0; bit < 64 && bit_index < nr_bits_; bit++, bit_index++) + v_.visit(bit_index, !!(word & (1ULL << bit))); } private: bitset_visitor &v_; + unsigned nr_bits_; }; class damage_visitor {