diff options
| author | John Vogel <jvogel4@stny.rr.com> | 2024-07-07 12:06:29 -0400 |
|---|---|---|
| committer | John Vogel <jvogel4@stny.rr.com> | 2024-07-07 12:06:29 -0400 |
| commit | e641fea471c85d267a22ac9ee431d07e4a5c8701 (patch) | |
| tree | 7704a7c5fc3a51dd646352aae435ff087ba0a431 /libqueue/queue/sq.h | |
| parent | fa77c0dd7f3ce3f69c405ae9535941ffeff478ae (diff) | |
| download | my-aports-e641fea471c85d267a22ac9ee431d07e4a5c8701.tar.gz | |
local/libqueue: new aport
Diffstat (limited to 'libqueue/queue/sq.h')
| -rw-r--r-- | libqueue/queue/sq.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/libqueue/queue/sq.h b/libqueue/queue/sq.h new file mode 100644 index 0000000..e0a22cf --- /dev/null +++ b/libqueue/queue/sq.h @@ -0,0 +1,49 @@ +/* vim: set ts=4 sw=4 ai: + * sq.h -- singly linked queue implementation derived from NetBSD's queue.h + */ + +#ifndef SQ_H +#define SQ_H + +struct sqe { + void *data; + struct sqe *next; +}; + +struct sqh { + struct sqe *first; + struct sqe **last; +}; + +#define sq_first(hd) ((hd)->first) +#define sq_last(hd) (*(((struct sqh *)(void *)((hd)->last))->last)) +#define sq_next(e) ((e)->next) +#define sq_empty(hd) (((hd)->first) == NULL) +#define sq_init(hd) do { \ + (hd)->first = NULL; \ + (hd)->last = &(hd)->first; \ +} while (0) + +#define sq_foreach(var,head) \ + for ((var) = ((head)->first); \ + (var) != NULL; \ + (var) = ((var)->next)) + +#define sq_foreach_safe(var,head,vnext) \ + for ((var) = ((head)->first); \ + (var) != NULL && ((vnext) = sq_next((var)), 1); \ + (var) = (vnext)) + +struct sqh *sq_new(void); +struct sqe *sq_elem_new(void *); +void sq_insert_head(struct sqh *, struct sqe *); +void sq_insert_tail(struct sqh *, struct sqe *); +void sq_insert_after(struct sqh *, struct sqe *, struct sqe *); +void sq_remove_head(struct sqh *); +void sq_remove_after(struct sqh *, struct sqe *); +void sq_remove(struct sqh *, struct sqe *); +void sq_concat(struct sqh *, struct sqh *); +void sq_cleanup(struct sqh *, void (*)(void *)); +struct sqe *sq_find_from_data(struct sqh *, const void *, int (*)(const void *, const void *)); + +#endif/*!SQ_H*/ |
