From 6c554162b307ba06102038f62113f5c336eab8a1 Mon Sep 17 00:00:00 2001 From: Brick Date: Fri, 19 Oct 2018 12:21:16 +0100 Subject: Added move constructor/assignment operator to DataBuffer --- binaryninjaapi.h | 2 ++ databuffer.cpp | 25 +++++++++++++++++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/binaryninjaapi.h b/binaryninjaapi.h index 6f6778da..2b3273a8 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -672,10 +672,12 @@ namespace BinaryNinja DataBuffer(size_t len); DataBuffer(const void* data, size_t len); DataBuffer(const DataBuffer& buf); + DataBuffer(DataBuffer&& buf); DataBuffer(BNDataBuffer* buf); ~DataBuffer(); DataBuffer& operator=(const DataBuffer& buf); + DataBuffer& operator=(DataBuffer&& buf); BNDataBuffer* GetBufferObject() const { return m_buffer; } diff --git a/databuffer.cpp b/databuffer.cpp index f2031842..92709572 100644 --- a/databuffer.cpp +++ b/databuffer.cpp @@ -47,6 +47,11 @@ DataBuffer::DataBuffer(const DataBuffer& buf) m_buffer = BNDuplicateDataBuffer(buf.m_buffer); } +DataBuffer::DataBuffer(DataBuffer&& buf) +{ + m_buffer = buf.m_buffer; + buf.m_buffer = BNCreateDataBuffer(nullptr, 0); +} DataBuffer::DataBuffer(BNDataBuffer* buf) { @@ -62,11 +67,27 @@ DataBuffer::~DataBuffer() DataBuffer& DataBuffer::operator=(const DataBuffer& buf) { - BNFreeDataBuffer(m_buffer); - m_buffer = BNDuplicateDataBuffer(buf.m_buffer); + if (this != &buf) + { + BNFreeDataBuffer(m_buffer); + m_buffer = BNDuplicateDataBuffer(buf.m_buffer); + } + return *this; } +DataBuffer& DataBuffer::operator=(DataBuffer&& buf) +{ + if (this != &buf) + { + BNClearDataBuffer(m_buffer); + BNDataBuffer* temp = m_buffer; + m_buffer = buf.m_buffer; + buf.m_buffer = temp; + } + + return *this; +} void* DataBuffer::GetData() { -- cgit v1.3.1