DIRECTORY Basics, BasicTime, CedarProcess, FS, IO, List, MakeDo, MakeDoPrivate, RedBlackTree, Rope; MakeDoNodeProps: CEDAR MONITOR IMPORTS List, RedBlackTree, Rope EXPORTS MakeDo = BEGIN OPEN MakeDo, MakeDoPrivate; NodeRep: PUBLIC TYPE = MakeDoPrivate.NodeRep; ActionRep: PUBLIC TYPE = MakeDoPrivate.ActionRep; NodeClassRep: PUBLIC TYPE = MakeDoPrivate.NodeClassRep; GetProp: PUBLIC ENTRY PROC [n: Node, prop: REF ANY] RETURNS [val: REF ANY] = { ENABLE UNWIND => {}; val _ List.Assoc[prop, n.props]; }; SetProp: PUBLIC ENTRY PROC [n: Node, prop, val: REF ANY] = { ENABLE UNWIND => {}; n.props _ List.PutAssoc[prop, val, n.props]; }; DeclareNodeClass : PUBLIC ENTRY PROC [ name: ROPE, CanonizeName: PROC [ROPE] RETURNS [ROPE], GetTime: GetTimeProc ] RETURNS [nodeClass: NodeClass] = { nodeClass _ NEW [NodeClassRep _ [name, CanonizeName, GetTime]]; [] _ nodeClasses.Delete[name]; nodeClasses.Insert[nodeClass, name]; }; PublicPartsOfNodeClass: PUBLIC PROC [nc: NodeClass] RETURNS [ name: ROPE, CanonizeName: PROC [ROPE] RETURNS [ROPE], GetTime: GetTimeProc ] = { RETURN [nc.name, nc.CanonizeName, nc.GetTime]; }; LookupNodeClass: PUBLIC PROC [className: ROPE] RETURNS [class: NodeClass] = { class _ NARROW[nodeClasses.Lookup[className]]; }; nodeClasses: RedBlackTree.Table _ RedBlackTree.Create[GetNCKey, CompareNCs]; GetNCKey: PROC [data: REF ANY] RETURNS [key: ROPE] = { nc: NodeClass = NARROW[data]; key _ nc.name; }; CompareNCs: PROC [k, data: REF ANY] RETURNS [c: Basics.Comparison] --RedBlackTree.Compare-- = { k1: ROPE = NARROW[k]; k2: ROPE = GetNCKey[data]; c _ k1.Compare[k2]; }; END. ͺMakeDoNodeProps.Mesa Last Edited by: Spreitzer, February 18, 1986 5:33:48 pm PST Carl Hauser, April 11, 1985 3:43:34 pm PST INVARIANT node properties node classes ΚΦ– "cedar" style˜code™J™;K™*—K˜KšΟk œ"œœ2˜cK˜šΠbxœœ˜Kšœ˜ Kšœ˜™ K™K™ —Kšœ˜—K˜Kšœœ˜!K˜Kšœ œœ˜-Kšœ œœ˜1Kšœœœ˜7K˜šΟnœœœœœœœœœ˜NKšœœ˜Kšœ ˜ Kšœ˜—K˜š Ÿœœœœœœ˜