/* Ċ * ĠCopyright Ġ 2 0 1 4 - 2 0 2 1 ĠJetBrains Ġs . r . o Ġand Ġcontributors . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense . Ċ */ Ċ Ċ package Ġio . ktor . util . collections . internal Ċ Ċ import Ġio . ktor . utils . io .* Ċ import Ġkotlinx . atomic fu .* Ċ Ċ internal Ġclass ĠShared List < T >( override Ġval Ġsize : ĠInt ) Ġ: ĠList < T ?> Ġ{ ĊĠĠĠ Ġprivate Ġval Ġdata : ĠAtomic Array < T ?> Ġ= Ġatomic ArrayOf Null s < T >( size ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġmake Shared () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġset ( index : ĠInt , Ġvalue : ĠT ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata [ index ]. value Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcontains ( element : ĠT ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data [ index ]. value Ġ== Ġelement ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcontains All ( elements : ĠCollection < T ?> ): ĠBoolean Ġ= Ġelements . all Ġ{ Ġcontains ( it ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget ( index : ĠInt ): ĠT ? Ġ= Ġdata [ index ]. value ĊĊĠĠĠ Ġoverride Ġfun ĠindexOf ( element : ĠT ?): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data [ index ]. value Ġ== Ġelement ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠisEmpty (): ĠBoolean Ġ= Ġsize Ġ== Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun Ġiterator (): ĠIterator < T ?> Ġ= Ġlist Iterator ( 0 ) ĊĊĠĠĠ Ġoverride Ġfun Ġlast IndexOf ( element : ĠT ?): ĠInt Ġ= Ġas Re versed (). indexOf ( element ) ĊĊĠĠĠ Ġoverride Ġfun Ġlist Iterator (): ĠList Iterator < T ?> Ġ= Ġlist Iterator ( 0 ) ĊĊĠĠĠ Ġoverride Ġfun Ġlist Iterator ( index : ĠInt ): ĠList Iterator < T ?> Ġ= Ġobject Ġ: ĠList Iterator < T ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠcurrentIndex Ġ= Ġatomic ( index ) ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Shared () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhas Next (): ĠBoolean Ġ= ĠcurrentIndex . value Ġ< Ġsize ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhas Previous (): ĠBoolean Ġ= ĠcurrentIndex . value Ġ> Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnext (): ĠT ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( hasNext ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Ġ= ĠcurrentIndex . get And Increment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdata [ current ]. value ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnext Index (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( hasNext ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠcurrentIndex . value Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġprevious (): ĠT ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( has Previous ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Ġ= ĠcurrentIndex . get And De crement () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdata [ current ]. value ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġprevious Index (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( has Previous ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠcurrentIndex . value Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsub List ( from Index : ĠInt , Ġto Index : ĠInt ): ĠList < T ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠShared List < T >( to Index Ġ- Ġfrom Index ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġfrom Index Ġuntil Ġto Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ index Ġ- Ġfrom Index ] Ġ= Ġdata [ index ]. value ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ } Ċ