putil: fix crash in BitArray::has_any_of()

This commit is contained in:
rdb 2020-06-09 18:15:36 +02:00
parent 446c01c796
commit a9b158192f
2 changed files with 23 additions and 5 deletions

View File

@ -114,6 +114,11 @@ has_any_of(int low_bit, int size) const {
++w;
while (size > 0) {
if ((size_t)w >= get_num_words()) {
// Now we're up to the highest bits.
return (_highest_bits != 0);
}
if (size <= num_bits_per_word) {
// The remainder fits within one word of the array.
return _array[w].has_any_of(0, size);
@ -125,11 +130,6 @@ has_any_of(int low_bit, int size) const {
}
size -= num_bits_per_word;
++w;
if (w >= (int)get_num_words()) {
// Now we're up to the highest bits.
return (_highest_bits != 0);
}
}
return false;

View File

@ -0,0 +1,18 @@
from panda3d.core import BitArray
def test_bitarray_has_any_of():
ba = BitArray()
assert not ba.has_any_of(100, 200)
ba = BitArray()
ba.set_range(0, 53)
assert ba.has_any_of(52, 1)
assert ba.has_any_of(52, 100)
assert not ba.has_any_of(53, 45)
ba = BitArray()
ba.invert_in_place()
assert ba.has_any_of(0, 1)
assert ba.has_any_of(53, 45)
assert ba.has_any_of(0, 100)