summaryrefslogtreecommitdiff
path: root/test/testutils/list.h
diff options
context:
space:
mode:
Diffstat (limited to 'test/testutils/list.h')
-rw-r--r--test/testutils/list.h70
1 files changed, 70 insertions, 0 deletions
diff --git a/test/testutils/list.h b/test/testutils/list.h
new file mode 100644
index 0000000..6b0f209
--- /dev/null
+++ b/test/testutils/list.h
@@ -0,0 +1,70 @@
+/*
+ * This file is part of libdom test suite.
+ * Licensed under the MIT License,
+ * http://www.opensource.org/licenses/mit-license.php
+ * Copyright 2007 James Shaw <jshaw@netsurf-browser.org>
+ */
+
+#ifndef list_h_
+#define list_h_
+
+#include <stdbool.h>
+
+#include "comparators.h"
+
+/* The element type in the list
+ *
+ * The high byte is used for category type
+ * The low byte is used for concrete type
+ */
+typedef enum TYPE {
+ INT = 0x0001,
+ STRING = 0x0100,
+ DOM_STRING = 0x0101,
+ NODE = 0x0200
+} TYPE;
+
+
+struct list_elt {
+ void* data;
+ struct list_elt* next;
+};
+
+typedef struct list {
+ unsigned int size;
+ TYPE type;
+ struct list_elt* head;
+ struct list_elt* tail;
+} list;
+
+struct list* list_new(TYPE type);
+void list_destroy(struct list* list);
+
+/**
+ * Add data to the tail of the list.
+ */
+void list_add(struct list* list, void* data);
+
+/**
+ * Remove element containing data from list.
+ * The list element is freed, but the caller must free the data itself
+ * if necessary.
+ *
+ * Returns true if data was found in the list.
+ */
+bool list_remove(struct list* list, void* data);
+
+struct list* list_clone(struct list* list);
+/**
+ * Tests if data is equal to any element in the list.
+ */
+bool list_contains(struct list* list, void* data,
+ comparator comparator);
+
+/**
+ * Tests if superlist contains all elements in sublist. Order is not important.
+ */
+bool list_contains_all(struct list* superList, struct list* subList,
+ comparator comparator);
+
+#endif