From e4265bfbfe65a5957597ad2edfa8569fdd9df09b Mon Sep 17 00:00:00 2001 From: ejakowatz Date: Tue, 7 Sep 2004 23:00:30 +0000 Subject: [PATCH] Modified BDataBuffer's copy constructor to let the user specify whether to create a copy of the buffer or just a reference. Also changed all void* params to be const. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@8888 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/private/shared/DataBuffer.h | 10 +++++----- src/kits/support/DataBuffer.cpp | 22 +++++++++++++++++----- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/headers/private/shared/DataBuffer.h b/headers/private/shared/DataBuffer.h index cd9631ce06..4f7ec14b5e 100644 --- a/headers/private/shared/DataBuffer.h +++ b/headers/private/shared/DataBuffer.h @@ -25,8 +25,8 @@ class BDataBuffer { public: BDataBuffer(size_t len); - BDataBuffer(void* data, size_t len, bool copy = false); - BDataBuffer(const BDataBuffer& rhs); + BDataBuffer(const void* data, size_t len, bool copy = false); + BDataBuffer(const BDataBuffer& rhs, bool copy = false); ~BDataBuffer(); BDataBuffer& operator=(const BDataBuffer& rhs); @@ -45,12 +45,12 @@ class BDataBuffer size_t Size() const { return fSize; } int32 Count() { return fCount; } - static void Create(void* data, size_t len, BDataReference*& ref, - bool copy = false); + static void Create(const void* data, size_t len, + BDataReference*& ref, bool copy = false); static void Create(size_t len, BDataReference*& ref); private: - BDataReference(void* data, size_t len, bool copy = false); + BDataReference(const void* data, size_t len, bool copy = false); BDataReference(size_t len); ~BDataReference(); diff --git a/src/kits/support/DataBuffer.cpp b/src/kits/support/DataBuffer.cpp index 883656d491..342d0bb1c5 100644 --- a/src/kits/support/DataBuffer.cpp +++ b/src/kits/support/DataBuffer.cpp @@ -49,14 +49,25 @@ BDataBuffer::BDataBuffer(size_t len) BDataReference::Create(len, fDataRef); } //------------------------------------------------------------------------------ -BDataBuffer::BDataBuffer(void* data, size_t len, bool copy) +BDataBuffer::BDataBuffer(const void* data, size_t len, bool copy) { BDataReference::Create(data, len, fDataRef, copy); } //------------------------------------------------------------------------------ -BDataBuffer::BDataBuffer(const BDataBuffer& rhs) +BDataBuffer::BDataBuffer(const BDataBuffer& rhs, bool copy) { - *this = rhs; + if (this != &rhs) + { + if (copy) + { + BDataReference::Create(rhs.Buffer(), rhs.BufferSize(), + fDataRef, copy); + } + else + { + rhs.fDataRef->Acquire(fDataRef); + } + } } //------------------------------------------------------------------------------ BDataBuffer::~BDataBuffer() @@ -90,7 +101,7 @@ const void* BDataBuffer::Buffer() const //------------------------------------------------------------------------------ -void BDataBuffer::BDataReference::Create(void* data, size_t len, +void BDataBuffer::BDataReference::Create(const void* data, size_t len, BDataReference*& ref, bool copy) { BDataReference* temp = new BDataReference(data, len, copy); @@ -119,7 +130,8 @@ void BDataBuffer::BDataReference::Release(BDataReference*& ref) } } //------------------------------------------------------------------------------ -BDataBuffer::BDataReference::BDataReference(void* data, size_t len, bool copy) +BDataBuffer::BDataReference::BDataReference(const void* data, size_t len, + bool copy) : fData(NULL), fSize(len), fCount(0) { if (copy)