27 */ |
27 */ |
28 |
28 |
29 #ifndef UCX_LIST_H |
29 #ifndef UCX_LIST_H |
30 #define UCX_LIST_H |
30 #define UCX_LIST_H |
31 |
31 |
|
32 #include <stdlib.h> |
|
33 #include "allocator.h" |
|
34 |
|
35 typedef int(*CxListComparator)(void *left, void *right); |
|
36 |
|
37 typedef struct { |
|
38 CxAllocator allocator; |
|
39 CxListComparator cmpfunc; |
|
40 void *listdata; |
|
41 } cx_list; |
|
42 |
|
43 typedef int (*cx_list_add)(cx_list *list, void *elem); |
|
44 |
|
45 typedef int (*cx_list_insert)(cx_list *list, size_t index, void *elem); |
|
46 |
|
47 typedef void *(*cx_list_remove)(cx_list *list, size_t index); |
|
48 |
|
49 typedef size_t (*cx_list_find)(cx_list *list, void *elem); |
|
50 |
|
51 typedef size_t (*cx_list_size)(cx_list *list); |
|
52 |
|
53 typedef struct { |
|
54 cx_list_add add; |
|
55 cx_list_insert insert; |
|
56 cx_list_remove remove; |
|
57 cx_list_find find; |
|
58 cx_list_size size; |
|
59 } cx_list_class; |
|
60 |
|
61 struct cx_list_s { |
|
62 cx_list_class *cl; |
|
63 cx_list data; |
|
64 }; |
|
65 |
|
66 typedef struct cx_list_s *CxList; |
|
67 |
|
68 int cxListAdd(CxList list, void *elem); |
|
69 |
|
70 int cxListInsert(CxList list, size_t index, void *elem); |
|
71 |
|
72 void *cxListRemove(CxList list, size_t index); |
|
73 |
|
74 size_t cxListFind(CxList list, void *elem); |
|
75 |
|
76 size_t cxListSize(CxList list); |
|
77 |
32 #endif /* UCX_LIST_H */ |
78 #endif /* UCX_LIST_H */ |