package Ġio . mock ative . concurrency Ċ Ċ /** Ċ Ġ* ĠAn Ġatomic , Ġthread - sh arable Ġgeneric Ġordered Ġcollection Ġof Ġelements . Ċ Ġ*/ Ċ internal Ġclass ĠAtomic List < E > Ġ: ĠList < E > Ġ{ ĊĠĠĠ Ġprivate Ġval Ġref : ĠAtomic Ref < List < E >> Ġ= ĠAtomic Ref ( emptyList ()) ĊĊĠĠĠ Ġprivate Ġinline Ġfun Ġ< R > Ġmutate ( block : ĠArrayList < E >. () Ġ-> ĠR ): ĠR Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Value Ġ= Ġref . value ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Value Ġ= ĠArrayList < E >( current Value . size Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Value . addAll ( current Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġblock ( next Value ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ref . compare AndSet ( current Value , Ġnext Value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġsize : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġref . value . size ĊĊĠĠĠ Ġoverride Ġfun Ġcontains ( element : ĠE ): ĠBoolean Ġ= Ġref . value . contains ( element ) ĊĠĠĠ Ġoverride Ġfun Ġcontains All ( elements : ĠCollection < E >): ĠBoolean Ġ= Ġref . value . contains All ( elements ) ĊĠĠĠ Ġoverride Ġfun Ġget ( index : ĠInt ): ĠE Ġ= Ġref . value [ index ] ĊĠĠĠ Ġoverride Ġfun ĠindexOf ( element : ĠE ): ĠInt Ġ= Ġref . value . indexOf ( element ) ĊĠĠĠ Ġoverride Ġfun ĠisEmpty (): ĠBoolean Ġ= Ġref . value . isEmpty () ĊĠĠĠ Ġoverride Ġfun Ġiterator (): ĠIterator < E > Ġ= Ġref . value . iterator () ĊĠĠĠ Ġoverride Ġfun Ġlast IndexOf ( element : ĠE ): ĠInt Ġ= Ġref . value . lastIndexOf ( element ) ĊĊĠĠĠ Ġfun Ġadd ( element : ĠE ): ĠBoolean Ġ= Ġmutate Ġ{ Ġadd ( element ) Ġ} ĊĠĠĠ Ġfun Ġadd ( index : ĠInt , Ġelement : ĠE ) Ġ= Ġmutate Ġ{ Ġadd ( index , Ġelement ) Ġ} ĊĠĠĠ Ġfun Ġadd All ( index : ĠInt , Ġelements : ĠCollection < E >): ĠBoolean Ġ= Ġmutate Ġ{ Ġadd All ( index , Ġelements ) Ġ} ĊĠĠĠ Ġfun Ġadd All ( elements : ĠCollection < E >): ĠBoolean Ġ= Ġmutate Ġ{ Ġadd All ( elements ) Ġ} ĊĊĠĠĠ Ġfun Ġclear () Ġ= Ġmutate Ġ{ Ġclear () Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlist Iterator (): ĠList Iterator < E > Ġ= Ġref . value . list Iterator () ĊĠĠĠ Ġoverride Ġfun Ġlist Iterator ( index : ĠInt ): ĠList Iterator < E > Ġ= Ġref . value . list Iterator () ĊĊĠĠĠ Ġfun Ġremove ( element : ĠE ): ĠBoolean Ġ= Ġmutate Ġ{ Ġremove ( element ) Ġ} ĊĠĠĠ Ġfun Ġremove All ( elements : ĠCollection < E >): ĠBoolean Ġ= Ġmutate Ġ{ Ġremove All ( elements ) Ġ} ĊĠĠĠ Ġfun Ġremove At ( index : ĠInt ): ĠE Ġ= Ġmutate Ġ{ Ġremove At ( index ) Ġ} ĊĊĠĠĠ Ġfun Ġretain All ( elements : ĠCollection < E >): ĠBoolean Ġ= Ġmutate Ġ{ Ġretain All ( elements ) Ġ} ĊĊĠĠĠ Ġfun Ġset ( index : ĠInt , Ġelement : ĠE ): ĠE Ġ= Ġmutate Ġ{ Ġset ( index , Ġelement ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsub List ( from Index : ĠInt , Ġto Index : ĠInt ): ĠList < E > Ġ= Ġref . value . sub List ( from Index , Ġto Index ) Ċ } Ċ