00001 #ifndef __LINKED_LIST_H 00002 #define __LINKED_LIST_H 00003 00004 00016 #include <stdlib.h> 00017 #include <stdio.h> 00018 #include <unistd.h> 00019 #include <pthread.h> 00020 00021 00027 struct node{ 00028 void *data; 00029 struct node *prev; 00030 struct node *next; 00031 }; 00032 typedef struct node node_t; 00033 00034 00035 struct linked_list{ 00036 size_t elements; 00037 size_t max_elements; 00038 node_t *head_of_list; 00039 pthread_mutex_t list_mutex; 00040 }; 00041 typedef struct linked_list linked_list_t; 00042 00043 00044 int linked_list_init(linked_list_t **new_linked_list, 00045 size_t max_elements); 00046 00047 int linked_list_destroy(linked_list_t *list_to_destroy); 00048 00049 int linked_list_insert(linked_list_t *new_linked_list, 00050 int (generic_search_w_key)(), 00051 void *search_key, 00052 void *data_to_add); 00053 00054 void *linked_list_remove(linked_list_t *new_linked_list, 00055 int (generic_search_w_key)(), 00056 void *search_key); 00057 00058 void *linked_list_search(linked_list_t *new_linked_list, 00059 int (generic_search_w_key)(), 00060 void *search_key); 00061 00062 void *linked_list_rand_search(linked_list_t *new_linked_list, 00063 int (generic_search_wo_key)()); 00064 00065 00066 00067 int linked_list_process_node(linked_list_t *new_linked_list, 00068 int (generic_search_w_key)(), 00069 void *search_key, 00070 int (generic_processing)(), 00071 void *args); 00072 00073 int linked_list_process_all(linked_list_t *new_linked_list, 00074 int (generic_process)(), void *args); 00075 00076 00077 void *linked_list_compare_all(linked_list_t *new_linked_list, 00078 int (generic_compare_nodes)(), 00079 void *args); 00080 00084 #endif