4 cdi_list_t
cdi_list_create(void)
6 return calloc(1, sizeof(struct cdi_list
));
9 void cdi_list_destroy(cdi_list_t list
)
12 struct cdi_list_element
*next
= list
->first
->next
;
20 cdi_list_t
cdi_list_push(cdi_list_t list
, void *value
)
22 struct cdi_list_element
*new = calloc(1, sizeof(*new));
26 new->next
= list
->first
;
34 void *cdi_list_pop(cdi_list_t list
)
36 struct cdi_list_element
*first
= list
->first
;
38 list
->first
= first
->next
;
43 if (list
->cached_index
) {
51 void *data
= first
->data
;
57 size_t cdi_list_empty(cdi_list_t list
)
62 void *cdi_list_get(cdi_list_t list
, size_t index
)
64 struct cdi_list_element
*ele
;
66 if (list
->cached_index
&& index
>= list
->cached_index
) {
68 for (size_t i
= list
->cached_index
; i
< index
&& ele
; i
++) {
73 for (size_t i
= 0; i
< index
&& ele
; i
++) {
82 list
->cached_index
= index
;
88 cdi_list_t
cdi_list_insert(cdi_list_t list
, size_t index
, void *value
)
90 struct cdi_list_element
*new, *ele
;
93 return cdi_list_push(list
, value
);
96 new = calloc(1, sizeof(*new));
99 if (list
->cached_index
&& index
> list
->cached_index
) {
101 for (size_t i
= list
->cached_index
; i
< index
- 1 && ele
; i
++) {
106 for (size_t i
= 0; i
< index
- 1 && ele
; i
++) {
117 list
->cached_index
= index
- 1;
121 new->next
= ele
->next
;
124 if (index
== 1 && list
->cached_index
) {
125 list
->cached_index
++;
133 void *cdi_list_remove(cdi_list_t list
, size_t index
)
135 struct cdi_list_element
*ele
, *old
;
138 return cdi_list_pop(list
);
141 if (list
->cached_index
&& index
> list
->cached_index
) {
143 for (size_t i
= list
->cached_index
; i
< index
- 1 && ele
; i
++) {
148 for (size_t i
= 0; i
< index
- 1 && ele
; i
++) {
153 if (!ele
|| !ele
->next
) {
158 list
->cached_index
--;
160 list
->cached_index
= index
- 1;
165 ele
->next
= old
->next
;
169 void *data
= old
->data
;
175 size_t cdi_list_size(cdi_list_t list
)