reference counting issues

This commit is contained in:
David Rose 2007-05-21 22:37:16 +00:00
parent c7fb9cd0ab
commit 9176735a9f

View File

@ -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)
{
// Create a new array.
// or copy on change..
_data = PTA_uchar::empty_array(0); _data = PTA_uchar::empty_array(0);
} _data.v().insert(_data.v().end(), (const unsigned char *)data,
else (const unsigned char *)data + size);
{
_data.v().clear();
}
_data.v().insert(_data.v().begin(),(uchar *)data,&((uchar *)data)[size]);
} }
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// Function : output // Function : output