diff options
author | Stephen D. Huston <shuston@apache.org> | 2011-10-20 18:42:46 +0000 |
---|---|---|
committer | Stephen D. Huston <shuston@apache.org> | 2011-10-20 18:42:46 +0000 |
commit | 5eb354b338bb8d8fcd35b6ac3fb33f8103e757c3 (patch) | |
tree | f24776684c025fbed6a0431bf3d6811f0a1aae7a /cpp/src/qpid/RefCountedBuffer.cpp | |
parent | 718ff5b34dd1e87eb79fa4c61fec668d1dc33103 (diff) | |
download | qpid-python-5eb354b338bb8d8fcd35b6ac3fb33f8103e757c3.tar.gz |
Merge trunk to QPID-2519 branch
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/QPID-2519@1186990 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/RefCountedBuffer.cpp')
-rw-r--r-- | cpp/src/qpid/RefCountedBuffer.cpp | 29 |
1 files changed, 11 insertions, 18 deletions
diff --git a/cpp/src/qpid/RefCountedBuffer.cpp b/cpp/src/qpid/RefCountedBuffer.cpp index 9b8f1ebd5e..a82e1a02ab 100644 --- a/cpp/src/qpid/RefCountedBuffer.cpp +++ b/cpp/src/qpid/RefCountedBuffer.cpp @@ -20,34 +20,27 @@ */ #include "qpid/RefCountedBuffer.h" +#include <stdlib.h> #include <new> namespace qpid { -RefCountedBuffer::RefCountedBuffer() : count(0) {} - -void RefCountedBuffer::destroy() const { +void RefCountedBuffer::released() const { this->~RefCountedBuffer(); - ::delete[] reinterpret_cast<const char*>(this); -} - -char* RefCountedBuffer::addr() const { - return const_cast<char*>(reinterpret_cast<const char*>(this)+sizeof(RefCountedBuffer)); + ::free (reinterpret_cast<void *>(const_cast<RefCountedBuffer *>(this))); } -RefCountedBuffer::pointer RefCountedBuffer::create(size_t n) { - char* store=::new char[n+sizeof(RefCountedBuffer)]; +BufferRef RefCountedBuffer::create(size_t n) { + void* store=::malloc (n + sizeof(RefCountedBuffer)); + if (NULL == store) + throw std::bad_alloc(); new(store) RefCountedBuffer; - return pointer(reinterpret_cast<RefCountedBuffer*>(store)); + char* start = reinterpret_cast<char *>(store) + sizeof(RefCountedBuffer); + return BufferRef( + boost::intrusive_ptr<RefCounted>(reinterpret_cast<RefCountedBuffer*>(store)), + start, start+n); } -RefCountedBuffer::pointer::pointer() {} -RefCountedBuffer::pointer::pointer(RefCountedBuffer* x) : p(x) {} -RefCountedBuffer::pointer::pointer(const pointer& x) : p(x.p) {} -RefCountedBuffer::pointer::~pointer() {} -RefCountedBuffer::pointer& RefCountedBuffer::pointer::operator=(const RefCountedBuffer::pointer& x) { p = x.p; return *this; } - -char* RefCountedBuffer::pointer::cp() const { return p ? p->get() : 0; } } // namespace qpid |