blob: d4c1ec59ba57c4adcc6560b3a771908577ae095a [file] [log] [blame]
Owen Taylor3473f882001-02-23 17:55:21 +00001/*
2 * list.h: lists interfaces
3 *
4 * Copyright (C) 2000 Gary Pennington and Daniel Veillard.
5 *
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.
9 *
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.
14 *
15 * Author: Gary.Pennington@uk.sun.com
16 */
17
Daniel Veillard56a4cb82001-03-24 17:00:36 +000018#ifndef __XML_LINK_INCLUDE__
19#define __XML_LINK_INCLUDE__
20
21#ifdef __cplusplus
22extern "C" {
23#endif
24
Owen Taylor3473f882001-02-23 17:55:21 +000025typedef struct _xmlLink xmlLink;
26typedef xmlLink *xmlLinkPtr;
27
28typedef struct _xmlList xmlList;
29typedef xmlList *xmlListPtr;
30
31typedef void (*xmlListDeallocator) (xmlLinkPtr lk);
32typedef int (*xmlListDataCompare) (const void *data0, const void *data1);
33typedef int (*xmlListWalker) (const void *data, const void *user);
34
35/* Creation/Deletion */
36xmlListPtr xmlListCreate (xmlListDeallocator deallocator,
37 xmlListDataCompare compare);
38void xmlListDelete (xmlListPtr l);
39
40/* Basic Operators */
41void * xmlListSearch (xmlListPtr l,
42 void *data);
43void * xmlListReverseSearch (xmlListPtr l,
44 void *data);
45int xmlListInsert (xmlListPtr l,
46 void *data) ;
47int xmlListAppend (xmlListPtr l,
48 void *data) ;
49int xmlListRemoveFirst (xmlListPtr l,
50 void *data);
51int xmlListRemoveLast (xmlListPtr l,
52 void *data);
53int xmlListRemoveAll (xmlListPtr l,
54 void *data);
55void xmlListClear (xmlListPtr l);
56int xmlListEmpty (xmlListPtr l);
57xmlLinkPtr xmlListFront (xmlListPtr l);
58xmlLinkPtr xmlListEnd (xmlListPtr l);
59int xmlListSize (xmlListPtr l);
60
61void xmlListPopFront (xmlListPtr l);
62void xmlListPopBack (xmlListPtr l);
63int xmlListPushFront (xmlListPtr l,
64 void *data);
65int xmlListPushBack (xmlListPtr l,
66 void *data);
67
68/* Advanced Operators */
69void xmlListReverse (xmlListPtr l);
70void xmlListSort (xmlListPtr l);
71void xmlListWalk (xmlListPtr l,
72 xmlListWalker walker,
73 const void *user);
74void xmlListReverseWalk (xmlListPtr l,
75 xmlListWalker walker,
76 const void *user);
77void xmlListMerge (xmlListPtr l1,
78 xmlListPtr l2);
79xmlListPtr xmlListDup (const xmlListPtr old);
80int xmlListCopy (xmlListPtr cur,
81 const xmlListPtr old);
82/* Link operators */
83void * xmlLinkGetData (xmlLinkPtr lk);
84
85/* xmlListUnique() */
86/* xmlListSwap */
87
Daniel Veillard56a4cb82001-03-24 17:00:36 +000088#ifdef __cplusplus
89}
90#endif
Owen Taylor3473f882001-02-23 17:55:21 +000091
Daniel Veillard56a4cb82001-03-24 17:00:36 +000092#endif /* __XML_LINK_INCLUDE__ */