aboutsummaryrefslogtreecommitdiff
path: root/list/include/list.h
blob: b00b48bbd2d619e08bcf780fa1e82a5802994adc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/// A doubly linked list.
///
/// This list does not hold user data. Instead, the list can be used as an
/// intrusive list or as part as a more complex data structure.
#pragma once

#include <stddef.h>

typedef struct list list;

typedef struct list {
  list* prev;
  list* next;
} list;

/// Create a new list from an array of `size` items.
void list_make(list* list, size_t size);

/// Iterates over all the items in the list.
#define list_foreach(LIST, iter)                                               \
  for (struct list* iter = LIST; iter; iter = iter->next)