/* provides a single linked list 
 * Ralf Becker 
 * 2003
 * $Id: slist.h,v 1.1.1.1 2004/06/04 11:31:44 becker Exp $
 */
#include <stdlib.h>
#ifndef _SLIST_H_

#define slist_foreach(_x,_data) \
	for (_data = slist_first(_x); _data; _data = slist_next(_x))
	
typedef struct slist_elmt_ {
	void *data;
	struct slist_elmt_ *next;
} slist_elmt;

typedef struct slist_ {
	slist_elmt *first;
	slist_elmt *current;
	slist_elmt *last;
	int length;
	void (*destroy)(void *);
} slist;

/* returns number of elements in list */
int slist_size (slist *_LIST);

/* returns pointer to first element of list
 * or NULL
 */
void *slist_first(slist *_LIST);

/* advance the pointer on current element
 * return -1 at the end of the list
 */
int slist_advance(slist *_LIST); 

/* return pointer to the current element in list
 * or NULL
 */
void *slist_current(slist *_LIST);

/* returns pointer to next element in list 
 * or NULL
 */
void *slist_next(slist *_LIST);

/* append to end of list 
 * error -1
 */
int slist_append (slist *_LIST, void *data);

/* initialize list
 * returns Pointer of type slist
 * error - NULL
 */
slist *slist_init(void (*destroy)(void *data));

/* remove elements from list */
void slist_clean(slist *_LIST); 

/* remove complete list */
void slist_remove(slist **_LIST);

#define _SLIST_H_
#endif /* _SLIST_H_ */


syntax highlighted by Code2HTML, v. 0.9.1