package Ġcom . re the viper . kot lint ools . collection Ċ Ċ /** Ċ Ġ* ĠSwap Ġindex Ġof Ġelements Ġof Ġgiven Ġindices . Ċ Ġ*/ Ċ fun Ġ< T > ĠCollection < T >. sw apped ByIndex ( index From : ĠInt , Ġindex To : ĠInt ): ĠList < T > Ġ= ĊĠĠĠ Ġto Mutable List (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis [ index From ] Ġ= Ġthis [ index To ]. also Ġ{ Ġthis [ index To ] Ġ= Ġthis [ index From ] Ġ} ĊĠĠĠ Ġ}. toList () Ċ Ċ /** Ċ Ġ* ĠSwap Ġindex Ġof Ġelements Ġof Ġgiven Ġconditions . Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT > ĠCollection < T >. sw apped By Condition ( from : Ġ( T ) Ġ-> ĠBoolean , Ġto : Ġ( T ) Ġ-> ĠBoolean ): ĠList < T > Ġ= ĊĠĠĠ Ġsw apped ByIndex ( indexOf First Ġ{ Ġfrom ( it ) Ġ}, ĠindexOf First Ġ{ Ġto ( it ) Ġ}) Ċ Ċ /** Ċ Ġ* ĠSwap Ġindex Ġof Ġelements . Ċ Ġ*/ Ċ fun Ġ< T > ĠCollection < T >. sw apped By Elements ( from : ĠT , Ġto : ĠT ): ĠList < T > Ġ= ĊĠĠĠ Ġsw apped ByIndex ( indexOf ( from ), ĠindexOf ( to )) Ċ Ċ /** Ċ Ġ* ĠPerforms Ġthe Ġgiven Ġ[ action ] Ġon Ġelement Ġuntil Ġmatching Ġthe Ġgiven Ġ[ predicate ]. Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT > ĠCollection < T >. for Until ( predicate : Ġ( index : ĠInt , ĠT ) Ġ-> ĠBoolean , Ġaction : Ġ( Int , ĠT ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġfor Ġ(( index , Ġelement ) Ġin Ġwith Index ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( predicate ( index , Ġelement )) Ġaction ( index , Ġelement ) Ġelse Ġreturn ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġlist Ġcontaining Ġthe Ġresults Ġof Ġapplying Ġthe Ġgiven Ġ[ transform ] Ġfunction Ġto Ġuntil Ġelement Ġmatching Ġthe Ġgiven Ġ[ predicate ] Ġin Ġthe Ġoriginal Ġcollection . Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT , ĠR > ĠCollection < T >. map Until ( predicate : Ġ( index : ĠInt , ĠT ) Ġ-> ĠBoolean , Ġtransform : Ġ( T ) Ġ-> ĠR ): ĠList < R > Ġ= ĊĠĠĠ Ġmutable ListOf < R >(). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Until ( predicate ) Ġ{ Ġ_, Ġelement Ġ-> Ġadd ( transform ( element )) Ġ} ĊĠĠĠ Ġ}. toList () Ċ Ċ /** Ċ Ġ* ĠPerforms Ġthe Ġgiven Ġ[ action ] Ġon Ġkey - value Ġpairs Ġuntil Ġmatching Ġthe Ġgiven Ġ[ predicate ]. Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠK , ĠV > ĠMap < K , ĠV >. for Until ( predicate : Ġ( K , ĠV ) Ġ-> ĠBoolean , Ġaction : Ġ( K , ĠV ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġfor Ġ(( key , Ġvalue ) Ġin Ġentries ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( predicate ( key , Ġvalue )) Ġaction ( key , Ġvalue ) Ġelse Ġreturn ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġlist Ġcontaining Ġthe Ġresults Ġof Ġapplying Ġthe Ġgiven Ġ[ transform ] Ġfunction Ġto Ġkey - value Ġpairs Ġuntil Ġmatching Ġthe Ġgiven Ġ[ predicate ] Ġin Ġthe Ġoriginal Ġmap . Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠK , ĠV , ĠR > ĠMap < K , ĠV >. map Until ( predicate : Ġ( K , ĠV ) Ġ-> ĠBoolean , Ġtransform : Ġ( K , ĠV ) Ġ-> ĠR ): ĠList < R > Ġ= ĊĠĠĠ Ġmutable ListOf < R >(). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Until ( predicate ) Ġ{ Ġkey , Ġelement Ġ-> Ġadd ( transform ( key , Ġelement )) Ġ} ĊĠĠĠ Ġ}. toList () Ċ Ċ /** Ċ Ġ* ĠDiv ide Ġa ĠList Ġto Ġgiven Ġnumber Ġof Ġlists . Ċ Ġ*/ Ċ fun Ġ< T > ĠList < T >. divide ( number : ĠInt ): ĠList < List < T >> Ġ{ ĊĠĠĠ Ġval Ġpartition Sizes Ġ= ĠInt Array ( number ) ĊĠĠĠ Ġvar Ġoffset Ġ= Ġ 0 ĊĊĠĠĠ Ġrepeat ( size ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpartition Sizes [ offset ++] ++ ĊĠĠĠĠĠĠĠ Ġif Ġ( offset Ġ== Ġnumber ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoffset Ġ= Ġ 0 ĊĠĠĠ Ġreturn Ġpartition Sizes . map Ġ{ Ġpartition Size Ġ-> ĊĠĠĠĠĠĠĠ Ġsub List ( offset , Ġoffset Ġ+ Ġpartition Size ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Ġ+= Ġpartition Size ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠGet Ġsub list Ġof Ġgiven Ġ[ range ] Ġin Ġits Ġindices . Ċ Ġ*/ Ċ operator Ġfun Ġ< T > ĠList < T >. get ( range : ĠInt Range ): ĠList < T > Ġ= ĊĠĠĠ Ġsub List ( range . first , Ġrange . last Ġ+ Ġ 1 )