{ This is a new version of the traveler example developed in the thesis. } { It includes modifications to satisfy compiler's restrictions on loops } { Daniel Amyot, 22/09/94 } Map TaxiCompany is Internal TPhoneD, TgetinC, TCride, TgetoutC, TgetonP, TPFlight, TgetoffP, Pready, Phangar, Din, DaskC, Dout, Cin, Cout { Grouping from the thesis } Interactions Traveler, &Gr1 on TphoneD, TgetinC, TCride, TgetoutC, TgetonP, TPflight, TgetoffP; where Group &Gr1 is Plane, &Gr2 on Nothing; where Group &Gr2 is Dispatcher, Cab on DaskC; EndGroup { &Gr2 } EndGroup { &Gr1} Descriptions Timethread Traveler is EndRec { End Recursion } Internal Tairport { Internal action } Trigger (Tnew) Async (TphoneD) Sync (TgetinC) Action (TCride) Sync (TgetoutC) Action (Tairport) Sync (TgetonP) Action (TPflight) Sync (TgetoffP) Result (Tdest) EndTT { Traveler } Timethread Dispatcher is EndRec { End Recursion } Constrained { Not used here. } Internal { Internal actions } DlookforC, Dfillstats, Dready Trigger (Din) Loop Compulsory Sync (TphoneD) Action (DlookforC) Sync (DaskC) { Instead of Async (Loop restriction). } Action (Dfillstats) Optional Action (Dready) EndLoop Result (Dout) EndTT { Dispatcher } Timethread Cab is EndRec { End Recursion } Constrained { Not used here. } Internal { Internal actions } CgoD, Cgarage Trigger (Cin) Loop { No parallel here } Compulsory Sync (DaskC) Sync (TgetinC) Action (TCride) Sync (TgetoutC) Optional Action (CgoD) EndLoop Action (Cgarage) Result (Cout) EndTT { Cab } Timethread Plane is EndRec { End Recursion } Trigger (Pready) Sync (TgetonP) Action (TPflight) Sync (TgetoffP) Result (Phangar) EndTT { Plane } EndMap { TaxiCompany }