package Ġcom . ly ee ed ar . Util Ċ Ċ import Ġcom . badlogic . gdx . utils . Array Ċ import Ġcom . badlogic . gdx . utils . Int Map Ċ Ċ class ĠUnique Array < T >( val Ġunique Fun : Ġ( T ) Ġ-> ĠInt ) Ġ: ĠIterable < T > Ċ { Ċ ĉ val Ġbacking Array Ġ= ĠArray < T >() Ċ ĉ val Ġunique Map Ġ= ĠInt Map < T >() ĊĊ ĉ val Ġsize : ĠInt Ċĉ ĉ get () Ġ= Ġbacking Array . size ĊĊ ĉ fun Ġadd ( item : ĠT ) Ċ ĉ { Ċĉ ĉ val Ġkey Ġ= Ġunique Fun ( item ) Ċĉ ĉ if Ġ(! unique Map . containsKey ( key )) Ċĉ ĉ { Ċĉĉ ĉ back ing Array . add ( item ) Ċĉĉ ĉ unique Map . put ( key , Ġitem ) Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ fun Ġreplace ( item : ĠT ) Ċ ĉ { Ċĉ ĉ val Ġkey Ġ= Ġunique Fun ( item ) ĊĊĉ ĉ if Ġ( unique Map . containsKey ( key )) Ċĉ ĉ { Ċĉĉ ĉ val Ġexisting Ġ= Ġunique Map [ key ] Ċĉĉ ĉ back ing Array . remove Value ( existing , Ġtrue ) ĊĊĉĉ ĉ back ing Array . add ( item ) Ċĉĉ ĉ unique Map . put ( key , Ġitem ) Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ fun Ġadd All ( items : ĠIterable < T >) Ċ ĉ { Ċĉ ĉ for Ġ( item Ġin Ġitems ) Ċĉ ĉ { Ċĉĉ ĉ add ( item ) Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ fun Ġremove ( item : ĠT ) Ċ ĉ { Ċĉ ĉ val Ġkey Ġ= Ġunique Fun ( item ) Ċĉ ĉ unique Map . remove ( key ) ĊĊĉ ĉ back ing Array . remove Value ( item , Ġtrue ) Ċ ĉ } ĊĊ ĉ fun Ġclear () Ċ ĉ { Ċĉ ĉ back ing Array . clear () Ċĉ ĉ unique Map . clear () Ċ ĉ } ĊĊ ĉ override Ġfun Ġiterator (): ĠIterator < T > Ċ ĉ { Ċĉ ĉ return Ġbacking Array . iterator () Ċ ĉ } Ċ }