interface ĠQueue < E >: ĠIterable < E >, ĠSized Ġ{ ĊĠ Ġoverride Ġval Ġsize : ĠC nt Ġget ĊĠ Ġfun Ġadd ( item : ĠE ) ĊĠ Ġfun Ġpop (): ĠE ĊĠ Ġfun Ġadd Many ( n : ĠC nt , Ġsrc : ĠIterable < E >) ĊĠ Ġfun Ġpop Many ( n : ĠC nt , Ġdst : ĠMutable Collection < E >) ĊĠ Ġoverride Ġfun Ġiterator () Ġ= Ġobject Ġ: ĠIterator < E > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġhas Next () Ġ= Ġ! isEmpty ĊĠĠĠ Ġoverride Ġfun Ġnext () Ġ= Ġpop () ĊĠ Ġ} Ċ } Ċ fun Ġ< E > ĠQueue < E >. addAll ( src : ĠCollection < E >) Ġ= Ġadd Many ( src . size , Ġsrc ) Ċ fun Ġ< E > ĠQueue < E >. pop ( n : ĠC nt ) Ġ= Ġmutable ListOf < E >(). also Ġ{ Ġpop Many ( n , Ġit ) Ġ} ĊĊ Ċ /** ĠC yc lic Ġindex Ġinteger Ġsupports Ġplus / increment Ġoperation Ġ*/ Ċ data Ġclass ĠC yc lic Index ( val Ġsized : ĠSized , Ġval Ġvalue : ĠInt ) Ġ{ ĊĠ Ġprivate Ġfun Ġwrap ( new _ value : ĠInt ) Ġ= ĠC yc lic Index ( sized , Ġnew _ value ) ĊĠ Ġfun Ġcycle ( index : ĠInt ) Ġ= Ġindex Ġ% Ġkotlin . math . max ( 1 , Ġsized . size ) Ġ// ĠInt Ġ% Ġ 1 Ġ== Ġ 0 ĊĠ Ġin fix Ġfun Ġuntil Size ( size : ĠC nt ) Ġ= Ġvalue . until ( value + size ). map (:: cycle ) ĊĊĠ Ġoperator Ġfun Ġinc () Ġ= Ġwrap ( cycle ( value . inc ())) ĊĠ Ġoperator Ġfun Ġplus ( n : ĠInt ) Ġ= Ġwrap ( cycle ( value . plus ( n ))) ĊĠ Ġoverride Ġfun ĠtoString () Ġ= Ġ" ($ value Ġin Ġ 0 .. ${ sized . size Ġ- 1 })" Ċ } Ċ Ċ operator Ġfun Ġ< E > ĠList < E >. get ( index : ĠC yc lic Index ) Ġ= Ġthis [ index . value ] Ċ operator Ġfun Ġ< E > ĠMutable List < E >. set ( index : ĠC yc lic Index , Ġvalue : ĠE ) Ġ{ Ġthis [ index . value ] Ġ= Ġvalue Ġ} ĊĊ Ċ inline Ġval ĠIN SUFF _ BUFFER Ġget () Ġ= Ġ{ Ġ" Ins ufficient Ġbuffer " Ġ} Ċ inline Ġval ĠNO _ MORE _ ELEMENT Ġget () Ġ= Ġ{ Ġ" No Ġmore Ġelements " Ġ} Ċ Ċ open Ġclass ĠRing Buffer < E >( private Ġval Ġbackend : ĠMutable List < E >): ĠQueue < E > Ġ{ ĊĠ Ġpublic Ġval Ġcapacity : ĠC nt Ġget () Ġ= Ġbackend . size ĊĠ Ġoverride Ġval Ġsize : ĠC nt Ġget () Ġ= Ġavailable ĊĊĠ Ġprotected Ġvar Ġread Pos Ġ= ĠC yc lic Index ( Sized . of ( backend ), Ġ 0 ) ĊĠ Ġprotected Ġvar Ġwrite Pos Ġ= ĠC yc lic Index ( Sized . of ( backend ), Ġ 0 ) ĊĠ Ġprotected Ġvar Ġavailable : ĠC nt Ġ= Ġ 0 ĊĊĠ Ġprotected Ġopen Ġval Ġfree Space : ĠC nt Ġget () Ġ= Ġcapacity Ġ- Ġavailable ĊĊĠ Ġoverride Ġfun Ġadd ( item : ĠE ) Ġ{ ĊĠĠĠ Ġcheck ( free Space Ġ!= Ġ 0 , ĠIN SUFF _ BUFFER ). also Do Ġ{ Ġ++ available Ġ} ĊĠĠĠ Ġbackend [ write Pos ++] Ġ= Ġitem ĊĠ Ġ} ĊĠ Ġoverride Ġfun Ġpop (): ĠE Ġ{ ĊĠĠĠ Ġcheck ( available Ġ!= Ġ 0 , ĠNO _ MORE _ ELEMENT ). also Do Ġ{ Ġ-- available Ġ} ĊĠĠĠ Ġreturn Ġbackend [ read Pos ++] ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġadd Many ( n : ĠC nt , Ġsrc : ĠIterable < E >) Ġ{ ĊĠĠĠ Ġcheck ( free Space Ġ>= Ġn , ĠIN SUFF _ BUFFER ). also Ġ{ Ġavailable Ġ+= Ġn Ġ} ĊĠĠĠ Ġwrite Pos . until Size ( n ). zip With ( src ) Ġ{ Ġi , Ġx Ġ-> Ġbackend [ i ] Ġ= Ġx Ġ}. take ( n ) ĊĠĠĠ Ġwrite Pos Ġ+= Ġn ĊĠ Ġ} ĊĠ Ġoverride Ġfun Ġpop Many ( n : ĠC nt , Ġdst : ĠMutable Collection < E >) Ġ{ ĊĠĠĠ Ġcheck ( available Ġ>= Ġn , ĠNO _ MORE _ ELEMENT ). also Ġ{ Ġavailable Ġ-= Ġn Ġ} ĊĠĠĠ Ġfor Ġ( i Ġin Ġread Pos . until Size ( n )) Ġdst . add ( backend [ i ]) ĊĠĠĠ Ġread Pos Ġ+= Ġn ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠtoString () Ġ= Ġ" Ring [$ backend ; Ġ^ ${ read Pos . value }, Ġ_ ${ write Pos . value }, Ġ$ available ]" Ċ } Ċ Ċ class ĠReset Ring Buffer < E >( backend : ĠMutable List < E >): ĠRing Buffer < E >( backend ), ĠReset able . St ated Ġ{ ĊĠ Ġoverride Ġvar Ġis Mark ing : ĠBoolean Ġ= Ġfalse ĊĠ Ġprivate Ġlateinit Ġvar Ġold Read Pos : ĠC yc lic Index ĊĠ Ġprivate Ġvar Ġmarked Read : ĠC nt Ġ= Ġ 0 ĊĊĠ Ġoverride Ġval Ġfree Space : ĠC nt Ġget () Ġ= Ġsuper . free Space Ġ- Ġmarked Read ĊĊĠ Ġoverride Ġfun Ġpop () Ġ= Ġsuper . pop () ĊĠĠĠ Ġ. also Do Ġ{ Ġif ( is Mark ing ) Ġ++ marked Read Ġ} ĊĠ Ġoverride Ġfun Ġpop Many ( n : ĠC nt , Ġdst : ĠMutable Collection < E >) Ġ= Ġsuper . pop Many ( n , Ġdst ) ĊĠĠĠ Ġ. also Do Ġ{ Ġif ( is Mark ing ) Ġmarked Read Ġ+= Ġn Ġ} ĊĊĠ Ġoverride Ġfun Ġmark () Ġ{ Ġold Read Pos Ġ= Ġread Pos ; Ġis Mark ing Ġ= Ġtrue Ġ} ĊĠ Ġoverride Ġfun Ġreset () Ġ{ ĊĠĠĠ Ġread Pos Ġ= Ġold Read Pos ĊĠĠĠ Ġavailable Ġ= Ġmarked Read . also Ġ{ Ġmarked Read Ġ= Ġ 0 Ġ} ĊĠĠĠ Ġis Mark ing Ġ= Ġfalse ĊĠ Ġ} ĊĠ Ġfun Ġviewport () Ġ= Ġpositional Ġ{ Ġto List () Ġ} Ċ } Ċ