aboutsummaryrefslogtreecommitdiff
path: root/src/utility.h
diff options
context:
space:
mode:
authorPerttu Ahola <celeron55@gmail.com>2011-05-21 12:25:08 +0300
committerPerttu Ahola <celeron55@gmail.com>2011-05-21 12:25:08 +0300
commitfe02a19f1795429c110e6c7ed76d333cb42a3072 (patch)
treefb422c8acb96aea2d814b44ceb86c28f8ceb0e4c /src/utility.h
parent3b707b8a4a52a88da4398ec9b32109c073683a76 (diff)
downloadhax-minetest-server-fe02a19f1795429c110e6c7ed76d333cb42a3072.tar.gz
hax-minetest-server-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.h36
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;
}
}