00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef LIST_H
00025 #define LIST_H
00026
00027 #include<stdio.h>
00028 #include<stdlib.h>
00029 #include"../include/macros.h"
00030 #include"../include/rwlock.h"
00031
00032
00033
00034
00035 typedef int (*ListSearchFunc_t) (const void* key, void* element);
00036 typedef void* (*ListElemCopyFunc_t) (const void* src);
00037 typedef int (*ListElemDestroyFunc_t) (void* elem);
00038 typedef int (*ListElemGenericFunc_t) (void* elem);
00039
00040 typedef struct listNode_s{
00041
00042 void* node_data;
00043 struct listNode_s *next;
00044
00045 }listNode_t;
00046
00047 typedef listNode_t* listNode_p;
00048
00049 typedef struct list_s{
00050
00051 listNode_p listhead;
00052 int size;
00053
00054 rwlock_t* rwlock;
00055 }list_t;
00056
00057
00058 typedef list_t* list_p;
00059
00060
00061 list_p ListInitialize(void);
00062
00063 void ListTerminate(list_p list);
00064
00065 void ListClearCB(list_p list, ListElemDestroyFunc_t cb);
00066
00067
00068 int ListGetSize(list_p list);
00069 int ListAdd(list_p list, void* data);
00070 int ListAppend(list_p list, void* data);
00071 int ListInsert(list_p list, void* data, const int index);
00072
00073 list_p ListCopy(list_p list, void*(*data_copy_callback)(const void* data));
00074
00075
00076 void* ListGetHead(list_p list);
00077 void* ListPop(list_p list);
00078 void* ListSearch(list_p list, const int index);
00079 void* ListDelete(list_p list, const int index);
00080 void* ListSearchCB(list_p list, const void* key, ListSearchFunc_t cb);
00081 void* ListDeleteCB(list_p list, const void* key, ListSearchFunc_t cb);
00082 void ListWait(list_p list);
00083 int ListForEachCB(list_p list, ListElemGenericFunc_t cb);
00084
00085 void ListRDLock(list_p list);
00086 void ListRDUnlock(list_p list);
00087 void ListWRLock(list_p list);
00088 void ListWRUnlock(list_p list);
00089 void ListWRWait(list_p list);
00090
00091
00092 void ListRDWait(list_p list);
00093
00094 void ListRDtoWR(list_p list);
00095 void ListWRtoRD(list_p list);
00096
00097 #endif