DEFINITION MODULE DblLnkLists;
(*******************************************************************
Module DblLnkLists (Version 1.0)
Copyright (c) 1998-2006 by Andreas Fischlin and ETH Zurich.
Purpose Most basic routines for dynamic, doubly linked lists.
Remarks Does not install a terminate procedure.
Programming
o Design
Andreas Fischlin 03/05/1998
o Implementation
Andreas Fischlin 03/05/1998
ETH Zurich
Systems Ecology
CHN E 35.1
Universitaetstrasse 16
8092 Zurich
SWITZERLAND
URLs:
<mailto:RAMSES@env.ethz.ch>
<http://www.sysecol.ethz.ch>
<http://www.sysecol.ethz.ch/SimSoftware/RAMSES>
Last revision of definition: 03/05/1998 AF
*******************************************************************)
FROM SYSTEM IMPORT ADDRESS;
TYPE
EnclosingItemPtr = ADDRESS;
DMLevel = CARDINAL;
ListItemRec = RECORD
lev: DMLevel;
prev,next: EnclosingItemPtr;
END;
(*
These module assumes you will define your enclosing data
structure as this:
EnclosingItemPtr = POINTER TO EnclosingItemRec;
EnclosingItemRec = RECORD
li: ListItemRec; (* must be 1st field! *)
yourfields: ...
...
END;
This means the doubly linking of the list items must be done
by declaring as the first field in your data structure a
field of type ListItemRec.
*)
VAR
nilItemRec: ListItemRec; (* read only *)
PROCEDURE AddToList(q: EnclosingItemPtr; VAR root,tail: EnclosingItemPtr);
PROCEDURE RemoveFromList(q: EnclosingItemPtr; VAR root,tail: EnclosingItemPtr);
PROCEDURE ListItemExists(q,root: EnclosingItemPtr): BOOLEAN;
(* works simply if ListItemRec is first field in enclosing item's RECORD *)
END DblLnkLists.