52 lines
1.2 KiB
C
52 lines
1.2 KiB
C
|
#ifndef __Z_LIST_H
|
||
|
#define __Z_LIST_H
|
||
|
|
||
|
/*
|
||
|
Linked List structure
|
||
|
|
||
|
All items contained in this list but be pointers. The list does not claim
|
||
|
"ownership" of the data, so it is not the responsibility of the list to
|
||
|
free the memory allocated by the data. It will, however, free the memory taken
|
||
|
by the nodes
|
||
|
*/
|
||
|
|
||
|
// dummy for internals
|
||
|
struct listNode_s;
|
||
|
|
||
|
typedef struct list_s
|
||
|
{
|
||
|
// start of the list
|
||
|
struct listNode_s *head;
|
||
|
struct listNode_s *tail;
|
||
|
|
||
|
// # of nodes in the list
|
||
|
int numNodes;
|
||
|
|
||
|
// current node
|
||
|
int curNode;
|
||
|
struct listNode_s *currentNode;
|
||
|
} list_t;
|
||
|
|
||
|
// init/cleanup
|
||
|
void initializeList(list_t *list);
|
||
|
void emptyList(list_t *list);
|
||
|
|
||
|
// get information about the list
|
||
|
int listLength(list_t const *list);
|
||
|
|
||
|
// add items to the list
|
||
|
void addHead(list_t *list, void *data);
|
||
|
void addTail(list_t *list, void *data);
|
||
|
|
||
|
// remove items from the list
|
||
|
void removeItem(list_t *list, int num);
|
||
|
|
||
|
// get items from the list (0 based)
|
||
|
void *getItem(list_t *list, int num);
|
||
|
int findIndex(list_t *list, void *data);
|
||
|
|
||
|
// data transfer
|
||
|
void copyList(list_t *src, list_t *dest);
|
||
|
void stealList(list_t *src, list_t *dest);
|
||
|
|
||
|
#endif
|