From: Kahrl Date: Mon, 7 Nov 2011 01:24:44 +0000 (+0100) Subject: utility.h: Change Buffer's interface to be more compatible with SharedBuffer's interf... X-Git-Url: http://81.2.79.47:8989/gitweb/?a=commitdiff_plain;h=28660b4c1af1b1b6ac2d3fda6984bda2a1199dc1;p=zefram%2Fminetest%2Fminetest_engine.git utility.h: Change Buffer's interface to be more compatible with SharedBuffer's interface, connection.h: use Buffer instead of SharedBuffer in command and event queues --- diff --git a/src/connection.h b/src/connection.h index 570bc92a..dc61394f 100644 --- a/src/connection.h +++ b/src/connection.h @@ -430,7 +430,7 @@ struct ConnectionEvent { enum ConnectionEventType type; u16 peer_id; - SharedBuffer data; + Buffer data; bool timeout; Address address; @@ -489,7 +489,7 @@ struct ConnectionCommand Address address; u16 peer_id; u8 channelnum; - SharedBuffer data; + Buffer data; bool reliable; ConnectionCommand(): type(CONNCMD_NONE) {} diff --git a/src/utility.h b/src/utility.h index f8957446..98fa83e8 100644 --- a/src/utility.h +++ b/src/utility.h @@ -343,26 +343,59 @@ template class Buffer { public: + Buffer() + { + m_size = 0; + data = NULL; + } Buffer(unsigned int size) { m_size = size; - data = new T[size]; + if(size != 0) + data = new T[size]; + else + data = NULL; } Buffer(const Buffer &buffer) { m_size = buffer.m_size; - data = new T[buffer.m_size]; - memcpy(data, buffer.data, buffer.m_size); + if(m_size != 0) + { + data = new T[buffer.m_size]; + memcpy(data, buffer.data, buffer.m_size); + } + else + data = NULL; } Buffer(T *t, unsigned int size) { m_size = size; - data = new T[size]; - memcpy(data, t, size); + if(size != 0) + { + data = new T[size]; + memcpy(data, t, size); + } + else + data = NULL; } ~Buffer() { - delete[] data; + drop(); + } + Buffer& operator=(const Buffer &buffer) + { + if(this == &buffer) + return *this; + drop(); + m_size = buffer.m_size; + if(m_size != 0) + { + data = new T[buffer.m_size]; + memcpy(data, buffer.data, buffer.m_size); + } + else + data = NULL; + return *this; } T & operator[](unsigned int i) const { @@ -377,6 +410,11 @@ public: return m_size; } private: + void drop() + { + if(data) + delete[] data; + } T *data; unsigned int m_size; }; @@ -471,6 +509,10 @@ public: { return m_size; } + operator Buffer() const + { + return Buffer(data, m_size); + } private: void drop() {