summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJordan <jordan@psifertex.com>2018-10-19 09:35:48 -0400
committerGitHub <noreply@github.com>2018-10-19 09:35:48 -0400
commit8de8bad6f2f5517d858568a9871dd99f7e8d5d4b (patch)
tree8f1b3e311726a323e43c427ef35014d9d8017acf
parent5bd473ce9f0bf37eb33ea0376fd843c585060d4f (diff)
parent6c554162b307ba06102038f62113f5c336eab8a1 (diff)
Merge pull request #1172 from DatBrick/databuffer_perf
Added move constructor/assignment operator to DataBuffer
-rw-r--r--binaryninjaapi.h2
-rw-r--r--databuffer.cpp25
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()
{