mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-26 22:53:16 -04:00
putil: Fix reading/writing BitArray from/to bam file on 64-bit
Fixes #1181
This commit is contained in:
parent
d545dbd6eb
commit
5b30fa7adf
@ -909,10 +909,14 @@ normalize() {
|
||||
*/
|
||||
void BitArray::
|
||||
write_datagram(BamWriter *manager, Datagram &dg) const {
|
||||
dg.add_uint32(_array.size());
|
||||
Array::const_iterator ai;
|
||||
for (ai = _array.begin(); ai != _array.end(); ++ai) {
|
||||
dg.add_uint32((*ai).get_word());
|
||||
dg.add_uint32(_array.size() * (num_bits_per_word >> 5));
|
||||
|
||||
for (MaskType &item : _array) {
|
||||
WordType word = item.get_word();
|
||||
for (size_t i = 0; i < num_bits_per_word; i += 32) {
|
||||
dg.add_uint32(word);
|
||||
word >>= 32;
|
||||
}
|
||||
}
|
||||
dg.add_uint8(_highest_bits);
|
||||
}
|
||||
@ -922,10 +926,16 @@ write_datagram(BamWriter *manager, Datagram &dg) const {
|
||||
*/
|
||||
void BitArray::
|
||||
read_datagram(DatagramIterator &scan, BamReader *manager) {
|
||||
size_t num_words = scan.get_uint32();
|
||||
_array = Array::empty_array(num_words);
|
||||
for (size_t i = 0; i < num_words; ++i) {
|
||||
_array[i] = WordType(scan.get_uint32());
|
||||
size_t num_words32 = scan.get_uint32();
|
||||
size_t num_bits = num_words32 << 5;
|
||||
|
||||
_array = Array::empty_array((num_bits + num_bits_per_word - 1) / num_bits_per_word);
|
||||
|
||||
for (size_t i = 0; i < num_bits; i += 32) {
|
||||
int w = i / num_bits_per_word;
|
||||
int b = i % num_bits_per_word;
|
||||
|
||||
_array[w].store(scan.get_uint32(), b, 32);
|
||||
}
|
||||
_highest_bits = scan.get_uint8();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user