00001 #ifdef __cplusplus
00002 extern "C" {
00003 #endif
00004
00005 #ifndef CDSA_LIST_H
00006 #define CDSA_LIST_H
00007
00008 #include <stdio.h>
00009 #include <stdlib.h>
00010 #include <stdbool.h>
00011 #include <assert.h>
00012
00013 #include "cdsa_types.h"
00014
00026
00027
00028
00029
00030
00031
00032
00033
00042 typedef struct List List;
00043 struct List;
00044
00054 typedef struct ListNode ListNode;
00055 struct ListNode;
00056
00068 cdsa_status_t list_new(List **list, size_t size_elem, cdsa_destroy_func1_t destroy);
00069
00076 cdsa_status_t list_destroy(List **list);
00077
00087 cdsa_status_t list_is_empty(List *list, bool *is_empty);
00088
00099 cdsa_status_t list_size(List *list, size_t *size);
00100
00112 cdsa_status_t list_head(List *list, ListNode **head);
00113
00125 cdsa_status_t list_tail(List *list, ListNode **tail);
00126
00140 cdsa_status_t list_prepend(List *list, void *data, ListNode **new_node);
00141
00156 cdsa_status_t list_append(List *list, void *data, ListNode **new_node);
00157
00179 cdsa_status_t list_insert(List *list, ListNode *elem, void *data, ListNode **new_node);
00180
00195 cdsa_status_t list_remove(List *list, ListNode *elem);
00196
00213 cdsa_status_t list_search(List *list, void *data, ListNode **node);
00214
00226 cdsa_status_t listelem_data(ListNode *elem, void *ptr);
00227
00238 cdsa_status_t listelem_next(ListNode *elem, ListNode **next);
00239
00249 cdsa_status_t listelem_destroy(ListNode **elem);
00250
00251
00252 #ifdef __cplusplus
00253 }
00254 #endif
00255
00256 #endif
00257