blob: 297831ae04be96dcbd9bef1fc9dd79fa284a5e49 [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
Igor Zlatkovic76874e42003-08-25 09:05:12 +000021#include <libxml/xmlversion.h>
22
Daniel Veillard56a4cb82001-03-24 17:00:36 +000023#ifdef __cplusplus
24extern "C" {
25#endif
26
Owen Taylor3473f882001-02-23 17:55:21 +000027typedef struct _xmlLink xmlLink;
28typedef xmlLink *xmlLinkPtr;
29
30typedef struct _xmlList xmlList;
31typedef xmlList *xmlListPtr;
32
Daniel Veillard9d06d302002-01-22 18:15:52 +000033/**
34 * xmlListDeallocator:
35 * @lk: the data to deallocate
36 *
Daniel Veillard61f26172002-03-12 18:46:39 +000037 * Callback function used to free data from a list.
Daniel Veillard9d06d302002-01-22 18:15:52 +000038 */
Owen Taylor3473f882001-02-23 17:55:21 +000039typedef void (*xmlListDeallocator) (xmlLinkPtr lk);
Daniel Veillard9d06d302002-01-22 18:15:52 +000040/**
41 * xmlListDataCompare:
42 * @data0: the first data
43 * @data1: the second data
44 *
Daniel Veillard61f26172002-03-12 18:46:39 +000045 * Callback function used to compare 2 data.
Daniel Veillard9d06d302002-01-22 18:15:52 +000046 *
Daniel Veillard61f26172002-03-12 18:46:39 +000047 * Returns 0 is equality, -1 or 1 otherwise depending on the ordering.
Daniel Veillard9d06d302002-01-22 18:15:52 +000048 */
Owen Taylor3473f882001-02-23 17:55:21 +000049typedef int (*xmlListDataCompare) (const void *data0, const void *data1);
Daniel Veillard9d06d302002-01-22 18:15:52 +000050/**
51 * xmlListWalker:
52 * @data: the data found in the list
53 * @user: extra user provided data to the walker
54 *
Daniel Veillard61f26172002-03-12 18:46:39 +000055 * Callback function used when walking a list with xmlListWalk().
Daniel Veillard9d06d302002-01-22 18:15:52 +000056 *
Daniel Veillard61f26172002-03-12 18:46:39 +000057 * Returns 0 to stop walking the list, 1 otherwise.
Daniel Veillard9d06d302002-01-22 18:15:52 +000058 */
Owen Taylor3473f882001-02-23 17:55:21 +000059typedef int (*xmlListWalker) (const void *data, const void *user);
60
61/* Creation/Deletion */
Igor Zlatkovic76874e42003-08-25 09:05:12 +000062XMLPUBFUN xmlListPtr XMLCALL
63 xmlListCreate (xmlListDeallocator deallocator,
Owen Taylor3473f882001-02-23 17:55:21 +000064 xmlListDataCompare compare);
Igor Zlatkovic76874e42003-08-25 09:05:12 +000065XMLPUBFUN void XMLCALL
66 xmlListDelete (xmlListPtr l);
Owen Taylor3473f882001-02-23 17:55:21 +000067
68/* Basic Operators */
Igor Zlatkovic76874e42003-08-25 09:05:12 +000069XMLPUBFUN void * XMLCALL
70 xmlListSearch (xmlListPtr l,
Owen Taylor3473f882001-02-23 17:55:21 +000071 void *data);
Igor Zlatkovic76874e42003-08-25 09:05:12 +000072XMLPUBFUN void * XMLCALL
73 xmlListReverseSearch (xmlListPtr l,
Owen Taylor3473f882001-02-23 17:55:21 +000074 void *data);
Igor Zlatkovic76874e42003-08-25 09:05:12 +000075XMLPUBFUN int XMLCALL
76 xmlListInsert (xmlListPtr l,
Owen Taylor3473f882001-02-23 17:55:21 +000077 void *data) ;
Igor Zlatkovic76874e42003-08-25 09:05:12 +000078XMLPUBFUN int XMLCALL
79 xmlListAppend (xmlListPtr l,
Owen Taylor3473f882001-02-23 17:55:21 +000080 void *data) ;
Igor Zlatkovic76874e42003-08-25 09:05:12 +000081XMLPUBFUN int XMLCALL
82 xmlListRemoveFirst (xmlListPtr l,
Owen Taylor3473f882001-02-23 17:55:21 +000083 void *data);
Igor Zlatkovic76874e42003-08-25 09:05:12 +000084XMLPUBFUN int XMLCALL
85 xmlListRemoveLast (xmlListPtr l,
Owen Taylor3473f882001-02-23 17:55:21 +000086 void *data);
Igor Zlatkovic76874e42003-08-25 09:05:12 +000087XMLPUBFUN int XMLCALL
88 xmlListRemoveAll (xmlListPtr l,
Owen Taylor3473f882001-02-23 17:55:21 +000089 void *data);
Igor Zlatkovic76874e42003-08-25 09:05:12 +000090XMLPUBFUN void XMLCALL
91 xmlListClear (xmlListPtr l);
92XMLPUBFUN int XMLCALL
93 xmlListEmpty (xmlListPtr l);
94XMLPUBFUN xmlLinkPtr XMLCALL
95 xmlListFront (xmlListPtr l);
96XMLPUBFUN xmlLinkPtr XMLCALL
97 xmlListEnd (xmlListPtr l);
98XMLPUBFUN int XMLCALL
99 xmlListSize (xmlListPtr l);
Owen Taylor3473f882001-02-23 17:55:21 +0000100
Igor Zlatkovic76874e42003-08-25 09:05:12 +0000101XMLPUBFUN void XMLCALL
102 xmlListPopFront (xmlListPtr l);
103XMLPUBFUN void XMLCALL
104 xmlListPopBack (xmlListPtr l);
105XMLPUBFUN int XMLCALL
106 xmlListPushFront (xmlListPtr l,
Owen Taylor3473f882001-02-23 17:55:21 +0000107 void *data);
Igor Zlatkovic76874e42003-08-25 09:05:12 +0000108XMLPUBFUN int XMLCALL
109 xmlListPushBack (xmlListPtr l,
Owen Taylor3473f882001-02-23 17:55:21 +0000110 void *data);
111
112/* Advanced Operators */
Igor Zlatkovic76874e42003-08-25 09:05:12 +0000113XMLPUBFUN void XMLCALL
114 xmlListReverse (xmlListPtr l);
115XMLPUBFUN void XMLCALL
116 xmlListSort (xmlListPtr l);
117XMLPUBFUN void XMLCALL
118 xmlListWalk (xmlListPtr l,
Owen Taylor3473f882001-02-23 17:55:21 +0000119 xmlListWalker walker,
120 const void *user);
Igor Zlatkovic76874e42003-08-25 09:05:12 +0000121XMLPUBFUN void XMLCALL
122 xmlListReverseWalk (xmlListPtr l,
Owen Taylor3473f882001-02-23 17:55:21 +0000123 xmlListWalker walker,
124 const void *user);
Igor Zlatkovic76874e42003-08-25 09:05:12 +0000125XMLPUBFUN void XMLCALL
126 xmlListMerge (xmlListPtr l1,
Owen Taylor3473f882001-02-23 17:55:21 +0000127 xmlListPtr l2);
Igor Zlatkovic76874e42003-08-25 09:05:12 +0000128XMLPUBFUN xmlListPtr XMLCALL
129 xmlListDup (const xmlListPtr old);
130XMLPUBFUN int XMLCALL
131 xmlListCopy (xmlListPtr cur,
Owen Taylor3473f882001-02-23 17:55:21 +0000132 const xmlListPtr old);
133/* Link operators */
Igor Zlatkovic76874e42003-08-25 09:05:12 +0000134XMLPUBFUN void * XMLCALL
135 xmlLinkGetData (xmlLinkPtr lk);
Owen Taylor3473f882001-02-23 17:55:21 +0000136
137/* xmlListUnique() */
138/* xmlListSwap */
139
Daniel Veillard56a4cb82001-03-24 17:00:36 +0000140#ifdef __cplusplus
141}
142#endif
Owen Taylor3473f882001-02-23 17:55:21 +0000143
Daniel Veillard56a4cb82001-03-24 17:00:36 +0000144#endif /* __XML_LINK_INCLUDE__ */