mirror of
https://github.com/postgres/postgres.git
synced 2026-04-02 07:46:09 -04:00
71 lines
2.4 KiB
C
71 lines
2.4 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* 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 Dllist's :
|
|
*
|
|
* 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
|
|
*
|
|
* Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* $Id: dllist.h,v 1.3 1996/11/10 03:05:16 momjian Exp $
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
|
|
#ifndef DLLIST_H
|
|
#define DLLIST_H
|
|
|
|
|
|
struct 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); /* initialize a new list */
|
|
extern void DLFreeList(Dllist*); /* free up a list and all the nodes in it*/
|
|
extern Dlelem* DLNewElem(void* val);
|
|
extern void DLFreeElem(Dlelem*);
|
|
extern Dlelem* DLGetHead(Dllist*);
|
|
extern Dlelem* DLGetTail(Dllist*);
|
|
extern void* DLGetHeadVal(Dllist*);
|
|
extern void* DLGetTailVal(Dllist*);
|
|
extern Dlelem* DLGetPred(Dlelem*); /* get predecessor */
|
|
extern Dlelem* DLGetSucc(Dlelem*); /* get successor */
|
|
extern void DLRemove(Dlelem*); /* 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); /* remove and return the tail */
|
|
|
|
#define DLE_VAL(x) (x->dle_val)
|
|
|
|
#endif /* DLLIST_H */
|