diff options
| author | Alan Conway <aconway@apache.org> | 2011-03-15 01:49:37 +0000 |
|---|---|---|
| committer | Alan Conway <aconway@apache.org> | 2011-03-15 01:49:37 +0000 |
| commit | a537010f4dc49fbcb05820eefa132c879f96b7ba (patch) | |
| tree | f2d58ff36aa968d461b284d2b74a534cfaf077eb /cpp/src/qpid/RefCountedBuffer.cpp | |
| parent | 5f3fc9ce1861acb0ccb912f9a2326c82f0ad760c (diff) | |
| download | qpid-python-a537010f4dc49fbcb05820eefa132c879f96b7ba.tar.gz | |
NO-JIRA: Refactor RefCountedBuffer to be simpler and more flexible.
RefCountedBuffer::pointer is replaced by a separate class BufferRef.
BufferRef is independent of RefCountedBuffer, it can be used to manage other
reference-counted buffer classes e.g. to implement buffer pools.
BufferRef also provides beginning and end of the buffer, not just beginning.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1081631 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/RefCountedBuffer.cpp')
| -rw-r--r-- | cpp/src/qpid/RefCountedBuffer.cpp | 22 |
1 files changed, 6 insertions, 16 deletions
diff --git a/cpp/src/qpid/RefCountedBuffer.cpp b/cpp/src/qpid/RefCountedBuffer.cpp index 9b8f1ebd5e..40d620f7ad 100644 --- a/cpp/src/qpid/RefCountedBuffer.cpp +++ b/cpp/src/qpid/RefCountedBuffer.cpp @@ -24,30 +24,20 @@ 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)); -} - -RefCountedBuffer::pointer RefCountedBuffer::create(size_t n) { +BufferRef RefCountedBuffer::create(size_t n) { char* store=::new char[n+sizeof(RefCountedBuffer)]; new(store) RefCountedBuffer; - return pointer(reinterpret_cast<RefCountedBuffer*>(store)); + char* start = 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 |
