package Ġde . rob ol ab . common . utils Ċ Ċ import Ġde . west erm ann . k observe . base . Observable List Ċ import Ġde . west erm ann . k observe . base . Observable Mutable List Ċ import Ġde . west erm ann . k observe . event . EventHandler Ċ import Ġde . west erm ann . k observe . list . observable ListOf Ċ Ċ interface ĠPool Manager < T > Ġ: ĠObservable List < T > Ġ{ ĊĠĠĠ Ġfun Ġadd ( element : ĠT ) ĊĠĠĠ Ġfun Ġadd ( elements : ĠCollection < T >) Ġ= Ġelements . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġadd ( it ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd ( var arg Ġelements : ĠT ) Ġ= Ġelements . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġadd ( it ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd ( elements : ĠSequence < T >) Ġ= Ġelements . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġadd ( it ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtry Remove (): ĠT ? ĊĊĠĠĠ Ġabstract Ġclass ĠPool Manager Base < T >( var arg Ġelements : ĠT ) Ġ: ĠPool Manager < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġprotected Ġval Ġpool : ĠObservable Mutable List < T > Ġ= Ġobservable ListOf (* elements ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġadd ( element : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpool . add ( element ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġadd ( elements : ĠCollection < T >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpool . addAll ( elements ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġadd ( var arg Ġelements : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpool . addAll ( elements ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġadd ( elements : ĠSequence < T >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpool . addAll ( elements ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠisEmpty (): ĠBoolean Ġ= Ġpool . isEmpty () ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġon Add Index : ĠEventHandler < Observable List . Add Event < T >> Ġ= Ġpool . on Add Index ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġon Set Index : ĠEventHandler < Observable List . Set Event < T >> Ġ= Ġpool . on Set Index ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġon Remove Index : ĠEventHandler < Observable List . Remove Event < T >> Ġ= Ġpool . on Remove Index ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġon Add : ĠEventHandler < T > Ġ= Ġpool . on Add ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġon Remove : ĠEventHandler < T > Ġ= Ġpool . on Remove ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġon Clear : ĠEventHandler < Collection < T >> Ġ= Ġpool . on Clear ĊĠĠĠĠĠĠĠ Ġoverride Ġval ĠonChange : ĠEventHandler < Unit > Ġ= Ġpool . onChange ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġsize : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġpool . size ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcontains ( element : ĠT ): ĠBoolean Ġ= Ġpool . contains ( element ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcontains All ( elements : ĠCollection < T >): ĠBoolean Ġ= Ġpool . contains All ( elements ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget ( index : ĠInt ): ĠT Ġ= Ġpool [ index ] ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠindexOf ( element : ĠT ): ĠInt Ġ= Ġpool . indexOf ( element ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġlast IndexOf ( element : ĠT ): ĠInt Ġ= Ġpool . lastIndexOf ( element ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġcreate ( var arg Ġelements : ĠT , Ġl ifo : ĠBoolean ): ĠPool Manager < T > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( l ifo ) ĠLI FO (* elements ) Ġelse ĠFIFO (* elements ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠFIFO < T >( var arg Ġelements : ĠT ) Ġ: ĠPool Manager Base < T >(* elements ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtry Remove (): ĠT ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( pool . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpool . remove At ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠLI FO < T >( var arg Ġelements : ĠT ) Ġ: ĠPool Manager Base < T >(* elements ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtry Remove (): ĠT ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( pool . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpool . remove At ( pool . last Index ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }