From e641fea471c85d267a22ac9ee431d07e4a5c8701 Mon Sep 17 00:00:00 2001 From: John Vogel Date: Sun, 7 Jul 2024 12:06:29 -0400 Subject: local/libqueue: new aport --- libqueue/queue/sl.h | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 libqueue/queue/sl.h (limited to 'libqueue/queue/sl.h') diff --git a/libqueue/queue/sl.h b/libqueue/queue/sl.h new file mode 100644 index 0000000..168107a --- /dev/null +++ b/libqueue/queue/sl.h @@ -0,0 +1,42 @@ +/* vim: set ts=4 sw=4 ai: + * sl.h -- singly linked list implementation derived from NetBSD's queue.h + */ + +#ifndef SL_H +#define SL_H + +struct sle { + void *data; + struct sle *next; +}; + +struct slh { + struct sle *first; +}; + +#define sl_first(hd) ((hd)->first) +#define sl_next(e) ((e)->next) +#define sl_empty(hd) (((hd)->first) == NULL) +#define sl_init(hd) ((hd)->first = NULL) + +#define sl_foreach(var,head) \ + for ((var) = ((head)->first); \ + (var) != NULL; \ + (var) = ((var)->next)) + +#define sl_foreach_safe(var,head,vnext) \ + for ((var) = ((head)->first); \ + (var) != NULL && ((vnext) = sl_next((var)), 1); \ + (var) = (vnext)) + +struct slh *sl_new(void); +struct sle *sl_elem_new(void *); +void sl_insert_after(struct sle *, struct sle *); +void sl_insert_head(struct slh *, struct sle *); +void sl_remove_after(struct sle *); +void sl_remove_head(struct slh *); +void sl_remove(struct slh *, struct sle *); +void sl_cleanup(struct slh *, void (*)(void *)); +struct sle *sl_find_from_data(struct slh *, const void *, int (*)(const void *, const void *)); + +#endif/*!SL_H*/ -- cgit v1.2.3