list.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. /**
  2. * @file
  3. *
  4. * @brief lists interfaces
  5. *
  6. * this module implement the list support used in
  7. * various place in the library.
  8. *
  9. * @copyright See Copyright for the status of this software.
  10. *
  11. * @author Gary Pennington
  12. */
  13. #ifndef __XML_LINK_INCLUDE__
  14. #define __XML_LINK_INCLUDE__
  15. #include <libxml/xmlversion.h>
  16. #ifdef __cplusplus
  17. extern "C" {
  18. #endif
  19. /**
  20. * Linked list item
  21. *
  22. * @deprecated Don't use in new code.
  23. */
  24. typedef struct _xmlLink xmlLink;
  25. typedef xmlLink *xmlLinkPtr;
  26. /**
  27. * Linked list
  28. *
  29. * @deprecated Don't use in new code.
  30. */
  31. typedef struct _xmlList xmlList;
  32. typedef xmlList *xmlListPtr;
  33. /**
  34. * Callback function used to free data from a list.
  35. *
  36. * @param lk the data to deallocate
  37. */
  38. typedef void (*xmlListDeallocator) (xmlLink *lk);
  39. /**
  40. * Callback function used to compare 2 data.
  41. *
  42. * @param data0 the first data
  43. * @param data1 the second data
  44. * @returns 0 is equality, -1 or 1 otherwise depending on the ordering.
  45. */
  46. typedef int (*xmlListDataCompare) (const void *data0, const void *data1);
  47. /**
  48. * Callback function used when walking a list with #xmlListWalk.
  49. *
  50. * @param data the data found in the list
  51. * @param user extra user provided data to the walker
  52. * @returns 0 to stop walking the list, 1 otherwise.
  53. */
  54. typedef int (*xmlListWalker) (const void *data, void *user);
  55. /* Creation/Deletion */
  56. XMLPUBFUN xmlList *
  57. xmlListCreate (xmlListDeallocator deallocator,
  58. xmlListDataCompare compare);
  59. XMLPUBFUN void
  60. xmlListDelete (xmlList *l);
  61. /* Basic Operators */
  62. XMLPUBFUN void *
  63. xmlListSearch (xmlList *l,
  64. void *data);
  65. XMLPUBFUN void *
  66. xmlListReverseSearch (xmlList *l,
  67. void *data);
  68. XMLPUBFUN int
  69. xmlListInsert (xmlList *l,
  70. void *data) ;
  71. XMLPUBFUN int
  72. xmlListAppend (xmlList *l,
  73. void *data) ;
  74. XMLPUBFUN int
  75. xmlListRemoveFirst (xmlList *l,
  76. void *data);
  77. XMLPUBFUN int
  78. xmlListRemoveLast (xmlList *l,
  79. void *data);
  80. XMLPUBFUN int
  81. xmlListRemoveAll (xmlList *l,
  82. void *data);
  83. XMLPUBFUN void
  84. xmlListClear (xmlList *l);
  85. XMLPUBFUN int
  86. xmlListEmpty (xmlList *l);
  87. XMLPUBFUN xmlLink *
  88. xmlListFront (xmlList *l);
  89. XMLPUBFUN xmlLink *
  90. xmlListEnd (xmlList *l);
  91. XMLPUBFUN int
  92. xmlListSize (xmlList *l);
  93. XMLPUBFUN void
  94. xmlListPopFront (xmlList *l);
  95. XMLPUBFUN void
  96. xmlListPopBack (xmlList *l);
  97. XMLPUBFUN int
  98. xmlListPushFront (xmlList *l,
  99. void *data);
  100. XMLPUBFUN int
  101. xmlListPushBack (xmlList *l,
  102. void *data);
  103. /* Advanced Operators */
  104. XMLPUBFUN void
  105. xmlListReverse (xmlList *l);
  106. XMLPUBFUN void
  107. xmlListSort (xmlList *l);
  108. XMLPUBFUN void
  109. xmlListWalk (xmlList *l,
  110. xmlListWalker walker,
  111. void *user);
  112. XMLPUBFUN void
  113. xmlListReverseWalk (xmlList *l,
  114. xmlListWalker walker,
  115. void *user);
  116. XMLPUBFUN void
  117. xmlListMerge (xmlList *l1,
  118. xmlList *l2);
  119. XMLPUBFUN xmlList *
  120. xmlListDup (xmlList *old);
  121. XMLPUBFUN int
  122. xmlListCopy (xmlList *cur,
  123. xmlList *old);
  124. /* Link operators */
  125. XMLPUBFUN void *
  126. xmlLinkGetData (xmlLink *lk);
  127. /* xmlListUnique() */
  128. /* xmlListSwap */
  129. #ifdef __cplusplus
  130. }
  131. #endif
  132. #endif /* __XML_LINK_INCLUDE__ */