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