mirror of
https://github.com/luanti-org/luanti.git
synced 2025-08-06 17:41:04 +00:00
Shave off buffer copies in networking code (#11607)
This commit is contained in:
parent
ea250ff5c5
commit
fd8a8501bc
8 changed files with 126 additions and 92 deletions
|
@ -140,6 +140,13 @@ public:
|
|||
m_signal.post();
|
||||
}
|
||||
|
||||
void push_back(T &&t)
|
||||
{
|
||||
MutexAutoLock lock(m_mutex);
|
||||
m_queue.push_back(std::move(t));
|
||||
m_signal.post();
|
||||
}
|
||||
|
||||
/* this version of pop_front returns a empty element of T on timeout.
|
||||
* Make sure default constructor of T creates a recognizable "empty" element
|
||||
*/
|
||||
|
|
|
@ -51,6 +51,19 @@ public:
|
|||
else
|
||||
data = NULL;
|
||||
}
|
||||
Buffer(Buffer &&buffer)
|
||||
{
|
||||
m_size = buffer.m_size;
|
||||
if(m_size != 0)
|
||||
{
|
||||
data = buffer.data;
|
||||
buffer.data = nullptr;
|
||||
buffer.m_size = 0;
|
||||
}
|
||||
else
|
||||
data = nullptr;
|
||||
}
|
||||
// Copies whole buffer
|
||||
Buffer(const T *t, unsigned int size)
|
||||
{
|
||||
m_size = size;
|
||||
|
@ -62,10 +75,12 @@ public:
|
|||
else
|
||||
data = NULL;
|
||||
}
|
||||
|
||||
~Buffer()
|
||||
{
|
||||
drop();
|
||||
}
|
||||
|
||||
Buffer& operator=(const Buffer &buffer)
|
||||
{
|
||||
if(this == &buffer)
|
||||
|
@ -81,6 +96,23 @@ public:
|
|||
data = NULL;
|
||||
return *this;
|
||||
}
|
||||
Buffer& operator=(Buffer &&buffer)
|
||||
{
|
||||
if(this == &buffer)
|
||||
return *this;
|
||||
drop();
|
||||
m_size = buffer.m_size;
|
||||
if(m_size != 0)
|
||||
{
|
||||
data = buffer.data;
|
||||
buffer.data = nullptr;
|
||||
buffer.m_size = 0;
|
||||
}
|
||||
else
|
||||
data = nullptr;
|
||||
return *this;
|
||||
}
|
||||
|
||||
T & operator[](unsigned int i) const
|
||||
{
|
||||
return data[i];
|
||||
|
@ -89,10 +121,12 @@ public:
|
|||
{
|
||||
return data;
|
||||
}
|
||||
|
||||
unsigned int getSize() const
|
||||
{
|
||||
return m_size;
|
||||
}
|
||||
|
||||
private:
|
||||
void drop()
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue