package Ġsimulation . event handlers Ċ Ċ import Ġsimulation . events . Tr am Endpoint Arrival Event Ċ import Ġsimulation . events . Tr am Stop Available Event Ċ import Ġsimulation . interfaces . Event Ċ import Ġsimulation . interfaces . EventHandler Ċ import Ġsimulation . logging . Logging Data Ċ import Ġsimulation . logic . State Logic Ċ Ċ /** Ċ Ġ* ĠEvent Ġhandler Ġfor Ġthe ĠTr am Stop Av a iable Event Ċ Ġ*/ Ċ object ĠTr am Stop Available Handler Ġ: ĠEventHandler Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġhandle Event ( event : ĠEvent , Ġlogic : ĠState Logic ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCast Ġthis ĠEvent Ġto Ġa ĠTr am Stop Available Event ĊĠĠĠĠĠĠĠ Ġevent Ġas ĠTr am Stop Available Event ĊĊĠĠĠĠĠĠĠ Ġ// ĠThis ĠTr am Stop Ġis Ġno Ġlonger Ġbusy , Ġthis Ġonly Ġaffects Ġnon - endpoints ĊĠĠĠĠĠĠĠ Ġevent . tr am Stop . is Busy Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġthis Ġis ĠCS Ġor ĠP + R , Ġfree Ġthe Ġused Ġlane ĊĠĠĠĠĠĠĠ Ġif Ġ( event . lane Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent . tr am Stop . free Lan es . add ( event . lane ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe ĠTr am Ġqueue Ġis Ġnot Ġempty , Ġschedule Ġthe Ġar rival Ġof Ġthe Ġfirst ĠTr am Ġin Ġthe Ġqueue Ġat Ġthis Ġtime ĊĠĠĠĠĠĠĠ Ġif Ġ( event . tr am Stop . tr am Queue . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġqueued Event Ġ= Ġevent . tr am Stop . tr am Queue . poll () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġthe Ġlogging Ġon Ġhow Ġlong Ġtr ams Ġhave Ġto Ġqueue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogging Data . tr am Queue Times [ event . tr am Stop ] !!. add ( event . time Ġ- Ġqueued Event . time ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRes chedule Ġthe ĠEvent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġqueued Event . time Ġ= Ġevent . time ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogic . add Event ( queued Event ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }