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