mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-04 02:42:49 -04:00
reference counting issues
This commit is contained in:
parent
c7fb9cd0ab
commit
9176735a9f
@ -117,10 +117,9 @@ pad_bytes(size_t size) {
|
|||||||
|
|
||||||
if (_data == (uchar *)NULL) {
|
if (_data == (uchar *)NULL) {
|
||||||
// Create a new array.
|
// Create a new array.
|
||||||
// _data = PTA_uchar(0);
|
_data = PTA_uchar::empty_array(0);
|
||||||
_data = PTA_uchar::empty_array(0);
|
|
||||||
|
|
||||||
} else if (_data.get_ref_count() == 1) {
|
} else if (_data.get_ref_count() != 1) {
|
||||||
// Copy on write.
|
// Copy on write.
|
||||||
PTA_uchar new_data = PTA_uchar::empty_array(0);
|
PTA_uchar new_data = PTA_uchar::empty_array(0);
|
||||||
new_data.v() = _data.v();
|
new_data.v() = _data.v();
|
||||||
@ -169,27 +168,17 @@ append_data(const void *data, size_t size) {
|
|||||||
// reallocate itself with *every* call to append_data!
|
// reallocate itself with *every* call to append_data!
|
||||||
// _data.reserve(_data.size() + size);
|
// _data.reserve(_data.size() + size);
|
||||||
|
|
||||||
const uchar *source = (const uchar *)data;
|
_data.v().insert(_data.v().end(), (const unsigned char *)data,
|
||||||
for (size_t i = 0; i < size; ++i) {
|
(const unsigned char *)data + size);
|
||||||
_data.v().push_back(source[i]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Datagram::assign(const void *data, size_t size)
|
void Datagram::
|
||||||
{
|
assign(const void *data, size_t size) {
|
||||||
nassertv((int)size >= 0);
|
nassertv((int)size >= 0);
|
||||||
|
|
||||||
if (_data == (uchar *)NULL || _data.get_ref_count() != 1)
|
_data = PTA_uchar::empty_array(0);
|
||||||
{
|
_data.v().insert(_data.v().end(), (const unsigned char *)data,
|
||||||
// Create a new array.
|
(const unsigned char *)data + size);
|
||||||
// or copy on change..
|
|
||||||
_data = PTA_uchar::empty_array(0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_data.v().clear();
|
|
||||||
}
|
|
||||||
_data.v().insert(_data.v().begin(),(uchar *)data,&((uchar *)data)[size]);
|
|
||||||
}
|
}
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function : output
|
// Function : output
|
||||||
|
Loading…
x
Reference in New Issue
Block a user