36 extern "C" { |
36 extern "C" { |
37 #endif |
37 #endif |
38 |
38 |
39 typedef int(*CxListComparator)(void const *left, void const *right); |
39 typedef int(*CxListComparator)(void const *left, void const *right); |
40 |
40 |
|
41 typedef struct cx_list_s cx_list_s; |
|
42 |
41 typedef struct { |
43 typedef struct { |
|
44 int (*add)(cx_list_s *list, void *elem); |
|
45 |
|
46 int (*insert)(cx_list_s *list, size_t index, void *elem); |
|
47 |
|
48 void *(*remove)(cx_list_s *list, size_t index); |
|
49 |
|
50 size_t (*find)(cx_list_s *list, void *elem); |
|
51 |
|
52 void *(*last)(cx_list_s *list); |
|
53 } cx_list_class; |
|
54 |
|
55 struct cx_list_s { |
|
56 cx_list_class *cl; |
42 CxAllocator allocator; |
57 CxAllocator allocator; |
43 CxListComparator cmpfunc; |
58 CxListComparator cmpfunc; |
44 size_t itemsize; |
59 size_t itemsize; |
45 size_t size; |
60 size_t size; |
46 size_t capacity; |
61 size_t capacity; |
47 char listdata[]; |
62 }; |
48 } cx_list; |
|
49 |
|
50 typedef struct { |
|
51 int (*add)(cx_list *list, void *elem); |
|
52 |
|
53 int (*insert)(cx_list *list, size_t index, void *elem); |
|
54 |
|
55 void *(*remove)(cx_list *list, size_t index); |
|
56 |
|
57 size_t (*find)(cx_list *list, void *elem); |
|
58 |
|
59 void *(*last)(cx_list *list); |
|
60 } cx_list_class; |
|
61 |
|
62 typedef struct { |
|
63 cx_list_class *cl; |
|
64 cx_list data; |
|
65 } cx_list_s; |
|
66 |
63 |
67 typedef cx_list_s *CxList; |
64 typedef cx_list_s *CxList; |
68 |
65 |
69 int cxListAdd(CxList list, void *elem); |
66 int cxListAdd(CxList list, void *elem); |
70 |
67 |