00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef LIST_H
00033 #define LIST_H
00034
00035 #include "listnode.h"
00036 #include <stdio.h>
00037
00039 typedef struct _list List;
00040
00042 struct _list
00043 {
00044 int numNodes;
00045 ListNode *firstNode;
00046 ListNode *lastNode;
00047 };
00048
00049 void list_Init(void *(*list_allocate)(size_t), void (*list_deallocate)(void *));
00050
00051 extern List *list_Create (void);
00052 extern void list_Destroy (List *);
00053 extern void list_DestroyAllNodes (List *);
00054 extern int list_DestroyNodeByPos (List *, int);
00055 extern int list_DestroyNodeByAddr (List *, ListNode *);
00056 extern List *list_Copy (List *list, void *(*copy)(void *));
00057
00058 extern ListNode *list_InsertNode (List *, ListNode *, int);
00059
00060 extern ListNode *list_EnqueueNode (List *, ListNode *);
00061 extern ListNode *list_DequeueNode (List *);
00062
00063 extern ListNode *list_PushNode (List *, ListNode *);
00064 extern ListNode *list_PopNode (List *);
00065
00066 extern ListNode *list_DetachNodeByPos (List *, int);
00067 extern ListNode *list_DetachNodeByAddr (List *, ListNode *);
00068
00069 extern ListNode *list_GetNodeByPos (List *, int);
00070 extern void *list_GetNodeDataByPos (List *, int);
00071
00072 extern void list_PrintToFile (List *, FILE *);
00073 extern int list_IsPosValid (List *, int);
00074
00075 extern ListNode *list_GetLastNode (List *);
00076 extern ListNode *list_GetFirstNode (List *);
00077
00078 #define list_GetNumNodes(list) (((List *)(list))->numNodes)
00079
00080 #endif