package Ġorg . softp ark . state ful 4 k . demo Ċ Ċ import Ġorg . softp ark . state ful 4 k .* Ċ import Ġorg . softp ark . state ful 4 k . data . Console Emitter Ċ import Ġorg . softp ark . state ful 4 k . extensions . create Executor Ċ import Ġorg . softp ark . state ful 4 k . extensions . event Ċ import Ġorg . softp ark . state ful 4 k . extensions . state Ċ Ċ class ĠQuick Demo Ġ{ ĊĠĠĠ Ġfun Ġexecute () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfigur ator Ġ= ĠState Machine ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Configurator < Console Emitter , ĠDoor State , ĠDoor Event >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate ( Open State :: class ). enter Ġ{ Ġcontext . sound (" S que ak !") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate ( Closed State :: class ). enter Ġ{ Ġcontext . sound (" Bang !") Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent ( Door State :: class , ĠUn lock Event :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġstate . locked Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. loop Ġ{ Ġcontext . sound (" Click !"); Ġstate . unlock () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent ( Door State :: class , ĠLock Event :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ! state . locked Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. loop Ġ{ Ġcontext . sound (" Cl ack !"); Ġstate . lock () Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent ( Closed State :: class , ĠOpen Event :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġstate . locked Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. loop Ġ{ Ġcontext . sound (" Click ! ĠClick !") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent ( Closed State :: class , ĠOpen Event :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. goto Ġ{ ĠOpen State ( false ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent ( Open State :: class , ĠClose Event :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġstate . locked Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. loop Ġ{ Ġcontext . sound (" S que ak ! ĠB ang !") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent ( Open State :: class , ĠClose Event :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. goto Ġ{ ĠClosed State ( false ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent ( Door State :: class , ĠDoor Event :: class ). loop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġexecutor Ġ= Ġconfigur ator . create Executor ( Console Emitter (), ĠClosed State ( true )) ĊĠĠĠĠĠĠĠ Ġexecutor . fire ( Unlock Event ()) ĊĠĠĠ Ġ} Ċ }