forked from eden-emu/eden
		
	
		
			
				
	
	
		
			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/enet.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;
 | |
| }
 | |
| 
 | |
| /** @} */
 |