RyanList.c 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. #include "RyanList.h"
  2. /**
  3. * @brief 在prev和next之前插入节点
  4. *
  5. * @param node
  6. * @param prev
  7. * @param next
  8. */
  9. static void _RyanListAdd(RyanList_t *node, RyanList_t *prev, RyanList_t *next)
  10. {
  11. next->prev = node;
  12. node->next = next;
  13. node->prev = prev;
  14. prev->next = node;
  15. }
  16. /**
  17. * @brief 删除prev和next之间的节点
  18. *
  19. * @param prev
  20. * @param next
  21. */
  22. static void _RyanListDel(RyanList_t *prev, RyanList_t *next)
  23. {
  24. prev->next = next;
  25. next->prev = prev;
  26. }
  27. /**
  28. * @brief 删除自己
  29. *
  30. * @param entry
  31. */
  32. static void _RyanListDel_entry(RyanList_t *entry)
  33. {
  34. _RyanListDel(entry->prev, entry->next);
  35. }
  36. /**
  37. * @brief 初始链表
  38. *
  39. * @param list
  40. */
  41. void RyanListInit(RyanList_t *list)
  42. {
  43. list->next = list;
  44. list->prev = list;
  45. }
  46. /**
  47. * @brief 链表头插
  48. *
  49. * @param node
  50. * @param list
  51. */
  52. void RyanListAdd(RyanList_t *node, RyanList_t *list)
  53. {
  54. _RyanListAdd(node, list, list->next);
  55. }
  56. /**
  57. * @brief 链表尾插
  58. *
  59. * @param node
  60. * @param list
  61. */
  62. void RyanListAddTail(RyanList_t *node, RyanList_t *list)
  63. {
  64. _RyanListAdd(node, list->prev, list);
  65. }
  66. /**
  67. * @brief 删除自己
  68. *
  69. * @param entry
  70. */
  71. void RyanListDel(RyanList_t *entry)
  72. {
  73. _RyanListDel_entry(entry);
  74. }
  75. /**
  76. * @brief 删除自己
  77. *
  78. * @param entry
  79. */
  80. void RyanListDelInit(RyanList_t *entry)
  81. {
  82. _RyanListDel_entry(entry);
  83. RyanListInit(entry);
  84. }
  85. /**
  86. * @brief 将节点移到链表头部
  87. *
  88. * @param node
  89. * @param list
  90. */
  91. void RyanListMove(RyanList_t *node, RyanList_t *list)
  92. {
  93. _RyanListDel_entry(node);
  94. RyanListAdd(node, list);
  95. }
  96. /**
  97. * @brief 将节点移到链表尾部
  98. *
  99. * @param node
  100. * @param list
  101. */
  102. void RyanListMoveTail(RyanList_t *node, RyanList_t *list)
  103. {
  104. _RyanListDel_entry(node);
  105. RyanListAddTail(node, list);
  106. }
  107. /**
  108. * @brief 链表是否为空
  109. *
  110. * @param list
  111. * @return int
  112. */
  113. int RyanListIsEmpty(RyanList_t *list)
  114. {
  115. return list->next == list;
  116. }