mirror of
https://github.com/lsalzman/enet
synced 2024-11-21 06:25:59 -07:00
75 lines
1.5 KiB
C
75 lines
1.5 KiB
C
/**
|
|
@file list.c
|
|
@brief ENet linked list functions
|
|
*/
|
|
#define ENET_BUILDING_LIB 1
|
|
#include "enet/list.h"
|
|
|
|
/**
|
|
@defgroup list ENet linked list utility functions
|
|
@ingroup private
|
|
@{
|
|
*/
|
|
void
|
|
enet_list_clear (ENetList * list)
|
|
{
|
|
list -> sentinel.next = & list -> sentinel;
|
|
list -> sentinel.previous = & list -> sentinel;
|
|
}
|
|
|
|
ENetListIterator
|
|
enet_list_insert (ENetListIterator position, void * data)
|
|
{
|
|
ENetListIterator result = (ENetListIterator) data;
|
|
|
|
result -> previous = position -> previous;
|
|
result -> next = position;
|
|
|
|
result -> previous -> next = result;
|
|
position -> previous = result;
|
|
|
|
return result;
|
|
}
|
|
|
|
void *
|
|
enet_list_remove (ENetListIterator position)
|
|
{
|
|
position -> previous -> next = position -> next;
|
|
position -> next -> previous = position -> previous;
|
|
|
|
return position;
|
|
}
|
|
|
|
ENetListIterator
|
|
enet_list_move (ENetListIterator position, void * dataFirst, void * dataLast)
|
|
{
|
|
ENetListIterator first = (ENetListIterator) dataFirst,
|
|
last = (ENetListIterator) dataLast;
|
|
|
|
first -> previous -> next = last -> next;
|
|
last -> next -> previous = first -> previous;
|
|
|
|
first -> previous = position -> previous;
|
|
last -> next = position;
|
|
|
|
first -> previous -> next = first;
|
|
position -> previous = last;
|
|
|
|
return first;
|
|
}
|
|
|
|
size_t
|
|
enet_list_size (ENetList * list)
|
|
{
|
|
size_t size = 0;
|
|
ENetListIterator position;
|
|
|
|
for (position = enet_list_begin (list);
|
|
position != enet_list_end (list);
|
|
position = enet_list_next (position))
|
|
++ size;
|
|
|
|
return size;
|
|
}
|
|
|
|
/** @} */
|