00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef __LIST_H
00012 #define __LIST_H
00013
00014
00015
00016 typedef struct LST_BUCKET {
00017 struct LST_BUCKET *next;
00018 }
00019 LST_BUCKET;
00020
00021 typedef struct {
00022 int count;
00023 LST_BUCKET *head;
00024 LST_BUCKET *z;
00025 LST_BUCKET hz[2];
00026 }
00027 LIST;
00028
00029
00030
00031
00032
00033 #define LST_USERSPACE(h) ((void*)((LST_BUCKET*)(h) + 1))
00034
00035
00036
00037
00038
00039 #define LST_HEADER(n) ((LST_BUCKET*)(n) - 1)
00040
00041
00042
00043
00044
00045
00046 #define LST_HEAD(l) LST_USERSPACE((l)->head)
00047
00048
00049
00050
00051 #define LST_EMPTY(l) ((l)->count == 0)
00052
00053
00054
00055 void *lst_newnode (int size);
00056 void lst_freenode ( void *node);
00057 LIST *lst_init (void);
00058 void lst_kill (LIST * l, void (*freeNode) ());
00059 void lst_insertafter (LIST * l, void *node, void *after);
00060 void *lst_deletenext ( LIST * l, void *node);
00061 void *lst_first (LIST * l);
00062 void *lst_next (void *prev);
00063 void lst_mergesort (LIST * l, int (*cmp_func) ());
00064
00065 #endif