Properties.mesa
Copyright Ó 1985, 1986, 1991 by Xerox Corporation. All rights reserved.
Created by Christian Jacobi, September 19, 1985 3:33:07 pm PDT 4:15 pm
Last edited by: Christian Jacobi, December 22, 1986 12:13:53 pm PST
Properties: CEDAR DEFINITIONS =
BEGIN
Implements property list. Uses less memory than Atom's implementation. This module has no protection against concurrent calls of PutProp. Usage is either in sequential applications or with a higher level application monitor giving protection. Other modules must not modify any PropList; a modification of a PropList while Properties is inside its monitor lock can cause disaster.
PropList: TYPE = LIST OF KeyVal;
KeyVal: TYPE = RECORD [key, val: REF];
GetProp: PROC [propList: PropList, prop: REF] RETURNS [REF];
Fetches a value from a property list; NIL if not found
PutProp: PROC [propList: PropList, prop: REF, val: REF ¬ NIL] RETURNS [PropList];
Puts a property key value pair on a property list; The property list must be written back.
A nil val value removes the property
EachProp: TYPE = PROC [key, val: REF] RETURNS [quit: BOOL¬FALSE];
Enumerate: PROC [propList: PropList, proc: EachProp] RETURNS [quit: BOOL];
Enumerates the list
Changes of the list while the enumeration is in progress may or may not be seen
CopyList: PROC [propList: PropList] RETURNS [PropList];
Makes a copy of a PropList.
END.