summaryrefslogtreecommitdiff
path: root/bundle/libxml/include/libxml/list.h
blob: 8c9515fe1d0a606fe3778def165c8e2104f87f76 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/*
 * list.h: lists interfaces
 *
 * Copyright (C) 2000 Gary Pennington and Daniel Veillard.
 *
 * Permission to use, copy, modify, and distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
 * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
 * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
 * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
 *
 * Author: Gary.Pennington@uk.sun.com
 */

#ifndef __XML_LINK_INCLUDE__
#define __XML_LINK_INCLUDE__

#ifdef __cplusplus
extern "C" {
#endif

typedef struct _xmlLink xmlLink;
typedef xmlLink *xmlLinkPtr;

typedef struct _xmlList xmlList;
typedef xmlList *xmlListPtr;

/**
 * xmlListDeallocator:
 * @lk:  the data to deallocate
 *
 * Callback function used to free data from a list.
 */
typedef void (*xmlListDeallocator) (xmlLinkPtr lk);
/**
 * xmlListDataCompare:
 * @data0: the first data
 * @data1: the second data
 *
 * Callback function used to compare 2 data.
 *
 * Returns 0 is equality, -1 or 1 otherwise depending on the ordering.
 */
typedef int  (*xmlListDataCompare) (const void *data0, const void *data1);
/**
 * xmlListWalker:
 * @data: the data found in the list
 * @user: extra user provided data to the walker
 *
 * Callback function used when walking a list with xmlListWalk().
 *
 * Returns 0 to stop walking the list, 1 otherwise.
 */
typedef int (*xmlListWalker) (const void *data, const void *user);

/* Creation/Deletion */
xmlListPtr	xmlListCreate		(xmlListDeallocator deallocator,
	                                 xmlListDataCompare compare);
void		xmlListDelete		(xmlListPtr l);

/* Basic Operators */
void *		xmlListSearch		(xmlListPtr l,
					 void *data);
void *		xmlListReverseSearch	(xmlListPtr l,
					 void *data);
int		xmlListInsert		(xmlListPtr l,
					 void *data) ;
int		xmlListAppend		(xmlListPtr l,
					 void *data) ;
int		xmlListRemoveFirst	(xmlListPtr l,
					 void *data);
int		xmlListRemoveLast	(xmlListPtr l,
					 void *data);
int		xmlListRemoveAll	(xmlListPtr l,
					 void *data);
void		xmlListClear		(xmlListPtr l);
int		xmlListEmpty		(xmlListPtr l);
xmlLinkPtr	xmlListFront		(xmlListPtr l);
xmlLinkPtr	xmlListEnd		(xmlListPtr l);
int		xmlListSize		(xmlListPtr l);

void		xmlListPopFront		(xmlListPtr l);
void		xmlListPopBack		(xmlListPtr l);
int		xmlListPushFront	(xmlListPtr l,
					 void *data);
int		xmlListPushBack		(xmlListPtr l,
					 void *data);

/* Advanced Operators */
void		xmlListReverse		(xmlListPtr l);
void		xmlListSort		(xmlListPtr l);
void		xmlListWalk		(xmlListPtr l,
					 xmlListWalker walker,
					 const void *user);
void		xmlListReverseWalk	(xmlListPtr l,
					 xmlListWalker walker,
					 const void *user);
void		xmlListMerge		(xmlListPtr l1,
					 xmlListPtr l2);
xmlListPtr	xmlListDup		(const xmlListPtr old);
int		xmlListCopy		(xmlListPtr cur,
					 const xmlListPtr old);
/* Link operators */
void *          xmlLinkGetData          (xmlLinkPtr lk);

/* xmlListUnique() */
/* xmlListSwap */

#ifdef __cplusplus
}
#endif

#endif /* __XML_LINK_INCLUDE__ */