PropertyLists.mesa
Copyright © 1985, 1986 by Xerox Corporation. All rights reserved.
Christian Jacobi, September 19, 1985 3:33:07 pm PDT 4:15 pm
Christian Jacobi, March 12, 1986 8:10:42 pm PST
PropertyLists: 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: BOOLFALSE];
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
END.