]> pd.if.org Git - lice/blobdiff - list.h
autocommit for files dated 2014-11-17 20:15:22
[lice] / list.h
diff --git a/list.h b/list.h
new file mode 100644 (file)
index 0000000..98c8971
--- /dev/null
+++ b/list.h
@@ -0,0 +1,133 @@
+#ifndef LICE_UTIL_LIST_HDR
+#define LICE_UTIL_LIST_HDR
+#include <stdbool.h>
+
+/*
+ * Macro: SENTINEL_LIST
+ *  Initialize an empty list in place
+ */
+#define SENTINEL_LIST ((list_t) { \
+        .length    = 0,           \
+        .head      = NULL,        \
+        .tail      = NULL         \
+})
+
+/*
+ * Type: list_iterator_t
+ *  A type capable of representing an itrator for a <list>
+ */
+typedef struct list_iterator_s list_iterator_t;
+
+/*
+ * Type: list_t
+ *  A standard double-linked list
+ */
+typedef struct list_s list_t;
+
+/*
+ * Function: list_create
+ *  Creates a new list
+ */
+list_t *list_create(void);
+
+/*
+ * Function: list_push
+ *  Push an element onto a list
+ */
+void list_push(list_t *list, void *element);
+
+/*
+ * Function: list_pop
+ *  Pop an element from a list
+ */
+void *list_pop(list_t *list);
+
+/*
+ * Function: list_length
+ *  Used to retrieve length of a list object
+ */
+int list_length(list_t *list);
+
+/*
+ * Function: list_shift
+ *  Like a list_pop but shift from the head (instead of the tail)
+ */
+void *list_shift(list_t *list);
+
+/*
+ * Function: list_reverse
+ *  Reverse the contents of a list
+ */
+list_t *list_reverse(list_t *list);
+
+/*
+ * Function: list_iterator
+ *  Create an iterator for a given list object
+ */
+list_iterator_t *list_iterator(list_t *list);
+
+/*
+ * Function: list_iterator_next
+ *  Increment the list iterator while returning the given element
+ */
+void *list_iterator_next(list_iterator_t *iter);
+
+/*
+ * Function: list_iterator_end
+ *  Test if the iterator is at the end of the list
+ */
+bool list_iterator_end(list_iterator_t *iter);
+
+/*
+ * Function: list_tail
+ *  Get the last element in a list
+ *
+ * Parameters:
+ *  list - The list in question to get the last element of.
+ *
+ * Returns:
+ *  The last element in the list.
+ */
+void *list_tail(list_t *list);
+
+/*
+ * Function: list_head
+ *  Get the first element in a list
+ *
+ * Parameters:
+ *  list - The list in question to get the first element of.
+ *
+ * Returns:
+ *  The first element in the list.
+ */
+void *list_head(list_t *list);
+
+/*
+ * Function: list_empty
+ *  Empty the contents of a list
+ *
+ * Parameters:
+ *  list - The list to empty the contents of.
+ */
+void list_empty(list_t *list);
+
+/*
+ * Function: list_default
+ *  Create a new list default initializing the first element with
+ *  an item.
+ *
+ * Parameters:
+ *  item - The first item to default initialize the list with.
+ *
+ * Returns:
+ *  A new list containing one element holding `item`.
+ */
+list_t *list_default(void *item);
+
+struct list_s {
+    int                 length;
+    struct list_node_s *head;
+    struct list_node_s *tail;
+};
+
+#endif