Bug fixes: assignment operator forgot to copy over size; copy ctor forgot to clear unused top bits.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34305 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Evan Cheng 2007-02-15 08:15:58 +00:00
parent b04973edfa
commit 506e899490

View File

@ -86,6 +86,7 @@ public:
Capacity = NumBitWords(s);
Bits = new BitWord[Capacity];
init_words(Bits, Capacity, t);
clear_unused_bits();
}
/// BitVector copy ctor.
@ -175,6 +176,7 @@ public:
init_words(&Bits[OldCapacity], (Capacity-OldCapacity), t);
}
Size = N;
clear_unused_bits();
}
void reserve(unsigned N) {
@ -274,17 +276,16 @@ public:
const BitVector &operator=(const BitVector &RHS) {
if (this == &RHS) return *this;
unsigned RHSWords = NumBitWords(RHS.size());
unsigned NewSize = RHS.size();
if (NewSize <= Capacity * BITS_PER_WORD) {
Size = RHS.size();
unsigned RHSWords = NumBitWords(Size);
if (Size > Capacity * BITS_PER_WORD) {
std::copy(RHS.Bits, &RHS.Bits[RHSWords], Bits);
Size = NewSize;
clear_unused_bits();
return *this;
}
// Grow the bitvector to have enough elements.
Capacity = NumBitWords(NewSize);
Capacity = NumBitWords(Size);
BitWord *NewBits = new BitWord[Capacity];
std::copy(RHS.Bits, &RHS.Bits[RHSWords], NewBits);