2 * list.h: lists interfaces
4 * Copyright (C) 2000 Gary Pennington and Daniel Veillard.
6 * Permission to use, copy, modify, and distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
10 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
11 * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
12 * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
13 * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
15 * Author: Gary.Pennington@uk.sun.com
18 #ifndef __XML_LINK_INCLUDE__
19 #define __XML_LINK_INCLUDE__
25 typedef struct _xmlLink xmlLink;
26 typedef xmlLink *xmlLinkPtr;
28 typedef struct _xmlList xmlList;
29 typedef xmlList *xmlListPtr;
33 * @lk: the data to deallocate
35 * Callback function used to free data from a list.
37 typedef void (*xmlListDeallocator) (xmlLinkPtr lk);
40 * @data0: the first data
41 * @data1: the second data
43 * Callback function used to compare 2 data.
45 * Returns 0 is equality, -1 or 1 otherwise depending on the ordering.
47 typedef int (*xmlListDataCompare) (const void *data0, const void *data1);
50 * @data: the data found in the list
51 * @user: extra user provided data to the walker
53 * Callback function used when walking a list with xmlListWalk().
55 * Returns 0 to stop walking the list, 1 otherwise.
57 typedef int (*xmlListWalker) (const void *data, const void *user);
59 /* Creation/Deletion */
60 xmlListPtr xmlListCreate (xmlListDeallocator deallocator,
61 xmlListDataCompare compare);
62 void xmlListDelete (xmlListPtr l);
65 void * xmlListSearch (xmlListPtr l,
67 void * xmlListReverseSearch (xmlListPtr l,
69 int xmlListInsert (xmlListPtr l,
71 int xmlListAppend (xmlListPtr l,
73 int xmlListRemoveFirst (xmlListPtr l,
75 int xmlListRemoveLast (xmlListPtr l,
77 int xmlListRemoveAll (xmlListPtr l,
79 void xmlListClear (xmlListPtr l);
80 int xmlListEmpty (xmlListPtr l);
81 xmlLinkPtr xmlListFront (xmlListPtr l);
82 xmlLinkPtr xmlListEnd (xmlListPtr l);
83 int xmlListSize (xmlListPtr l);
85 void xmlListPopFront (xmlListPtr l);
86 void xmlListPopBack (xmlListPtr l);
87 int xmlListPushFront (xmlListPtr l,
89 int xmlListPushBack (xmlListPtr l,
92 /* Advanced Operators */
93 void xmlListReverse (xmlListPtr l);
94 void xmlListSort (xmlListPtr l);
95 void xmlListWalk (xmlListPtr l,
98 void xmlListReverseWalk (xmlListPtr l,
101 void xmlListMerge (xmlListPtr l1,
103 xmlListPtr xmlListDup (const xmlListPtr old);
104 int xmlListCopy (xmlListPtr cur,
105 const xmlListPtr old);
107 void * xmlLinkGetData (xmlLinkPtr lk);
109 /* xmlListUnique() */
116 #endif /* __XML_LINK_INCLUDE__ */