/// 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)