diff options
author | Perttu Ahola <celeron55@gmail.com> | 2011-05-21 12:25:08 +0300 |
---|---|---|
committer | Perttu Ahola <celeron55@gmail.com> | 2011-05-21 12:25:08 +0300 |
commit | fe02a19f1795429c110e6c7ed76d333cb42a3072 (patch) | |
tree | fb422c8acb96aea2d814b44ceb86c28f8ceb0e4c /src/utility.h | |
parent | 3b707b8a4a52a88da4398ec9b32109c073683a76 (diff) | |
download | minetest-fe02a19f1795429c110e6c7ed76d333cb42a3072.tar.gz minetest-fe02a19f1795429c110e6c7ed76d333cb42a3072.tar.bz2 minetest-fe02a19f1795429c110e6c7ed76d333cb42a3072.zip |
Cleaned networking code a bit (had this one on the to-do list for like 4 months already)
Diffstat (limited to 'src/utility.h')
-rw-r--r-- | src/utility.h | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/src/utility.h b/src/utility.h index cc8891a07..0df43a31b 100644 --- a/src/utility.h +++ b/src/utility.h @@ -371,10 +371,20 @@ template <typename T> class SharedBuffer { public: + SharedBuffer() + { + m_size = 0; + data = NULL; + refcount = new unsigned int; + (*refcount) = 1; + } SharedBuffer(unsigned int size) { m_size = size; - data = new T[size]; + if(m_size != 0) + data = new T[m_size]; + else + data = NULL; refcount = new unsigned int; (*refcount) = 1; } @@ -404,8 +414,13 @@ public: SharedBuffer(T *t, unsigned int size) { m_size = size; - data = new T[size]; - memcpy(data, t, size); + if(m_size != 0) + { + data = new T[m_size]; + memcpy(data, t, m_size); + } + else + data = NULL; refcount = new unsigned int; (*refcount) = 1; } @@ -414,9 +429,14 @@ public: */ SharedBuffer(const Buffer<T> &buffer) { - m_size = buffer.m_size; - data = new T[buffer.getSize()]; - memcpy(data, *buffer, buffer.getSize()); + m_size = buffer.getSize(); + if(m_size != 0) + { + data = new T[m_size]; + memcpy(data, *buffer, buffer.getSize()); + } + else + data = NULL; refcount = new unsigned int; (*refcount) = 1; } @@ -426,6 +446,7 @@ public: } T & operator[](unsigned int i) const { + //assert(i < m_size) return data[i]; } T * operator*() const @@ -443,7 +464,8 @@ private: (*refcount)--; if(*refcount == 0) { - delete[] data; + if(data) + delete[] data; delete refcount; } } |