summaryrefslogtreecommitdiff
path: root/xpp/xtalk/xlist.h
diff options
context:
space:
mode:
Diffstat (limited to 'xpp/xtalk/xlist.h')
-rw-r--r--xpp/xtalk/xlist.h29
1 files changed, 29 insertions, 0 deletions
diff --git a/xpp/xtalk/xlist.h b/xpp/xtalk/xlist.h
new file mode 100644
index 0000000..4f7f818
--- /dev/null
+++ b/xpp/xtalk/xlist.h
@@ -0,0 +1,29 @@
+#ifndef XLIST_H
+#define XLIST_H
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+struct xlist_node {
+ void *data;
+ struct xlist_node *next;
+ struct xlist_node *prev;
+};
+
+typedef void (*xlist_destructor_t)(void *data);
+
+struct xlist_node *xlist_new(void *data);
+void xlist_destroy(struct xlist_node *list, xlist_destructor_t destructor);
+void xlist_append_item(struct xlist_node *list, struct xlist_node *item);
+void xlist_remove_item(struct xlist_node *item);
+struct xlist_node *xlist_shift(struct xlist_node *list);
+int xlist_empty(const struct xlist_node *list);
+size_t xlist_length(const struct xlist_node *list);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* XLIST_H */