aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKahrl <kahrl@gmx.net>2011-11-07 02:24:44 +0100
committerPerttu Ahola <celeron55@gmail.com>2011-11-07 11:19:56 +0200
commit28660b4c1af1b1b6ac2d3fda6984bda2a1199dc1 (patch)
tree2d3a8fca8343d5f73ab1b21ded7ad7197a1654a8
parentfa72e65b59364d204db8bce59989673034e59988 (diff)
downloadminetest-28660b4c1af1b1b6ac2d3fda6984bda2a1199dc1.tar.gz
minetest-28660b4c1af1b1b6ac2d3fda6984bda2a1199dc1.tar.bz2
minetest-28660b4c1af1b1b6ac2d3fda6984bda2a1199dc1.zip
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
-rw-r--r--src/connection.h4
-rw-r--r--src/utility.h54
2 files changed, 50 insertions, 8 deletions
diff --git a/src/connection.h b/src/connection.h
index 570bc92ab..dc61394fa 100644
--- a/src/connection.h
+++ b/src/connection.h
@@ -430,7 +430,7 @@ struct ConnectionEvent
{
enum ConnectionEventType type;
u16 peer_id;
- SharedBuffer<u8> data;
+ Buffer<u8> data;
bool timeout;
Address address;
@@ -489,7 +489,7 @@ struct ConnectionCommand
Address address;
u16 peer_id;
u8 channelnum;
- SharedBuffer<u8> data;
+ Buffer<u8> data;
bool reliable;
ConnectionCommand(): type(CONNCMD_NONE) {}
diff --git a/src/utility.h b/src/utility.h
index f89574468..98fa83e89 100644
--- a/src/utility.h
+++ b/src/utility.h
@@ -343,26 +343,59 @@ template <typename T>
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<T>() const
+ {
+ return Buffer<T>(data, m_size);
+ }
private:
void drop()
{