WSTester updated to work plus hopefully all the other changes that need to go into...
[jabaws.git] / binaries / src / ViennaRNA / lib / list.h
diff --git a/binaries/src/ViennaRNA/lib/list.h b/binaries/src/ViennaRNA/lib/list.h
new file mode 100644 (file)
index 0000000..31fd3ce
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+  $Log: list.h,v $
+  Revision 1.2  2000/10/10 08:50:01  ivo
+  some annotation for lclint
+
+  Revision 1.1  1997/08/04 21:05:32  walter
+  Initial revision
+
+*/
+
+#ifndef        __LIST_H
+#define        __LIST_H
+
+/*---------------------- Macros and type definitions ----------------------*/
+
+typedef struct LST_BUCKET {
+  struct LST_BUCKET *next;
+}
+LST_BUCKET;
+
+typedef struct {
+  int count;                   /* Number of elements currently in list */
+  LST_BUCKET *head;            /* Pointer to head element of list      */
+  LST_BUCKET *z;               /* Pointer to last node of list         */
+  LST_BUCKET hz[2];            /* Space for head and z nodes           */
+}
+LIST;
+
+/* Return a pointer to the user space given the address of the header of
+ * a node.
+ */
+
+#define        LST_USERSPACE(h)        ((void*)((LST_BUCKET*)(h) + 1))
+
+/* Return a pointer to the header of a node, given the address of the
+ * user space.
+ */
+
+#define        LST_HEADER(n)           ((LST_BUCKET*)(n) - 1)
+
+/* Return a pointer to the user space of the list's head node. This user
+ * space does not actually exist, but it is useful to be able to address
+ * it to enable insertion at the start of the list.
+ */
+
+#define        LST_HEAD(l)             LST_USERSPACE((l)->head)
+
+/* Determine if a list is empty
+ */
+
+#define        LST_EMPTY(l)            ((l)->count == 0)
+
+/*-------------------------- Function Prototypes --------------------------*/
+
+/*@only@*//*@out@*/ void *lst_newnode (int size);
+void lst_freenode (/*@only@*/ void *node);
+/*@only@*//*@out@*/  LIST *lst_init (void);
+void lst_kill (LIST * l, void (*freeNode) ());
+void lst_insertafter (LIST * l, /*@keep@*/ void *node, void *after);
+void *lst_deletenext (/*@only@*/ LIST * l, void *node);
+/*@dependent@*/ void *lst_first (LIST * l);
+/*@dependent@*/ void *lst_next (void *prev);
+void lst_mergesort (LIST * l, int (*cmp_func) ());
+
+#endif