00001
00011 #ifndef __CHASH_LIST_H__
00012 #define __CHASH_LIST_H__
00013
00014 #ifdef HAVE_CONFIG_H
00015 #include "config.h"
00016 #endif
00017
00018 #include <stdlib.h>
00019 #include <stdio.h>
00020 #include <string.h>
00021 #include "threading.h"
00022 #include "errmanager.h"
00023
00024
00025
00026
00027
00028
00029 #define list_size(list) ((list)->size)
00030 #define list_head(list) ((list)->head)
00031 #define list_tail(list) ((list)->tail)
00032 #define list_is_head(list, element) ((element) == (list)->head ? 1 : 0)
00033 #define list_is_tail(element) ((element)->next == NULL ? 1 : 0)
00034 #define list_data(element) ((element)->data)
00035 #define list_next(element) ((element)->next)
00038
00039
00040
00041
00042
00046 typedef struct ListElmt_ {
00047 void *data;
00048 struct ListElmt_ *next;
00049 } ListElmt;
00050
00051
00055 typedef struct List_ {
00056 T_RDWR rwlock;
00057 int size;
00067 int (*match)(const void *key1, const void *key2);
00068
00073 void (*destroy)(void *data);
00074
00075 ListElmt *head;
00076 ListElmt *tail;
00077 } List;
00078
00079
00080
00081
00082
00083
00084
00093 void list_init(List *list, int (*match)(const void *key1, const void *key2), void (*destroy)(void *data));
00094
00095
00102 void list_destroy(List *list);
00103
00104
00111 int list_getsize(List *list);
00112
00113
00121 int list_insert(List *list, void *data);
00122
00123
00131 int list_lookup(List *list, void **data);
00132
00143 int list_foreach_match(List *list, int (*matchfunc)(const void *key1, const void *key2), void (*cbfunc)(const void *data), void **data);
00144
00145
00155 int list_for_each_call(List *list, int (*func)(void *data, void *userdata), void *userdata);
00156
00157
00167 int list_remove_each_if_func_eq_1(List *list, int (*func)(void *data, void *userdata), void *userdata);
00168
00169
00177 int list_remove(List *list, void **data);
00178
00179
00180
00181
00182
00183
00184
00194 int list_ins_next(List *list, ListElmt *element, const void *data);
00195
00196
00206 int list_rem_next(List *list, ListElmt *element, void **data);
00207
00208
00217 int stringMatchFunction(const void *key1, const void *key2);
00218
00219
00226 void stringFreeFunction(void *ptr);
00227
00228
00237 int list_internal_lookup(List *list, void **data);
00238
00239
00240 #endif
00241
00242