1 /**
2  @file list.c
3  @brief ENet linked list functions
4 */
5 #define ENET_BUILDING_LIB 1
6 #include "enet/list.h"
7 
8 /**
9     @defgroup list ENet linked list utility functions
10     @ingroup private
11     @{
12 */
13 void
enet_list_clear(ENetList * list)14 enet_list_clear (ENetList * list)
15 {
16    list -> sentinel.next = & list -> sentinel;
17    list -> sentinel.previous = & list -> sentinel;
18 }
19 
20 ENetListIterator
enet_list_insert(ENetListIterator position,void * data)21 enet_list_insert (ENetListIterator position, void * data)
22 {
23    ENetListIterator result = (ENetListIterator) data;
24 
25    result -> previous = position -> previous;
26    result -> next = position;
27 
28    result -> previous -> next = result;
29    position -> previous = result;
30 
31    return result;
32 }
33 
34 void *
enet_list_remove(ENetListIterator position)35 enet_list_remove (ENetListIterator position)
36 {
37    position -> previous -> next = position -> next;
38    position -> next -> previous = position -> previous;
39 
40    return position;
41 }
42 
43 size_t
enet_list_size(ENetList * list)44 enet_list_size (ENetList * list)
45 {
46    size_t size = 0;
47    ENetListIterator position;
48 
49    for (position = enet_list_begin (list);
50         position != enet_list_end (list);
51         position = enet_list_next (position))
52      ++ size;
53 
54    return size;
55 }
56 
57 /** @} */
58