blob: 8c9515fe1d0a606fe3778def165c8e2104f87f76 [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
Daniel Veillard9d06d302002-01-22 18:15:52 +000031/**
32 * xmlListDeallocator:
33 * @lk: the data to deallocate
34 *
Daniel Veillard61f26172002-03-12 18:46:39 +000035 * Callback function used to free data from a list.
Daniel Veillard9d06d302002-01-22 18:15:52 +000036 */
Owen Taylor3473f882001-02-23 17:55:21 +000037typedef void (*xmlListDeallocator) (xmlLinkPtr lk);
Daniel Veillard9d06d302002-01-22 18:15:52 +000038/**
39 * xmlListDataCompare:
40 * @data0: the first data
41 * @data1: the second data
42 *
Daniel Veillard61f26172002-03-12 18:46:39 +000043 * Callback function used to compare 2 data.
Daniel Veillard9d06d302002-01-22 18:15:52 +000044 *
Daniel Veillard61f26172002-03-12 18:46:39 +000045 * Returns 0 is equality, -1 or 1 otherwise depending on the ordering.
Daniel Veillard9d06d302002-01-22 18:15:52 +000046 */
Owen Taylor3473f882001-02-23 17:55:21 +000047typedef int (*xmlListDataCompare) (const void *data0, const void *data1);
Daniel Veillard9d06d302002-01-22 18:15:52 +000048/**
49 * xmlListWalker:
50 * @data: the data found in the list
51 * @user: extra user provided data to the walker
52 *
Daniel Veillard61f26172002-03-12 18:46:39 +000053 * Callback function used when walking a list with xmlListWalk().
Daniel Veillard9d06d302002-01-22 18:15:52 +000054 *
Daniel Veillard61f26172002-03-12 18:46:39 +000055 * Returns 0 to stop walking the list, 1 otherwise.
Daniel Veillard9d06d302002-01-22 18:15:52 +000056 */
Owen Taylor3473f882001-02-23 17:55:21 +000057typedef int (*xmlListWalker) (const void *data, const void *user);
58
59/* Creation/Deletion */
60xmlListPtr xmlListCreate (xmlListDeallocator deallocator,
61 xmlListDataCompare compare);
62void xmlListDelete (xmlListPtr l);
63
64/* Basic Operators */
65void * xmlListSearch (xmlListPtr l,
66 void *data);
67void * xmlListReverseSearch (xmlListPtr l,
68 void *data);
69int xmlListInsert (xmlListPtr l,
70 void *data) ;
71int xmlListAppend (xmlListPtr l,
72 void *data) ;
73int xmlListRemoveFirst (xmlListPtr l,
74 void *data);
75int xmlListRemoveLast (xmlListPtr l,
76 void *data);
77int xmlListRemoveAll (xmlListPtr l,
78 void *data);
79void xmlListClear (xmlListPtr l);
80int xmlListEmpty (xmlListPtr l);
81xmlLinkPtr xmlListFront (xmlListPtr l);
82xmlLinkPtr xmlListEnd (xmlListPtr l);
83int xmlListSize (xmlListPtr l);
84
85void xmlListPopFront (xmlListPtr l);
86void xmlListPopBack (xmlListPtr l);
87int xmlListPushFront (xmlListPtr l,
88 void *data);
89int xmlListPushBack (xmlListPtr l,
90 void *data);
91
92/* Advanced Operators */
93void xmlListReverse (xmlListPtr l);
94void xmlListSort (xmlListPtr l);
95void xmlListWalk (xmlListPtr l,
96 xmlListWalker walker,
97 const void *user);
98void xmlListReverseWalk (xmlListPtr l,
99 xmlListWalker walker,
100 const void *user);
101void xmlListMerge (xmlListPtr l1,
102 xmlListPtr l2);
103xmlListPtr xmlListDup (const xmlListPtr old);
104int xmlListCopy (xmlListPtr cur,
105 const xmlListPtr old);
106/* Link operators */
107void * xmlLinkGetData (xmlLinkPtr lk);
108
109/* xmlListUnique() */
110/* xmlListSwap */
111
Daniel Veillard56a4cb82001-03-24 17:00:36 +0000112#ifdef __cplusplus
113}
114#endif
Owen Taylor3473f882001-02-23 17:55:21 +0000115
Daniel Veillard56a4cb82001-03-24 17:00:36 +0000116#endif /* __XML_LINK_INCLUDE__ */