libdatatypes 0.3.2
Abstract datatypes for C.
Loading...
Searching...
No Matches
list.h
Go to the documentation of this file.
1/***************************************************************************
2 begin........: June 2012
3 copyright....: Sebastian Fedrau
4 email........: sebastian.fedrau@gmail.com
5 ***************************************************************************/
6
7/***************************************************************************
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License v3 as published by
10 the Free Software Foundation.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 General Public License v3 for more details.
16 ***************************************************************************/
22#ifndef LIST_H
23#define LIST_H
24
25#include <stdint.h>
26#include <stdbool.h>
27
28#include "datatypes.h"
29#include "pool.h"
30
35typedef struct _ListItem
36{
38 void *data;
40 struct _ListItem *next;
42 struct _ListItem *prev;
43} ListItem;
44
64
73List *list_new(CompareFunc compare, FreeFunc free, Pool *pool);
74
83void list_init(List *list, CompareFunc compare, FreeFunc free, Pool *pool);
84
90void list_destroy(List *list);
91
97void list_free(List *list);
98
106ListItem *list_append(List *list, void *data);
107
115ListItem *list_prepend(List *list, void *data);
116
124ListItem *list_insert_sorted(List *list, void *data);
125
132ListItem *list_head(const List *list);
133
140ListItem *list_tail(const List *list);
141
148size_t list_count(const List *list);
149
156bool list_empty(const List *list);
157
164void list_remove(List *list, ListItem *item);
165
173void list_remove_by_data(List *list, void *data, bool remove_all);
174
181void *list_pop(List *list);
182
190bool list_contains(const List *list, const void *data);
191
197void list_clear(List *list);
198
207ListItem *list_find(const List *list, ListItem *offset, void const *data);
208
210#define list_item_next(item) item->next
211
213#define list_item_prev(item) item->prev
214
216#define list_item_get_data(item) item->data
217
219#define list_item_set_data(item, value) item->data = value
220
227void list_item_free_data(const List *list, ListItem *item);
228
229#endif
230
int32_t(* CompareFunc)(const void *a, const void *b)
Definition compare.h:30
General declarations.
void(* FreeFunc)(void *p)
Definition datatypes.h:33
List * list_new(CompareFunc compare, FreeFunc free, Pool *pool)
Definition list.c:30
bool list_empty(const List *list)
Definition list.c:446
struct _ListItem * prev
Definition list.h:42
void list_init(List *list, CompareFunc compare, FreeFunc free, Pool *pool)
Definition list.c:48
ListItem * list_find(const List *list, ListItem *offset, void const *data)
Definition list.c:414
ListItem * list_prepend(List *list, void *data)
Definition list.c:163
Pool * pool
Definition list.h:62
ListItem * list_tail(const List *list)
Definition list.c:430
ListItem * list_insert_sorted(List *list, void *data)
Definition list.c:228
void list_remove_by_data(List *list, void *data, bool remove_all)
Definition list.c:298
void list_remove(List *list, ListItem *item)
Definition list.c:285
ListItem * tail
Definition list.h:54
FreeFunc free
Definition list.h:60
void * data
Definition list.h:38
size_t count
Definition list.h:56
void list_clear(List *list)
Definition list.c:402
size_t list_count(const List *list)
Definition list.c:438
ListItem * head
Definition list.h:52
void list_item_free_data(const List *list, ListItem *item)
Definition list.c:454
ListItem * list_append(List *list, void *data)
Definition list.c:133
void list_free(List *list)
Definition list.c:81
void list_destroy(List *list)
Definition list.c:98
CompareFunc compare
Definition list.h:58
void * list_pop(List *list)
Definition list.c:322
struct _ListItem * next
Definition list.h:40
bool list_contains(const List *list, const void *data)
Definition list.c:393
ListItem * list_head(const List *list)
Definition list.c:422
Doubly-linked list.
Definition list.h:50
Structure holding a list item.
Definition list.h:36
Allocate memory blocks of same sizes.
Allocate groups of equal-sized chunks of memory.
Definition pool.h:33