00001
00016 #ifndef DYNLIST_H
00017 #define DYNLIST_H
00018
00019 #include <stdlib.h>
00020
00021 #ifdef THREADSAFE
00022 #include <pthread.h>
00023 #include <semaphore.h>
00024 #endif
00025
00031 #define dynlist(x, y) dynlist (x)=createlist(sizeof(y))
00032
00038 typedef struct item {
00039 struct item *prev;
00040 void *refer;
00041 struct item *next;
00042 }dynlistitem;
00043
00049 typedef struct {
00051 int itemsize;
00052
00054 int lasti;
00055
00057 int endi;
00058
00060 dynlistitem *last;
00061
00063 dynlistitem *start;
00064
00066 dynlistitem *end;
00067
00068 #ifdef THREADSAFE
00069 sem_t lock;
00070 #endif
00071
00072 }dynlist;
00073
00079 dynlist createlist(int itemsize);
00080
00086 void *newitem(dynlist *list);
00087
00093 void *getitem(dynlist *list,
00094 int i );
00095
00101 void eraseitem(dynlist *list,
00102 int i);
00103
00109 void clearlist(dynlist *list);
00110
00116 long getsize(dynlist list);
00117
00123 long getlen(dynlist list);
00124
00130 void *compile(dynlist list);
00131
00137 void swap(dynlist *list,
00138 int i,
00139 int j);
00140
00146 void reverse(dynlist *list);
00147
00148
00154 void additem(dynlist *list,
00155 void *item,
00156 int i);
00157
00163 void appenditem(dynlist *list,
00164 void *item);
00165
00171 void catlists(dynlist *list1,
00172 dynlist *list2);
00173
00179 dynlist splitlist(dynlist *list,
00180 int i);
00181
00187 dynlist decompile(void *data,
00188 int itemsize,
00189 int num);
00190
00196 void sortlist(dynlist *list,
00197 int (*func)(void*, void*));
00198
00200 dynlistitem *getdl(dynlist *list, int i);
00201
00202 #endif