summaryrefslogtreecommitdiff
path: root/dlist.h
diff options
context:
space:
mode:
authorAndrey Hristov <andrey@php.net>1999-07-19 18:58:44 +0000
committerAndrey Hristov <andrey@php.net>1999-07-19 18:58:44 +0000
commit851ee7b598e4e3c03d6635a4ea9ed8d78dc071d6 (patch)
tree7907feffc0cecf350852392cd6f38e96f9d760b8 /dlist.h
parentc1853b5628e61397ef74d48dc377b0f1c49dcaa4 (diff)
downloadphp-git-851ee7b598e4e3c03d6635a4ea9ed8d78dc071d6.tar.gz
Moving dlist stuff into core.
Diffstat (limited to 'dlist.h')
-rw-r--r--dlist.h137
1 files changed, 137 insertions, 0 deletions
diff --git a/dlist.h b/dlist.h
new file mode 100644
index 0000000000..7381bb6554
--- /dev/null
+++ b/dlist.h
@@ -0,0 +1,137 @@
+/****************************************************************************
+*
+* Copyright (C) 1991 Kendall Bennett.
+* All rights reserved.
+*
+* Filename: $RCSfile$
+* Version: $Revision$
+*
+* Language: ANSI C
+* Environment: any
+*
+* Description: Header file for doubly linked list routines.
+*
+* $Id$
+*
+* Revision History:
+* -----------------
+*
+* $Log$
+* Revision 1.1 1999/04/21 23:11:20 ssb
+* moved apache, com and hyperwave into ext/
+*
+* Revision 1.1.1.1 1999/04/07 21:03:20 zeev
+* PHP 4.0
+*
+* Revision 1.1.1.1 1999/03/17 04:29:11 andi
+* PHP4
+*
+* Revision 1.1.1.1 1998/12/21 07:56:22 andi
+* Trying to start the zend CVS tree
+*
+* Revision 1.2 1998/08/14 15:51:12 shane
+* Some work on getting hyperwave to work on windows. hg_comm needs a lot of work.
+*
+* Mainly, signals, fnctl, bzero, bcopy, etc are not portable functions. Most of this
+* will have to be rewriten for windows.
+*
+* Revision 1.1 1998/08/12 09:29:16 steinm
+* First version of Hyperwave module.
+*
+* Revision 1.5 91/12/31 19:40:54 kjb
+*
+* Modified include files directories.
+*
+* Revision 1.4 91/09/27 03:10:41 kjb
+* Added compatibility with C++.
+*
+* Revision 1.3 91/09/26 10:07:16 kjb
+* Took out extern references
+*
+* Revision 1.2 91/09/01 19:37:20 ROOT_DOS
+* Changed DLST_TAIL macro so that it returns a pointer to the REAL last
+* node of the list, not the dummy last node (l->z).
+*
+* Revision 1.1 91/09/01 18:38:23 ROOT_DOS
+* Initial revision
+*
+****************************************************************************/
+
+#ifndef __DLIST_H
+#define __DLIST_H
+
+#ifndef __DEBUG_H
+/*#include "debug.h"*/
+#endif
+
+/*---------------------- Macros and type definitions ----------------------*/
+
+typedef struct PHP_DLST_BUCKET {
+ struct PHP_DLST_BUCKET *next;
+ struct PHP_DLST_BUCKET *prev;
+ } PHP_DLST_BUCKET;
+
+/* necessary for AIX 4.2.x */
+
+#ifdef hz
+#undef hz
+#endif
+
+typedef struct {
+ int count; /* Number of elements currently in list */
+ PHP_DLST_BUCKET *head; /* Pointer to head element of list */
+ PHP_DLST_BUCKET *z; /* Pointer to last node of list */
+ PHP_DLST_BUCKET hz[2]; /* Space for head and z nodes */
+ } DLIST;
+
+/* Return a pointer to the user space given the address of the header of
+ * a node.
+ */
+
+#define PHP_DLST_USERSPACE(h) ((void*)((PHP_DLST_BUCKET*)(h) + 1))
+
+/* Return a pointer to the header of a node, given the address of the
+ * user space.
+ */
+
+#define PHP_DLST_HEADER(n) ((PHP_DLST_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 PHP_DLST_HEAD(l) PHP_DLST_USERSPACE((l)->head)
+
+/* Return a pointer to the user space of the last node in list. */
+
+#define PHP_DLST_TAIL(l) PHP_DLST_USERSPACE((l)->z->prev)
+
+/* Determine if a list is empty
+ */
+
+#define PHP_DLST_EMPTY(l) ((l)->count == 0)
+
+/*-------------------------- Function Prototypes --------------------------*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void *dlst_newnode(int size);
+void dlst_freenode(void *node);
+DLIST *dlst_init(void);
+void dlst_kill(DLIST *l,void (*freeNode)(void *node));
+void dlst_insertafter(DLIST *l,void *node,void *after);
+void *dlst_deletenext(DLIST *l,void *node);
+void *dlst_first(DLIST *l);
+void *dlst_last(DLIST *l);
+void *dlst_next(void *prev);
+void *dlst_prev(void *next);
+void dlst_mergesort(DLIST *l,int (*cmp_func)(void*,void*));
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif