blob: 0504e0cff4af1be93c80f3201f13dd826393b32f [file] [log] [blame]
Owen Taylor3473f882001-02-23 17:55:21 +00001/*
Daniel Veillardbe586972003-11-18 20:56:51 +00002 * Summary: lists interfaces
Daniel Veillardf8e3db02012-09-11 13:26:36 +08003 * Description: this module implement the list support used in
Daniel Veillardbe586972003-11-18 20:56:51 +00004 * various place in the library.
Owen Taylor3473f882001-02-23 17:55:21 +00005 *
Daniel Veillardbe586972003-11-18 20:56:51 +00006 * Copy: See Copyright for the status of this software.
Owen Taylor3473f882001-02-23 17:55:21 +00007 *
Daniel Veillardbe586972003-11-18 20:56:51 +00008 * Author: Gary Pennington <Gary.Pennington@uk.sun.com>
Owen Taylor3473f882001-02-23 17:55:21 +00009 */
10
Daniel Veillard56a4cb82001-03-24 17:00:36 +000011#ifndef __XML_LINK_INCLUDE__
12#define __XML_LINK_INCLUDE__
13
Igor Zlatkovic76874e42003-08-25 09:05:12 +000014#include <libxml/xmlversion.h>
15
Daniel Veillard56a4cb82001-03-24 17:00:36 +000016#ifdef __cplusplus
17extern "C" {
18#endif
19
Owen Taylor3473f882001-02-23 17:55:21 +000020typedef struct _xmlLink xmlLink;
21typedef xmlLink *xmlLinkPtr;
22
23typedef struct _xmlList xmlList;
24typedef xmlList *xmlListPtr;
25
Daniel Veillard9d06d302002-01-22 18:15:52 +000026/**
27 * xmlListDeallocator:
28 * @lk: the data to deallocate
29 *
Daniel Veillard61f26172002-03-12 18:46:39 +000030 * Callback function used to free data from a list.
Daniel Veillard9d06d302002-01-22 18:15:52 +000031 */
Owen Taylor3473f882001-02-23 17:55:21 +000032typedef void (*xmlListDeallocator) (xmlLinkPtr lk);
Daniel Veillard9d06d302002-01-22 18:15:52 +000033/**
34 * xmlListDataCompare:
35 * @data0: the first data
36 * @data1: the second data
37 *
Daniel Veillard61f26172002-03-12 18:46:39 +000038 * Callback function used to compare 2 data.
Daniel Veillard9d06d302002-01-22 18:15:52 +000039 *
Daniel Veillard61f26172002-03-12 18:46:39 +000040 * Returns 0 is equality, -1 or 1 otherwise depending on the ordering.
Daniel Veillard9d06d302002-01-22 18:15:52 +000041 */
Owen Taylor3473f882001-02-23 17:55:21 +000042typedef int (*xmlListDataCompare) (const void *data0, const void *data1);
Daniel Veillard9d06d302002-01-22 18:15:52 +000043/**
44 * xmlListWalker:
45 * @data: the data found in the list
46 * @user: extra user provided data to the walker
47 *
Daniel Veillard61f26172002-03-12 18:46:39 +000048 * Callback function used when walking a list with xmlListWalk().
Daniel Veillard9d06d302002-01-22 18:15:52 +000049 *
Daniel Veillard61f26172002-03-12 18:46:39 +000050 * Returns 0 to stop walking the list, 1 otherwise.
Daniel Veillard9d06d302002-01-22 18:15:52 +000051 */
Owen Taylor3473f882001-02-23 17:55:21 +000052typedef int (*xmlListWalker) (const void *data, const void *user);
53
54/* Creation/Deletion */
Igor Zlatkovic76874e42003-08-25 09:05:12 +000055XMLPUBFUN xmlListPtr XMLCALL
56 xmlListCreate (xmlListDeallocator deallocator,
Owen Taylor3473f882001-02-23 17:55:21 +000057 xmlListDataCompare compare);
Daniel Veillardf8e3db02012-09-11 13:26:36 +080058XMLPUBFUN void XMLCALL
Igor Zlatkovic76874e42003-08-25 09:05:12 +000059 xmlListDelete (xmlListPtr l);
Owen Taylor3473f882001-02-23 17:55:21 +000060
61/* Basic Operators */
Daniel Veillardf8e3db02012-09-11 13:26:36 +080062XMLPUBFUN void * XMLCALL
Igor Zlatkovic76874e42003-08-25 09:05:12 +000063 xmlListSearch (xmlListPtr l,
Owen Taylor3473f882001-02-23 17:55:21 +000064 void *data);
Daniel Veillardf8e3db02012-09-11 13:26:36 +080065XMLPUBFUN void * XMLCALL
Igor Zlatkovic76874e42003-08-25 09:05:12 +000066 xmlListReverseSearch (xmlListPtr l,
Owen Taylor3473f882001-02-23 17:55:21 +000067 void *data);
Daniel Veillardf8e3db02012-09-11 13:26:36 +080068XMLPUBFUN int XMLCALL
Igor Zlatkovic76874e42003-08-25 09:05:12 +000069 xmlListInsert (xmlListPtr l,
Owen Taylor3473f882001-02-23 17:55:21 +000070 void *data) ;
Daniel Veillardf8e3db02012-09-11 13:26:36 +080071XMLPUBFUN int XMLCALL
Igor Zlatkovic76874e42003-08-25 09:05:12 +000072 xmlListAppend (xmlListPtr l,
Owen Taylor3473f882001-02-23 17:55:21 +000073 void *data) ;
Daniel Veillardf8e3db02012-09-11 13:26:36 +080074XMLPUBFUN int XMLCALL
Igor Zlatkovic76874e42003-08-25 09:05:12 +000075 xmlListRemoveFirst (xmlListPtr l,
Owen Taylor3473f882001-02-23 17:55:21 +000076 void *data);
Daniel Veillardf8e3db02012-09-11 13:26:36 +080077XMLPUBFUN int XMLCALL
Igor Zlatkovic76874e42003-08-25 09:05:12 +000078 xmlListRemoveLast (xmlListPtr l,
Owen Taylor3473f882001-02-23 17:55:21 +000079 void *data);
Daniel Veillardf8e3db02012-09-11 13:26:36 +080080XMLPUBFUN int XMLCALL
Igor Zlatkovic76874e42003-08-25 09:05:12 +000081 xmlListRemoveAll (xmlListPtr l,
Owen Taylor3473f882001-02-23 17:55:21 +000082 void *data);
Daniel Veillardf8e3db02012-09-11 13:26:36 +080083XMLPUBFUN void XMLCALL
Igor Zlatkovic76874e42003-08-25 09:05:12 +000084 xmlListClear (xmlListPtr l);
Daniel Veillardf8e3db02012-09-11 13:26:36 +080085XMLPUBFUN int XMLCALL
Igor Zlatkovic76874e42003-08-25 09:05:12 +000086 xmlListEmpty (xmlListPtr l);
Daniel Veillardf8e3db02012-09-11 13:26:36 +080087XMLPUBFUN xmlLinkPtr XMLCALL
Igor Zlatkovic76874e42003-08-25 09:05:12 +000088 xmlListFront (xmlListPtr l);
Daniel Veillardf8e3db02012-09-11 13:26:36 +080089XMLPUBFUN xmlLinkPtr XMLCALL
Igor Zlatkovic76874e42003-08-25 09:05:12 +000090 xmlListEnd (xmlListPtr l);
Daniel Veillardf8e3db02012-09-11 13:26:36 +080091XMLPUBFUN int XMLCALL
Igor Zlatkovic76874e42003-08-25 09:05:12 +000092 xmlListSize (xmlListPtr l);
Owen Taylor3473f882001-02-23 17:55:21 +000093
Daniel Veillardf8e3db02012-09-11 13:26:36 +080094XMLPUBFUN void XMLCALL
Igor Zlatkovic76874e42003-08-25 09:05:12 +000095 xmlListPopFront (xmlListPtr l);
Daniel Veillardf8e3db02012-09-11 13:26:36 +080096XMLPUBFUN void XMLCALL
Igor Zlatkovic76874e42003-08-25 09:05:12 +000097 xmlListPopBack (xmlListPtr l);
Daniel Veillardf8e3db02012-09-11 13:26:36 +080098XMLPUBFUN int XMLCALL
Igor Zlatkovic76874e42003-08-25 09:05:12 +000099 xmlListPushFront (xmlListPtr l,
Owen Taylor3473f882001-02-23 17:55:21 +0000100 void *data);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800101XMLPUBFUN int XMLCALL
Igor Zlatkovic76874e42003-08-25 09:05:12 +0000102 xmlListPushBack (xmlListPtr l,
Owen Taylor3473f882001-02-23 17:55:21 +0000103 void *data);
104
105/* Advanced Operators */
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800106XMLPUBFUN void XMLCALL
Igor Zlatkovic76874e42003-08-25 09:05:12 +0000107 xmlListReverse (xmlListPtr l);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800108XMLPUBFUN void XMLCALL
Igor Zlatkovic76874e42003-08-25 09:05:12 +0000109 xmlListSort (xmlListPtr l);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800110XMLPUBFUN void XMLCALL
Igor Zlatkovic76874e42003-08-25 09:05:12 +0000111 xmlListWalk (xmlListPtr l,
Owen Taylor3473f882001-02-23 17:55:21 +0000112 xmlListWalker walker,
113 const void *user);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800114XMLPUBFUN void XMLCALL
Igor Zlatkovic76874e42003-08-25 09:05:12 +0000115 xmlListReverseWalk (xmlListPtr l,
Owen Taylor3473f882001-02-23 17:55:21 +0000116 xmlListWalker walker,
117 const void *user);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800118XMLPUBFUN void XMLCALL
Igor Zlatkovic76874e42003-08-25 09:05:12 +0000119 xmlListMerge (xmlListPtr l1,
Owen Taylor3473f882001-02-23 17:55:21 +0000120 xmlListPtr l2);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800121XMLPUBFUN xmlListPtr XMLCALL
Igor Zlatkovic76874e42003-08-25 09:05:12 +0000122 xmlListDup (const xmlListPtr old);
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800123XMLPUBFUN int XMLCALL
Igor Zlatkovic76874e42003-08-25 09:05:12 +0000124 xmlListCopy (xmlListPtr cur,
Owen Taylor3473f882001-02-23 17:55:21 +0000125 const xmlListPtr old);
126/* Link operators */
Daniel Veillardf8e3db02012-09-11 13:26:36 +0800127XMLPUBFUN void * XMLCALL
Igor Zlatkovic76874e42003-08-25 09:05:12 +0000128 xmlLinkGetData (xmlLinkPtr lk);
Owen Taylor3473f882001-02-23 17:55:21 +0000129
130/* xmlListUnique() */
131/* xmlListSwap */
132
Daniel Veillard56a4cb82001-03-24 17:00:36 +0000133#ifdef __cplusplus
134}
135#endif
Owen Taylor3473f882001-02-23 17:55:21 +0000136
Daniel Veillard56a4cb82001-03-24 17:00:36 +0000137#endif /* __XML_LINK_INCLUDE__ */