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.