From 28660b4c1af1b1b6ac2d3fda6984bda2a1199dc1 Mon Sep 17 00:00:00 2001 From: Kahrl Date: Mon, 7 Nov 2011 02:24:44 +0100 Subject: [PATCH] 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 --- src/connection.h | 4 ++-- src/utility.h | 54 ++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 50 insertions(+), 8 deletions(-) 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() {