summaryrefslogtreecommitdiff
path: root/list.h
blob: 929df83461a2768d3027a56d59009cc029e15327 (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
/*

    viDOOM - level editor for DOOM

    Copyright (C) 2000  Ian Cowburn (ianc@noddybox.demon.co.uk)

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

    -------------------------------------------------------------------------

    Provides a double-linked list

    $Id$

*/

#ifndef _LIST_H

#define _LIST_H

/* Opaque types for the list and iterator.  NULL is the null list and iterator.
*/
struct _List;
typedef struct _List *List;

struct _Iterator;
typedef struct _Iterator *Iterator;


/* Create a list
*/
List		ListNew(int type_size);

/* Free a list object
*/
List		ListClear(List l);

/* Free all elements in a list
*/
List		ListEmpty(List l);

/* Return number of elements in list
*/
int		ListSize(List l);

/* Create an iterator over the list
*/
Iterator	ListIterator(List l);

/* Destory an iterator
*/
Iterator	IteratorClear(Iterator i);

/* Get data for pointed to by this iterator object
*/
void		*IteratorData(Iterator i);

/* Move the iterator to the next element.  NULL once done.
*/
Iterator	IteratorNext(Iterator i);

/* Move the iterator to the previous element.  NULL once done.
*/
Iterator	IteratorPrev(Iterator i);

/* Replace the data currently stored in this this position with the new one
*/
Iterator	IteratorUpdate(Iterator i,void *data);

/* Delete the data currently stored in this position and move the iterator to
   the next element.
*/
Iterator	IteratorDelete(Iterator i);

/* Append to the tail of the the list
*/
void		ListAppend(List l,void *data);

/* Insert at the head of the the list
*/
void		ListInsert(List l,void *data);

/* Return an iterator for the searched element.  Note the fist void* passed
   to the predicate will be of the type stored in the lists.  The second
   argument will be whatever was passed as data.
*/
Iterator	ListFindElem(List l,int (*pred)(void *, void *),void *data);

#endif


/* END OF FILE */