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