@ file : Suppress (" May Be Constant ") Ċ Ċ package Ġorg . kal as im . examples . gas station Ċ Ċ import Ġorg . kal as im .* Ċ import Ġorg . kal as im . misc . print This Ċ import Ġorg . kal as im . monitor s . print Histogram Ċ import Ġorg . kal as im . plot . kr avis . display Ċ import Ġorg . k oin . core . component . inject Ċ import Ġorg . k oin . core . qual ifier . named Ċ Ċ /** Ċ Ġ* ĠA Ġcar Ġar rives Ġat Ġthe Ġgas Ġstation Ġfor Ġref ue ling . Ċ Ġ* Ċ Ġ* ĠIt Ġrequests Ġone Ġof Ġthe Ġgas Ġstation 's Ġfuel Ġpump s Ġand Ġtries Ġto Ġget Ġthe Ċ Ġ* Ġdesired Ġamount Ġof Ġgas Ġfrom Ġit . ĠIf Ġthe Ġstations Ġre servo ir Ġis Ċ Ġ* Ġdep leted , Ġthe Ġcar Ġhas Ġto Ġwait Ġfor Ġthe Ġtank Ġtr uck Ġto Ġar rive . Ċ Ġ*/ Ċ Ċ // Ġbased Ġon ĠSim Py Ġexample Ġmodel Ċ val ĠG AS _ ST ATION _ SIZE Ġ= Ġ 2 0 0 . 0 Ġ Ġ// Ġlit ers Ċ val ĠTH RESH OLD Ġ= Ġ 2 5 . 0 Ġ Ġ// ĠThreshold Ġfor Ġcalling Ġthe Ġtank Ġtr uck Ġ( in Ġ% ) Ċ val ĠF UE L _ T ANK _ SIZE Ġ= Ġ 5 0 . 0 Ġ Ġ// Ġlit ers Ċ val ĠF UE L _ T ANK _ LEVEL _ RANGE Ġ= Ġ 5 .. Ġ 2 5 Ċ val ĠREF UE LING _ SPEED Ġ= Ġ 2 . 0 Ġ Ġ// Ġlit ers Ġ/ Ġsecond Ċ val ĠT ANK _ TR U CK _ TIME Ġ= Ġ 3 0 0 . 0 Ġ Ġ// ĠSecond s Ġit Ġtakes Ġthe Ġtank Ġtr uck Ġto Ġar rive Ċ val ĠINTER _ AR RI VAL _ TIME _ RANGE Ġ= Ġ 1 0 .. 1 0 0 Ġ Ġ// ĠCreate Ġa Ġcar Ġevery Ġ[ min , Ġmax ] Ġseconds Ċ val ĠSIM _ TIME Ġ= Ġ 2 0 0 0 0 . 0 Ġ Ġ// ĠSimulation Ġtime Ġin Ġseconds Ċ Ċ // Ġtodo Ġreview Ġstatus Ġof Ġhttps :// yout rack . jetbrains . com / issue / KT - 5 0 5 8 6 Ċ Ċ private Ġval ĠF UE L _ T ANK Ġ= Ġ" fuel _ pump " Ċ Ċ /** ĠAr rives Ġat Ġthe Ġgas Ġstation Ġafter Ġa Ġcertain Ġdelay Ġand Ġref ue ls Ġit .*/ Ċ class ĠT ank Tr uck Ġ: ĠComponent () Ġ{ ĊĠĠĠ Ġval Ġfuel Pump : ĠDep letable Resource Ġby Ġinject ( qual ifier Ġ= Ġnamed ( F UE L _ T ANK )) ĊĊĠĠĠ Ġval Ġun loaded Ġ= ĠState ( false ) ĊĊĠĠĠ Ġoverride Ġfun Ġprocess () Ġ= Ġsequence Ġ{ ĊĠĠĠĠĠĠĠ Ġhold ( T ANK _ TR U CK _ TIME ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġfill Ġbut Ġcap Ġwhen Ġtank Ġis Ġfull Ċ // ĠĠĠĠĠĠĠ Ġput ( fuel Pump , Ġquantity Ġ= ĠG AS _ ST ATION _ SIZE , Ġcapacity Limit Mode Ġ= ĠCap acity Limit Mode . CAP ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġsame Ġeffect , Ġbut Ġdifferent Ġapproach Ġis Ġto Ġref ill Ġthe Ġmissing Ġquantity ĊĠĠĠĠĠĠĠ Ġput ( fuel Pump , Ġquantity Ġ= Ġfuel Pump . capacity Ġ- Ġfuel Pump . level ) ĊĠĠĠĠĠĠĠ Ġun loaded . value Ġ= Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** ĠA Ġcar Ġar rives Ġat Ġthe Ġgas Ġstation Ġfor Ġref ue ling . Ċ * Ċ * ĠIt Ġrequests Ġone Ġof Ġthe Ġgas Ġstation 's Ġfuel Ġpump s Ġand Ġtries Ġto Ġget Ġthe Ċ * Ġdesired Ġamount Ġof Ġgas Ġfrom Ġit . ĠIf Ġthe Ġstations Ġre servo ir Ġis Ċ * Ġdep leted , Ġthe Ġcar Ġhas Ġto Ġwait Ġfor Ġthe Ġtank Ġtr uck Ġto Ġar rive . Ċ */ Ċ class ĠCar ( ĊĠĠĠ Ġval Ġtank Size : ĠDouble Ġ= ĠF UE L _ T ANK _ SIZE , Ċ ) Ġ: ĠComponent () Ġ{ ĊĊĠĠĠ Ġ// ĠSample Ġan Ġinitial Ġlevel ĊĠĠĠ Ġval Ġfuel Tank Level Ġ= Ġdiscrete Uniform ( F UE L _ T ANK _ LEVEL _ RANGE )() ĊĊĠĠĠ Ġ// ĠResolve Ġdependencies ĊĠĠĠ Ġval Ġfuel Pump Ġ= Ġget < Resource >() ĊĠĠĠ Ġval Ġstation Tank : ĠDep letable Resource Ġby Ġinject ( qual ifier Ġ= Ġnamed ( F UE L _ T ANK )) ĊĊĠĠĠ Ġoverride Ġfun Ġprocess () Ġ= Ġsequence Ġ{ ĊĠĠĠĠĠĠĠ Ġrequest ( fuel Pump , Ġdescription Ġ= Ġ" waiting Ġfor Ġfree Ġpump ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlit ers Required Ġ= Ġtank Size Ġ- Ġfuel Tank Level ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtake ( station Tank , Ġquantity Ġ= Ġlit ers Required ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhold ( lit ers Required Ġ/ ĠREF UE LING _ SPEED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" finished Ġ$ name ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ class ĠG as Station Ġ: ĠEnvironment ( true ) Ġ{ ĊĠĠĠ Ġval Ġtank Ġ= Ġdependency ( qual ifier Ġ= Ġnamed ( F UE L _ T ANK )) Ġ{ ĠDep letable Resource ( F UE L _ T ANK , ĠG AS _ ST ATION _ SIZE ) Ġ} ĊĊĠĠĠ Ġval Ġfuel Pump s Ġ= Ġdependency Ġ{ ĠResource ( capacity Ġ= Ġ 2 ) Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGenerate Ġnew Ġcars Ġthat Ġar rive Ġat Ġthe Ġgas Ġstation . ĊĠĠĠĠĠĠĠ ĠComponent Generator ( iat Ġ= Ġwith ( INTER _ AR RI VAL _ TIME _ RANGE ) Ġ{ Ġuniform ( first , Ġlast ) Ġ}) Ġ{ ĠCar () Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Period ically Ġcheck Ġthe Ġlevel Ġof Ġthe Ġ* fuel _ pump * Ġand Ġcall Ġthe Ġtank Ġtr uck Ġif Ġthe Ġlevel Ġfalls Ġbelow Ġa Ġthreshold . ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠComponent (" gas _ station _ control ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrepeated Process () Ġ= Ġsequence Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOrder Ġa Ġnew Ġtr uck Ġif Ġthe Ġfuel - pump Ġruns Ġof Ġout Ġfuel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( tank . level Ġ/ Ġtank . capacity Ġ* Ġ 1 0 0 Ġ< ĠTH RESH OLD ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog (" Running Ġout Ġof Ġfuel Ġ( remaining Ġ${ tank . level }). ĠOrdering Ġnew Ġfuel Ġtr uck ...") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwait ( Tank Tr uck (). un loaded , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhold ( 1 0 ) Ġ// Ġcheck Ġevery Ġ 1 0 Ġseconds ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġmain () Ġ{ ĊĊĠĠĠ Ġval Ġgas Station Ġ= ĠG as Station () ĊĊĠĠĠ Ġgas Station . run ( SIM _ TIME ) ĊĊĠĠĠ Ġ// Ġuse Ġdependency Ġlookup Ġto Ġget Ġtank ĊĠĠĠ Ġ// val Ġtank Ġ= Ġsim . get < Dep letable Resource >( qual ifier Ġ= Ġnamed ( F UE L _ PU MP )) ĊĊĠĠĠ Ġ// Ġor Ġaccessor ĊĠĠĠ Ġval Ġtank Ġ= Ġgas Station . tank ĊĊĠĠĠ Ġ// Ġprint Ġsome Ġstats ĊĠĠĠ Ġtank . level Timeline . print Histogram () ĊĊĠĠĠ Ġtank . level Timeline . display (). show () Ċ // ĠĠĠ Ġclaimed Quantity Monitor . display () Ċ // ĠĠĠ Ġavailable Quantity Monitor . display () ĊĊĠĠĠ Ġgas Station . fuel Pump s . claimed Timeline . print Histogram () ĊĠĠĠ Ġgas Station . fuel Pump s . request ers . queue Length Timeline . print This () ĊĠĠĠ Ġgas Station . fuel Pump s . request ers . length Of St ay Statistics . print This () Ċ }