3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-06-22 05:43:39 +00:00

bit_vector: fix operator==() for the case that num_bits is a multiple of 32

Signed-off-by: Nuno Lopes <t-nclaud@microsoft.com>
This commit is contained in:
Nuno Lopes 2013-03-22 11:50:41 -07:00
parent 39d7246251
commit c824178e7e
2 changed files with 4 additions and 3 deletions

View file

@ -116,7 +116,7 @@ void bit_vector::shift_right(unsigned k) {
} }
} }
bool bit_vector::operator==(bit_vector const & source) { bool bit_vector::operator==(bit_vector const & source) const {
if (m_num_bits != source.m_num_bits) if (m_num_bits != source.m_num_bits)
return false; return false;
unsigned n = num_words(); unsigned n = num_words();
@ -129,6 +129,7 @@ bool bit_vector::operator==(bit_vector const & source) {
} }
unsigned bit_rest = source.m_num_bits % 32; unsigned bit_rest = source.m_num_bits % 32;
unsigned mask = (1 << bit_rest) - 1; unsigned mask = (1 << bit_rest) - 1;
if (mask == 0) mask = UINT_MAX;
return (m_data[i] & mask) == (source.m_data[i] & mask); return (m_data[i] & mask) == (source.m_data[i] & mask);
} }

View file

@ -171,9 +171,9 @@ public:
resize(sz, val); resize(sz, val);
} }
bool operator==(bit_vector const & other); bool operator==(bit_vector const & other) const;
bool operator!=(bit_vector const & other) { return !operator==(other); } bool operator!=(bit_vector const & other) const { return !operator==(other); }
bit_vector & operator=(bit_vector const & source) { bit_vector & operator=(bit_vector const & source) {
m_num_bits = source.m_num_bits; m_num_bits = source.m_num_bits;