<<[Indigo]2.3>SignalTypeRegistrationImpl.Mesa>> <> DIRECTORY Basics, RedBlackTree, Rope, RoseTranslateTypes, SignalTypeRegistration; SignalTypeRegistrationImpl: CEDAR PROGRAM IMPORTS RedBlackTree, Rope EXPORTS SignalTypeRegistration = BEGIN OPEN RoseTranslateTypes; defaultNodeType: PUBLIC ROPE _ NIL; signalTypes: PUBLIC SymbolTable _ RedBlackTree.Create[GetSymbolTableEntryKey, CompareSymbolTableEntries]; GetSymbolTableEntryKey: PUBLIC PROC [data: REF ANY] RETURNS [key: ROPE] --RedBlackTree.GetKey-- = {ste: SymbolTableEntry _ NARROW[data]; key _ ste.name}; CompareSymbolTableEntries: PUBLIC PROC [k, data: REF ANY] RETURNS [c: Basics.Comparison] --RedBlackTree.Compare-- = BEGIN s1: ROPE _ NARROW[k]; s2: ROPE _ GetSymbolTableEntryKey[data]; c _ s1.Compare[s2, FALSE]; END; RegisterNodeTypeConstructor: PUBLIC PROC [name: ROPE, stc: NodeTypeConstructor] = BEGIN signalTypes.Insert[NEW [SymbolTableEntryRep[nodeTypeConstructor] _ [name: name, value: nodeTypeConstructor[stc: stc]]], name]; END; SetDefaultNodeType: PUBLIC PROC [rope: ROPE] = {defaultNodeType _ rope}; END.