libdatatypes 0.3.2
Abstract datatypes for C.
Loading...
Searching...
No Matches
list.h File Reference

Doubly-linked list. More...

#include <stdint.h>
#include <stdbool.h>
#include "datatypes.h"
#include "pool.h"

Go to the source code of this file.

Data Structures

struct  ListItem
 Structure holding a list item. More...
 
struct  List
 Doubly-linked list. More...
 

Macros

#define list_item_next(item)   item->next
 
#define list_item_prev(item)   item->prev
 
#define list_item_get_data(item)   item->data
 
#define list_item_set_data(item, value)   item->data = value
 

Functions

Listlist_new (CompareFunc compare, FreeFunc free, Pool *pool)
 
void list_init (List *list, CompareFunc compare, FreeFunc free, Pool *pool)
 
void list_destroy (List *list)
 
void list_free (List *list)
 
ListItemlist_append (List *list, void *data)
 
ListItemlist_prepend (List *list, void *data)
 
ListItemlist_insert_sorted (List *list, void *data)
 
ListItemlist_head (const List *list)
 
ListItemlist_tail (const List *list)
 
size_t list_count (const List *list)
 
bool list_empty (const List *list)
 
void list_remove (List *list, ListItem *item)
 
void list_remove_by_data (List *list, void *data, bool remove_all)
 
void * list_pop (List *list)
 
bool list_contains (const List *list, const void *data)
 
void list_clear (List *list)
 
ListItemlist_find (const List *list, ListItem *offset, void const *data)
 
void list_item_free_data (const List *list, ListItem *item)
 

Detailed Description

Doubly-linked list.

Author
Sebastian Fedrau sebas.nosp@m.tian.nosp@m..fedr.nosp@m.au@g.nosp@m.mail..nosp@m.com

Definition in file list.h.


Data Structure Documentation

◆ ListItem

struct ListItem

Structure holding a list item.

Definition at line 35 of file list.h.

Data Fields
void * data

Stored data.

struct _ListItem * next

Pointer to next list item.

struct _ListItem * prev

Pointer to previous list item.

◆ List

struct List

Doubly-linked list.

Definition at line 49 of file list.h.

Data Fields
CompareFunc compare

Function to compare data of two list items.

size_t count

Number of stored items.

FreeFunc free

Function to free item data.

ListItem * head

Head of the list.

Pool * pool

A memory pool for creating new list items.

ListItem * tail

Tail of the list.

Macro Definition Documentation

◆ list_item_get_data

#define list_item_get_data (   item)    item->data

Gets data of the specified ListItem.

Definition at line 216 of file list.h.

◆ list_item_next

#define list_item_next (   item)    item->next

Gets next list item.

Definition at line 210 of file list.h.

◆ list_item_prev

#define list_item_prev (   item)    item->prev

Gets previous list item.

Definition at line 213 of file list.h.

◆ list_item_set_data

#define list_item_set_data (   item,
  value 
)    item->data = value

Sets data of the specified ListItem.

Definition at line 219 of file list.h.

Function Documentation

◆ list_append()

ListItem * list_append ( List list,
void *  data 
)
Parameters
lista List
datadata to append
Returns
a new ListItem

Appends data to the list.

Definition at line 133 of file list.c.

◆ list_clear()

void list_clear ( List list)
Parameters
lista List

Clears a list.

Definition at line 402 of file list.c.

◆ list_contains()

bool list_contains ( const List list,
const void *  data 
)
Parameters
lista List
datadata
Returns
true if data exists in list

Tests if a list contains the specified data.

Definition at line 393 of file list.c.

◆ list_count()

size_t list_count ( const List list)
Parameters
lista List
Returns
number of items

Gets the number of items.

Definition at line 438 of file list.c.

◆ list_destroy()

void list_destroy ( List list)
Parameters
lista List

Frees all items in the list and the list pointer.

Definition at line 98 of file list.c.

◆ list_empty()

bool list_empty ( const List list)
Parameters
lista List
Returns
true if list is empty

Checks if a list is empty.

Definition at line 446 of file list.c.

◆ list_find()

ListItem * list_find ( const List list,
ListItem offset,
void const *  data 
)
Parameters
lista List
offsetposition to start search from
datadata to search
Returns
found ListItem or NULL

Searches for the specified data.

Definition at line 414 of file list.c.

◆ list_free()

void list_free ( List list)
Parameters
lista List

Frees all items in the list without freeing the list pointer.

Definition at line 81 of file list.c.

◆ list_head()

ListItem * list_head ( const List list)
Parameters
lista List
Returns
head of the list

Gets the head of the list.

Definition at line 422 of file list.c.

◆ list_init()

void list_init ( List list,
CompareFunc  compare,
FreeFunc  free,
Pool pool 
)
Parameters
lista List
comparefunction to compare item data
freefunction to free item data or NULL
poola user-defined memory pool for creating/destroying ListItems or NULL

Initializes a List.

Definition at line 48 of file list.c.

◆ list_insert_sorted()

ListItem * list_insert_sorted ( List list,
void *  data 
)
Parameters
lista List
datadata to insert
Returns
a new ListItem

Inserts data into list using the associated compare function to determine its position.

Definition at line 228 of file list.c.

◆ list_item_free_data()

void list_item_free_data ( const List list,
ListItem item 
)
Parameters
lista List
itema ListItem

Sets the associated list item data to NULL and frees its memory.

Definition at line 454 of file list.c.

◆ list_new()

List * list_new ( CompareFunc  compare,
FreeFunc  free,
Pool pool 
)
Parameters
comparefunction to compare item data
freefunction to free item data or NULL
poola user-defined memory pool for creating/destroying ListItems or NULL
Returns
a new List

Creates a new List.

Definition at line 30 of file list.c.

◆ list_pop()

void * list_pop ( List list)
Parameters
lista List
Returns
list item data

Removes first element from list and returns its associated data.

Definition at line 322 of file list.c.

◆ list_prepend()

ListItem * list_prepend ( List list,
void *  data 
)
Parameters
lista List
datadata to prepend
Returns
a new ListItem

Prepends data to the list.

Definition at line 163 of file list.c.

◆ list_remove()

void list_remove ( List list,
ListItem item 
)
Parameters
lista List
itema ListItem

Removes a list item from the list.

Definition at line 285 of file list.c.

◆ list_remove_by_data()

void list_remove_by_data ( List list,
void *  data,
bool  remove_all 
)
Parameters
lista List
datadata
remove_alltrue to remove all items with associated data

Removes first list item (or all items) with associated data from the list.

Definition at line 298 of file list.c.

◆ list_tail()

ListItem * list_tail ( const List list)
Parameters
lista List
Returns
tail of the list

Gets the tail of the list.

Definition at line 430 of file list.c.