summaryrefslogtreecommitdiff
path: root/libqueue/queue/sq.h
diff options
context:
space:
mode:
authorJohn Vogel <jvogel4@stny.rr.com>2024-07-07 12:06:29 -0400
committerJohn Vogel <jvogel4@stny.rr.com>2024-07-07 12:06:29 -0400
commite641fea471c85d267a22ac9ee431d07e4a5c8701 (patch)
tree7704a7c5fc3a51dd646352aae435ff087ba0a431 /libqueue/queue/sq.h
parentfa77c0dd7f3ce3f69c405ae9535941ffeff478ae (diff)
downloadmy-aports-e641fea471c85d267a22ac9ee431d07e4a5c8701.tar.gz
local/libqueue: new aport
Diffstat (limited to 'libqueue/queue/sq.h')
-rw-r--r--libqueue/queue/sq.h49
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*/