********************************************************************
* NOTE: This file is generated automatically from the event * definition file ShortestPath.evt. ********************************************************************<* PRAGMA LL *> MODULE; <*NOWARN*> IMPORT TextConv, ZeusClass, Zeus, Algorithm, View; <*NOWARN*> IMPORT Thread, ShortestPathViewClass, AlgorithmClass; <*NOWARN*> IMPORT ShortestPathAlgClass; <* FATAL Zeus.Error, Zeus.Locked *> ShortestPathIE If you get either of these errors, contact a Zeus implementor.TYPE NewVertexArgs = BRANDED REF RECORD name: TEXT; x: REAL; y: REAL; END; NewEdgeArgs = BRANDED REF RECORD name: TEXT; from: TEXT; to: TEXT; orientation: TEXT; END; StartFindArgs = BRANDED REF RECORD from: TEXT; to: TEXT; END; PromoteArgs = BRANDED REF RECORD edge: TEXT; sIndex: INTEGER; dIndex: INTEGER; END; ConsiderArgs = BRANDED REF RECORD edge: TEXT; sIndex: INTEGER; dIndex: INTEGER; END; TracebackArgs = BRANDED REF RECORD edge: TEXT; sIndex: INTEGER; dIndex: INTEGER; END;Zeus calls the following to invoke vbt v's event handler:<*NOWARN*> PROCEDUREOEDispatcher (v: ZeusClass.T; evt: REFANY) RAISES {Thread.Alerted} = <* LL <= VBT.mu *> (* LL = {} if event style is output, LL = VBT.mu if event style is update. *) BEGIN TYPECASE v OF | ShortestPathViewClass.T (view) => <*NOWARN*> TYPECASE evt OF | NewVertexArgs(varNewVertexArgs) => <*NOWARN*> view.oeNewVertex ( varNewVertexArgs.name , varNewVertexArgs.x , varNewVertexArgs.y ) | NewEdgeArgs(varNewEdgeArgs) => <*NOWARN*> view.oeNewEdge ( varNewEdgeArgs.name , varNewEdgeArgs.from , varNewEdgeArgs.to , varNewEdgeArgs.orientation ) | StartFindArgs(varStartFindArgs) => <*NOWARN*> view.oeStartFind ( varStartFindArgs.from , varStartFindArgs.to ) | PromoteArgs(varPromoteArgs) => <*NOWARN*> view.oePromote ( varPromoteArgs.edge , varPromoteArgs.sIndex , varPromoteArgs.dIndex ) | ConsiderArgs(varConsiderArgs) => <*NOWARN*> view.oeConsider ( varConsiderArgs.edge , varConsiderArgs.sIndex , varConsiderArgs.dIndex ) | TracebackArgs(varTracebackArgs) => <*NOWARN*> view.oeTraceback ( varTracebackArgs.edge , varTracebackArgs.sIndex , varTracebackArgs.dIndex ) ELSE <* ASSERT FALSE *> END; ELSE (* this view isn't a ShortestPathViewClass, so just ignore *) END END OEDispatcher; <*NOWARN*> PROCEDUREFEDispatcher (v: ZeusClass.T; evt: REFANY) = <* LL = VBT.mu *> BEGIN TYPECASE v OF | ShortestPathAlgClass.T (alg) => <*NOWARN*> TYPECASE evt OF ELSE <* ASSERT FALSE *> END; ELSE (* this alg isn't a ShortestPathAlgClass, so just ignore *) END END FEDispatcher; PROCEDURENewVertex ( initiator: Algorithm.T; name: TEXT; x, y: REAL ) RAISES {Thread.Alerted} = <* LL = {} *> VAR zumeArgRec := NEW(NewVertexArgs , name := name , x := x , y := y ); alg := NARROW(initiator, ShortestPathAlgClass.T); BEGIN LOCK alg.evtMu DO INC(alg.eventDataRec.ctOfNewVertex); alg.stopAtEvent := alg.eventDataRec.stopAtNewVertex; alg.waitAtEvent := alg.eventDataRec.waitAtNewVertex; Zeus.Dispatch(initiator, Zeus.EventStyle.Output, 1, "NewVertex", OEDispatcher, zumeArgRec); END; END NewVertex; PROCEDURENewEdge ( initiator: Algorithm.T; name, from, to, orientation: TEXT ) RAISES {Thread.Alerted} = <* LL = {} *> VAR zumeArgRec := NEW(NewEdgeArgs , name := name , from := from , to := to , orientation := orientation ); alg := NARROW(initiator, ShortestPathAlgClass.T); BEGIN LOCK alg.evtMu DO INC(alg.eventDataRec.ctOfNewEdge); alg.stopAtEvent := alg.eventDataRec.stopAtNewEdge; alg.waitAtEvent := alg.eventDataRec.waitAtNewEdge; Zeus.Dispatch(initiator, Zeus.EventStyle.Output, 1, "NewEdge", OEDispatcher, zumeArgRec); END; END NewEdge; PROCEDUREStartFind ( initiator: Algorithm.T; from, to: TEXT ) RAISES {Thread.Alerted} = <* LL = {} *> VAR zumeArgRec := NEW(StartFindArgs , from := from , to := to ); alg := NARROW(initiator, ShortestPathAlgClass.T); BEGIN LOCK alg.evtMu DO INC(alg.eventDataRec.ctOfStartFind); alg.stopAtEvent := alg.eventDataRec.stopAtStartFind; alg.waitAtEvent := alg.eventDataRec.waitAtStartFind; Zeus.Dispatch(initiator, Zeus.EventStyle.Output, 1, "StartFind", OEDispatcher, zumeArgRec); END; END StartFind; PROCEDUREPromote ( initiator: Algorithm.T; edge: TEXT; sIndex, dIndex: INTEGER ) RAISES {Thread.Alerted} = <* LL = {} *> VAR zumeArgRec := NEW(PromoteArgs , edge := edge , sIndex := sIndex , dIndex := dIndex ); alg := NARROW(initiator, ShortestPathAlgClass.T); BEGIN LOCK alg.evtMu DO INC(alg.eventDataRec.ctOfPromote); alg.stopAtEvent := alg.eventDataRec.stopAtPromote; alg.waitAtEvent := alg.eventDataRec.waitAtPromote; Zeus.Dispatch(initiator, Zeus.EventStyle.Output, 1, "Promote", OEDispatcher, zumeArgRec); END; END Promote; PROCEDUREConsider ( initiator: Algorithm.T; edge: TEXT; sIndex, dIndex: INTEGER ) RAISES {Thread.Alerted} = <* LL = {} *> VAR zumeArgRec := NEW(ConsiderArgs , edge := edge , sIndex := sIndex , dIndex := dIndex ); alg := NARROW(initiator, ShortestPathAlgClass.T); BEGIN LOCK alg.evtMu DO INC(alg.eventDataRec.ctOfConsider); alg.stopAtEvent := alg.eventDataRec.stopAtConsider; alg.waitAtEvent := alg.eventDataRec.waitAtConsider; Zeus.Dispatch(initiator, Zeus.EventStyle.Output, 1, "Consider", OEDispatcher, zumeArgRec); END; END Consider; PROCEDURETraceback ( initiator: Algorithm.T; edge: TEXT; sIndex, dIndex: INTEGER ) RAISES {Thread.Alerted} = <* LL = {} *> VAR zumeArgRec := NEW(TracebackArgs , edge := edge , sIndex := sIndex , dIndex := dIndex ); alg := NARROW(initiator, ShortestPathAlgClass.T); BEGIN LOCK alg.evtMu DO INC(alg.eventDataRec.ctOfTraceback); alg.stopAtEvent := alg.eventDataRec.stopAtTraceback; alg.waitAtEvent := alg.eventDataRec.waitAtTraceback; Zeus.Dispatch(initiator, Zeus.EventStyle.Output, 1, "Traceback", OEDispatcher, zumeArgRec); END; END Traceback; BEGIN END ShortestPathIE.