Main Page | Modules | Data Structures | File List | Data Fields | Related Pages

linklist.h

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  * public defines
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  * public structs
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  * public methods
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  * private methods
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 

Generated on Wed Mar 30 13:43:26 2005 for Mntd by  doxygen 1.3.9.1