list_slst.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. /*
  2. ******************************************************************************
  3. * File: util_slst.h
  4. *
  5. * # Hist:
  6. * Date; Author; Description
  7. * 30 Oct. 2017; Chen, George; file creation, transported from prtos
  8. ******************************************************************************
  9. */
  10. #ifndef __LIST_SLST_H__
  11. #define __LIST_SLST_H__
  12. /*
  13. ******************************************************************************
  14. * Includes
  15. ******************************************************************************
  16. */
  17. //#include "../comn/comn_cfgs.h"
  18. #ifdef __cplusplus
  19. extern "C" {
  20. #endif
  21. /* ####################### Single Linked List Types ####################### */
  22. /*
  23. * USAGE
  24. * refer to util_dlst.h
  25. */
  26. typedef enum list_slst_enum_snod_def {
  27. list_slst_enum_snod_lin = 0,
  28. list_slst_enum_snod_cir,
  29. } list_snod_e;
  30. typedef struct list_slst_stru_snod_def {
  31. struct list_slst_stru_snod_def* next; // next node
  32. } list_snod_t;
  33. /* slist types definitions */
  34. typedef struct list_slst_stru_slst_def {
  35. list_snod_t* head; // [set by sys] head node
  36. list_snod_t* tail; // [set by sys] tail node
  37. list_snod_t* iter; // [set by sys] node iterator
  38. unsigned int coun; // [set by sys] counts of entity
  39. } list_slst_t;
  40. typedef struct list_slst_stru_sque_def {
  41. list_slst_t list;
  42. list_snod_t* post; // [set by sys] head node to pop out
  43. list_snod_t* pend; // [set by sys] tail node to push in
  44. unsigned int coun; // [set by sys] counts of records
  45. } list_sque_t;
  46. /* ########################## function prototypes ########################## */
  47. /*
  48. * # Name: util_slst_ini
  49. * # Desc: initialize single linked list
  50. * # Para: node: list being initialized
  51. * # return:node
  52. */
  53. signed int
  54. list_snod_ini(list_snod_t* snod, list_snod_e type);
  55. // signed int
  56. // list_snod_ini_lin(list_snod_t* snod);
  57. // signed int
  58. // list_snod_ini_cir(list_snod_t* snod);
  59. // /*
  60. // * # Name: util_slst_ins_aft
  61. // * # Desc: insert node after a list, link member pointers each other
  62. // * # Para: slist1: list to which new list being put after
  63. // * slist2: list which being put after a list
  64. // * # return:slist1
  65. // */
  66. // signed int
  67. // list_snod_ins_aft(list_snod_t* nod0, list_snod_t* nod1);
  68. // /*
  69. // * # Name: util_slst_rmv_aft
  70. // * # Desc: remove a node after a list.
  71. // * # Para: slist: list after which a node being removed.
  72. // * # return:slist
  73. // */
  74. // signed int
  75. // list_snod_rmv_aft(list_snod_t* snod);
  76. /*
  77. * # Name: list_slst_ini
  78. * # Desc: initialize a single linked list.
  79. * # Para: slst: .
  80. * # rslt: 0 failure otherwise success.
  81. */
  82. signed int
  83. list_slst_ini(list_slst_t* slst);
  84. /*
  85. * # Name: list_slst_add
  86. * # Desc: add node to list tail.
  87. * # Para: slst: .
  88. * snod:
  89. * # rslt: 0 failure otherwise success.
  90. */
  91. signed int
  92. list_slst_add(list_slst_t* slst, list_snod_t* snod);
  93. /*
  94. * # Name: list_slst_rmv
  95. * # Desc: search & remove node in list.
  96. * # Para: slst: .
  97. * node:
  98. * # rslt: 0 failure otherwise success.
  99. */
  100. signed int
  101. list_slst_rmv(list_slst_t* slst, list_snod_t* snod);
  102. /*
  103. * # Name: list_slst_has
  104. * # Desc: check if the list contains the node.
  105. * # Para: list: list .
  106. * node: node .
  107. * # return:TRUE sucess, otherwise FALSE.
  108. */
  109. signed int
  110. list_slst_has(list_slst_t* slst, const list_snod_t* snod);
  111. /*
  112. * # Name: list_dlst_emu
  113. * # Desc: iterates each node.
  114. * # Para: list:
  115. * # return:num of nodes
  116. */
  117. signed int
  118. list_slst_emu(list_slst_t* slst);
  119. /*
  120. * # Name: list_dlst_nxt
  121. * # Desc: get iterated node.
  122. * # Para: list:
  123. * # return:num of nodes
  124. */
  125. list_snod_t*
  126. list_slst_nxt(list_slst_t* slst);
  127. /*
  128. * # Name: list_sque_ini
  129. * # Desc: initialize single linked list queue.
  130. * # Para: list:
  131. * # return:num of nodes
  132. */
  133. signed int
  134. list_sque_ini(list_sque_t* sque);
  135. /*
  136. * # Name: util_slst_fsh
  137. * # Desc: reset queue.
  138. * # Para: list: list should be operated on.
  139. * # return:TRUE sucess, otherwise FALSE.
  140. */
  141. signed int
  142. list_sque_fsh(list_sque_t* sque);
  143. signed int
  144. list_sque_pop(list_sque_t* sque, void* data, unsigned int size);
  145. signed int
  146. list_sque_psh(list_sque_t* sque, void* data, unsigned int size);
  147. #ifdef __cplusplus
  148. }
  149. #endif
  150. #endif // __UTIL_SLST_H__