<> <> <> <> DIRECTORY TSAList; TSAListImpl: CEDAR MONITOR EXPORTS TSAList = BEGIN list: REF Pair; Pair: TYPE = RECORD [succ: REF Pair, key: LONG CARDINAL, value: REF ANY]; Define: PUBLIC ENTRY PROCEDURE [key: LONG CARDINAL, value: REF ANY] = BEGIN ENABLE UNWIND => {}; p: REF Pair; FOR p _ list, p.succ UNTIL p=NIL OR p.key = key DO ENDLOOP; IF p=NIL THEN BEGIN pair:REF Pair = NEW[Pair]; pair^ _ [succ:list, key:key, value:value]; list _ pair END ELSE p.value _ value END; Find: PUBLIC ENTRY PROCEDURE [key: LONG CARDINAL] RETURNS [value: REF ANY] = BEGIN ENABLE UNWIND => {}; p: REF Pair; FOR p _ list, p.succ UNTIL p=NIL OR p.key = key DO ENDLOOP; value _ IF p=NIL THEN NIL ELSE p.value END; UnDefine: PUBLIC ENTRY PROCEDURE [key: LONG CARDINAL] = BEGIN ENABLE UNWIND => {}; prev,p: REF Pair; prev _ NIL; p _ list; UNTIL p=NIL OR p.key = key DO prev _ p; p _ p.succ ENDLOOP; IF p#NIL THEN BEGIN IF prev=NIL THEN list _ list.succ ELSE prev.succ _ p.succ END END; END. Michael Plass, June 28, 1982 8:46 am. Rename of module. Michael Plass, November 2, 1982 10:47 am. CEDARized.