summaryrefslogtreecommitdiff
path: root/include/cddb/ll.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/cddb/ll.h')
-rw-r--r--include/cddb/ll.h148
1 files changed, 148 insertions, 0 deletions
diff --git a/include/cddb/ll.h b/include/cddb/ll.h
new file mode 100644
index 00000000..9486e59f
--- /dev/null
+++ b/include/cddb/ll.h
@@ -0,0 +1,148 @@
+/*
+ $Id: ll.h,v 1.1 2005/05/29 08:24:04 airborne Exp $
+
+ Copyright (C) 2005 Kris Verbeeck <airborne@advalvas.be>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#ifndef LL_H
+#define LL_H 1
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+/* --- type definitions */
+
+
+/**
+ * Linked list element.
+ */
+typedef struct elem_s elem_t;
+
+/**
+ * Linked list.
+ */
+typedef struct list_s list_t;
+
+/**
+ * Callback prototype for destroying element data.
+ */
+typedef void elem_destroy_cb(void *data);
+
+
+/* --- construction / destruction */
+
+
+/**
+ * Creates a new linked list.
+ *
+ * @param cb The callback used to destroy the element data or NULL if
+ * no further action is required.
+ * @return The linked list structure or NULL if memory allocation failed.
+ */
+list_t *list_new(elem_destroy_cb *cb);
+
+/**
+ * Free all resources associated with the given linked list. Embedded
+ * data will be freed by use of the callback registered at list
+ * creation.
+ *
+ * @param list The linked list.
+ */
+void list_destroy(list_t *list);
+
+/**
+ * Remove all elements from the list without destroying the list
+ * itself. Embedded data will be freed by use of the callback
+ * registered at list creation.
+ *
+ * @param list The linked list.
+ */
+void list_flush(list_t *list);
+
+
+/* --- list elements --- */
+
+/**
+ * Retrieves the data associated with a list element.
+ *
+ * @param elem The list element.
+ * @return The data associated with the element or NULL if the element
+ * was invalid.
+ */
+void *element_data(elem_t *elem);
+
+
+/* --- getters & setters --- */
+
+
+/**
+ * Append a new element to the end of the list.
+ *
+ * @param list The linked list.
+ * @param data The data to append to the list.
+ * @return The list element that was appended or NULL if memory
+ * allocation fails or the list is invalid.
+ */
+elem_t *list_append(list_t *list, void *data);
+
+/**
+ * Returns the number of elements in the list.
+ *
+ * @param list The linked list.
+ * @return The number of elements.
+ */
+int list_size(list_t *list);
+
+/**
+ * Returns the list element at the specified index or NULL if the
+ * index is invalid.
+ *
+ * @param list The linked list.
+ * @param idx The element index (first = 0).
+ * @return The element or NULL if not found.
+ */
+elem_t *list_get(list_t *list, int idx);
+
+/**
+ * Returns the first list element.
+ *
+ * @param list The linked list.
+ * @return The first element or NULL if the list is empty.
+ */
+elem_t *list_first(list_t *list);
+
+/**
+ * Returns the next list element. Before using this function you
+ * should call list_first to initialize the iterator.
+ *
+ * @param list The linked list.
+ * @return The next element or NULL if not found.
+ */
+elem_t *list_next(list_t *list);
+
+
+/* --- iteration */
+
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* LL_H */