summaryrefslogtreecommitdiff
path: root/prism/util/pm_list.c
diff options
context:
space:
mode:
Diffstat (limited to 'prism/util/pm_list.c')
-rw-r--r--prism/util/pm_list.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/prism/util/pm_list.c b/prism/util/pm_list.c
new file mode 100644
index 0000000000..ad2294cd60
--- /dev/null
+++ b/prism/util/pm_list.c
@@ -0,0 +1,49 @@
+#include "prism/util/pm_list.h"
+
+/**
+ * Returns true if the given list is empty.
+ */
+PRISM_EXPORTED_FUNCTION bool
+pm_list_empty_p(pm_list_t *list) {
+ return list->head == NULL;
+}
+
+/**
+ * Returns the size of the list.
+ */
+PRISM_EXPORTED_FUNCTION size_t
+pm_list_size(pm_list_t *list) {
+ return list->size;
+}
+
+/**
+ * Append a node to the given list.
+ */
+void
+pm_list_append(pm_list_t *list, pm_list_node_t *node) {
+ if (list->head == NULL) {
+ list->head = node;
+ } else {
+ list->tail->next = node;
+ }
+
+ list->tail = node;
+ list->size++;
+}
+
+/**
+ * Deallocate the internal state of the given list.
+ */
+PRISM_EXPORTED_FUNCTION void
+pm_list_free(pm_list_t *list) {
+ pm_list_node_t *node = list->head;
+ pm_list_node_t *next;
+
+ while (node != NULL) {
+ next = node->next;
+ xfree(node);
+ node = next;
+ }
+
+ list->size = 0;
+}