struct mill_slist_item {struct mill_slist_item *next;};struct mill_slist {struct mill_slist_item *first;struct mill_slist_item *last;};/* Initialise the list. To statically initialise the list use = {0}. */voidmill_slist_init(struct mill_slist *self);/* True is the list has no items. */#definemill_slist_empty(self) (!((self)->first))/* Returns iterator to the first item in the list or NULL if the list is empty. */#definemill_slist_begin(self) ((self)->first)/* Returns iterator to one past the item pointed to by 'it'. If there are no more items returns NULL. */#definemill_slist_next(it) ((it)->next)/* Push the item to the beginning of the list. */voidmill_slist_push(struct mill_slist *self,struct mill_slist_item *item);/* Push the item to the end of the list. */voidmill_slist_push_back(struct mill_slist *self,struct mill_slist_item *item);/* Pop an item from the beginning of the list. */struct mill_slist_item *mill_slist_pop(struct mill_slist *self);