list.c 1.4 KB

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