make tailequeue a template, introduce type safety, remove old-style casts

This commit is contained in:
arvidn
2015-08-19 15:22:00 +02:00
parent a3608a39fe
commit bd177a857f
16 changed files with 268 additions and 270 deletions

View File

@@ -32,98 +32,3 @@ POSSIBILITY OF SUCH DAMAGE.
#include "libtorrent/tailqueue.hpp"
namespace libtorrent
{
tailqueue::tailqueue(): m_first(0), m_last(0), m_size(0) {}
void tailqueue::append(tailqueue& rhs)
{
TORRENT_ASSERT(m_last == 0 || m_last->next == 0);
TORRENT_ASSERT(rhs.m_last == 0 || rhs.m_last->next == 0);
if (rhs.m_first == 0) return;
if (m_first == 0)
{
swap(rhs);
return;
}
m_last->next = rhs.m_first;
m_last = rhs.m_last;
m_size += rhs.m_size;
rhs.m_first = 0;
rhs.m_last = 0;
rhs.m_size = 0;
TORRENT_ASSERT(m_last == 0 || m_last->next == 0);
}
void tailqueue::prepend(tailqueue& rhs)
{
TORRENT_ASSERT(m_last == 0 || m_last->next == 0);
TORRENT_ASSERT(rhs.m_last == 0 || rhs.m_last->next == 0);
if (rhs.m_first == 0) return;
if (m_first == 0)
{
swap(rhs);
return;
}
swap(rhs);
append(rhs);
}
tailqueue_node* tailqueue::pop_front()
{
TORRENT_ASSERT(m_last == 0 || m_last->next == 0);
tailqueue_node* e = m_first;
m_first = m_first->next;
if (e == m_last) m_last = 0;
e->next = 0;
--m_size;
return e;
}
void tailqueue::push_front(tailqueue_node* e)
{
TORRENT_ASSERT(e->next == 0);
TORRENT_ASSERT(m_last == 0 || m_last->next == 0);
e->next = m_first;
m_first = e;
if (!m_last) m_last = e;
++m_size;
}
void tailqueue::push_back(tailqueue_node* e)
{
TORRENT_ASSERT(e->next == 0);
TORRENT_ASSERT(m_last == 0 || m_last->next == 0);
if (m_last) m_last->next = e;
else m_first = e;
m_last = e;
e->next = 0;
++m_size;
}
tailqueue_node* tailqueue::get_all()
{
TORRENT_ASSERT(m_last == 0 || m_last->next == 0);
tailqueue_node* e = m_first;
m_first = 0;
m_last = 0;
m_size = 0;
return e;
}
void tailqueue::swap(tailqueue& rhs)
{
tailqueue_node* tmp = m_first;
m_first = rhs.m_first;
rhs.m_first = tmp;
tmp = m_last;
m_last = rhs.m_last;
rhs.m_last = tmp;
int tmp2 = m_size;
m_size = rhs.m_size;
rhs.m_size = tmp2;
}
}