diff options
author | sfan5 <sfan5@live.de> | 2021-09-17 18:14:25 +0200 |
---|---|---|
committer | rubenwardy <rw@rubenwardy.com> | 2021-10-19 19:22:46 +0100 |
commit | 05b54a8d18051a3452c405f58bee5852f3d3a27b (patch) | |
tree | 961f7e79c3c64d4074e228ff0c415820eded32ea /src/util/pointer.h | |
parent | e5cfdd369ed96a7906a6ed6de7eb3878a10fc57c (diff) | |
download | minetest-05b54a8d18051a3452c405f58bee5852f3d3a27b.tar.gz minetest-05b54a8d18051a3452c405f58bee5852f3d3a27b.tar.bz2 minetest-05b54a8d18051a3452c405f58bee5852f3d3a27b.zip |
Shave off buffer copies in networking code (#11607)
Diffstat (limited to 'src/util/pointer.h')
-rw-r--r-- | src/util/pointer.h | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/util/pointer.h b/src/util/pointer.h index d29ec8739..7fc5de551 100644 --- a/src/util/pointer.h +++ b/src/util/pointer.h @@ -51,6 +51,19 @@ public: else data = NULL; } + Buffer(Buffer &&buffer) + { + m_size = buffer.m_size; + if(m_size != 0) + { + data = buffer.data; + buffer.data = nullptr; + buffer.m_size = 0; + } + else + data = nullptr; + } + // Copies whole buffer Buffer(const T *t, unsigned int size) { m_size = size; @@ -62,10 +75,12 @@ public: else data = NULL; } + ~Buffer() { drop(); } + Buffer& operator=(const Buffer &buffer) { if(this == &buffer) @@ -81,6 +96,23 @@ public: data = NULL; return *this; } + Buffer& operator=(Buffer &&buffer) + { + if(this == &buffer) + return *this; + drop(); + m_size = buffer.m_size; + if(m_size != 0) + { + data = buffer.data; + buffer.data = nullptr; + buffer.m_size = 0; + } + else + data = nullptr; + return *this; + } + T & operator[](unsigned int i) const { return data[i]; @@ -89,10 +121,12 @@ public: { return data; } + unsigned int getSize() const { return m_size; } + private: void drop() { |