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