⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dllist.h

📁 PostgreSQL 8.1.4的源码 适用于Linux下的开源数据库系统
💻 H
字号:
/*------------------------------------------------------------------------- * * dllist.h *		simple doubly linked list primitives *		the elements of the list are void* so the lists can contain anything *		Dlelem can only be in one list at a time * * *	 Here's a small example of how to use Dllists: * *	 Dllist *lst; *	 Dlelem *elt; *	 void	*in_stuff;	  -- stuff to stick in the list *	 void	*out_stuff * *	 lst = DLNewList();				   -- make a new dllist *	 DLAddHead(lst, DLNewElem(in_stuff)); -- add a new element to the list *											 with in_stuff as the value *	  ... *	 elt = DLGetHead(lst);			   -- retrieve the head element *	 out_stuff = (void*)DLE_VAL(elt);  -- get the stuff out *	 DLRemove(elt);					   -- removes the element from its list *	 DLFreeElem(elt);				   -- free the element since we don't *										  use it anymore * * * It is also possible to use Dllist objects that are embedded in larger * structures instead of being separately malloc'd.  To do this, use * DLInitElem() to initialize a Dllist field within a larger object. * Don't forget to DLRemove() each field from its list (if any) before * freeing the larger object! * * * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * $PostgreSQL: pgsql/src/include/lib/dllist.h,v 1.25 2005/10/15 02:49:44 momjian Exp $ * *------------------------------------------------------------------------- */#ifndef DLLIST_H#define DLLIST_Hstruct Dllist;struct Dlelem;typedef struct Dlelem{	struct Dlelem *dle_next;	/* next element */	struct Dlelem *dle_prev;	/* previous element */	void	   *dle_val;		/* value of the element */	struct Dllist *dle_list;	/* what list this element is in */} Dlelem;typedef struct Dllist{	Dlelem	   *dll_head;	Dlelem	   *dll_tail;} Dllist;extern Dllist *DLNewList(void); /* allocate and initialize a list header */extern void DLInitList(Dllist *list);	/* init a header alloced by caller */extern void DLFreeList(Dllist *list);	/* free up a list and all the nodes in										 * it */extern Dlelem *DLNewElem(void *val);extern void DLInitElem(Dlelem *e, void *val);extern void DLFreeElem(Dlelem *e);extern void DLRemove(Dlelem *e);	/* removes node from list */extern void DLAddHead(Dllist *list, Dlelem *node);extern void DLAddTail(Dllist *list, Dlelem *node);extern Dlelem *DLRemHead(Dllist *list); /* remove and return the head */extern Dlelem *DLRemTail(Dllist *list);extern void DLMoveToFront(Dlelem *e);	/* move node to front of its list *//* These are macros for speed */#define DLGetHead(list)  ((list)->dll_head)#define DLGetTail(list)  ((list)->dll_tail)#define DLGetSucc(elem)  ((elem)->dle_next)#define DLGetPred(elem)  ((elem)->dle_prev)#define DLGetListHdr(elem)	((elem)->dle_list)#define DLE_VAL(elem)	((elem)->dle_val)#endif   /* DLLIST_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -