make tailequeue a template, introduce type safety, remove old-style casts
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user