diff options
author | Andrey Hristov <andrey@php.net> | 1999-07-19 18:58:44 +0000 |
---|---|---|
committer | Andrey Hristov <andrey@php.net> | 1999-07-19 18:58:44 +0000 |
commit | 851ee7b598e4e3c03d6635a4ea9ed8d78dc071d6 (patch) | |
tree | 7907feffc0cecf350852392cd6f38e96f9d760b8 /dlist.h | |
parent | c1853b5628e61397ef74d48dc377b0f1c49dcaa4 (diff) | |
download | php-git-851ee7b598e4e3c03d6635a4ea9ed8d78dc071d6.tar.gz |
Moving dlist stuff into core.
Diffstat (limited to 'dlist.h')
-rw-r--r-- | dlist.h | 137 |
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 |