about summary refs log tree commit diff stats
path: root/WWW/Library/Implementation/HTList.h
diff options
context:
space:
mode:
authorThomas E. Dickey <dickey@invisible-island.net>2011-06-11 13:06:08 -0400
committerThomas E. Dickey <dickey@invisible-island.net>2011-06-11 13:06:08 -0400
commitf06f1fc3d95167ec780cb0963548f2afdd548b20 (patch)
tree6c12f0dea0a3c860994a46c37d7f32336d39d7db /WWW/Library/Implementation/HTList.h
parent279010bc0791556e63b4951d83a2c45252142b80 (diff)
downloadlynx-snapshots-f06f1fc3d95167ec780cb0963548f2afdd548b20.tar.gz
snapshot of project "lynx", label v2-8-8dev_8m
Diffstat (limited to 'WWW/Library/Implementation/HTList.h')
-rw-r--r--WWW/Library/Implementation/HTList.h142
1 files changed, 142 insertions, 0 deletions
diff --git a/WWW/Library/Implementation/HTList.h b/WWW/Library/Implementation/HTList.h
new file mode 100644
index 00000000..93f91473
--- /dev/null
+++ b/WWW/Library/Implementation/HTList.h
@@ -0,0 +1,142 @@
+
+/*              List object
+ *
+ *      The list object is a generic container for storing collections
+ *      of things in order.
+ */
+#ifndef HTLIST_H
+#define HTLIST_H
+
+#ifndef HTUTILS_H
+#include <HTUtils.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+    typedef struct _HTList HTList;
+
+    struct _HTList {
+	void *object;
+	HTList *next;
+    };
+
+/*	Fast macro to traverse a list.  Call it first with copy of the list
+ *	header.  It returns the first object and increments the passed list
+ *	pointer.  Call it with the same variable until it returns NULL.
+ */
+#define HTList_nextObject(me) \
+	((me) && ((me) = (me)->next) ? (me)->object : NULL)
+
+/*	Macro to find object pointed to by the head (returns NULL
+ *	if list is empty, OR if it doesn't exist - Yuk!)
+ */
+#define HTList_lastObject(me) \
+	((me) && (me)->next ? (me)->next->object : NULL)
+
+/*	Macro to check if a list is empty (or doesn't exist - Yuk!)
+*/
+#define HTList_isEmpty(me) ((me) ? ((me)->next == NULL) : YES)
+
+/*	Create list.
+*/
+    extern HTList *HTList_new(void);
+
+/*	Delete list.
+*/
+    extern void HTList_delete(HTList *me);
+
+/*	Reverse a list.
+*/
+    extern HTList *HTList_reverse(HTList *start);
+
+/*	Append two lists, making second list empty.
+*/
+    extern HTList *HTList_appendList(HTList *start,
+				     HTList *tail);
+
+/*      Add object to START of list (so it is pointed to by the head).
+*/
+    extern void HTList_addObject(HTList *me,
+				 void *newObject);
+
+/*      Append object to END of list (furthest from the head).
+*/
+    extern void HTList_appendObject(HTList *me,
+				    void *newObject);
+
+/*	Insert an object into the list at a specified position.
+ *      If position is 0, this places the object at the head of the list
+ *      and is equivalent to HTList_addObject().
+ */
+    extern void HTList_insertObjectAt(HTList *me,
+				      void *newObject,
+				      int pos);
+
+/*	Remove specified object from list.
+*/
+    extern BOOL HTList_removeObject(HTList *me,
+				    void *oldObject);
+
+/*	Remove object at a given position in the list, where 0 is the
+ *	object pointed to by the head (returns a pointer to the element
+ *	(->object) for the object, and NULL if the list is empty, or
+ *	if it doesn't exist - Yuk!).
+ */
+    extern void *HTList_removeObjectAt(HTList *me,
+				       int position);
+
+/*	Remove object from START of list (the Last one inserted
+ *	via HTList_addObject(), and pointed to by the head).
+ */
+    extern void *HTList_removeLastObject(HTList *me);
+
+/*	Remove object from END of list (the First one inserted
+ *	via HTList_addObject(), and furthest from the head).
+ */
+    extern void *HTList_removeFirstObject(HTList *me);
+
+/*	Determine total number of objects in the list,
+ *	not counting the head.
+ */
+    extern int HTList_count(HTList *me);
+
+/*	Determine position of an object in the list (a value of 0
+ *	means it is pointed to by the head; returns -1 if not found).
+ */
+    extern int HTList_indexOf(HTList *me,
+			      void *object);
+
+/*	Return pointer to the object at a specified position in the list,
+ *	where 0 is the object pointed to by the head (returns NULL if
+ *	the list is empty, or if it doesn't exist - Yuk!).
+ */
+    extern void *HTList_objectAt(HTList *me,
+				 int position);
+
+/*      Link object to START of list (so it is pointed to by the head).
+ *
+ *      Unlike HTList_addObject(), it does not malloc memory for HTList entry,
+ *	it use already allocated memory which should not be free'd by any
+ *	list operations (optimization).
+ */
+    extern void HTList_linkObject(HTList *me,
+				  void *newObject,
+				  HTList *newNode);
+
+/*	Unlink object from START of list (the Last one inserted
+ *	via HTList_linkObject(), and pointed to by the head).
+ *	It does not free memory.
+ */
+    extern void *HTList_unlinkLastObject(HTList *me);
+
+/*	Unlink specified object from list.
+ *	It does not free memory.
+ */
+    extern BOOL HTList_unlinkObject(HTList *me,
+				    void *oldObject);
+
+#ifdef __cplusplus
+}
+#endif
+#endif				/* HTLIST_H */