package Ġorg . anti _ ad . mc . common . extensions Ċ Ċ // Ġ============ Ċ // ĠEnum ĠExtensions Ċ // Ġ============ Ċ Ċ fun Ġ< T Ġ: ĠEnum < T >> ĠT . previous ( amount : ĠInt Ġ= Ġ 1 ) Ġ= Ġnext (- amount ) Ċ fun Ġ< T Ġ: ĠEnum < T >> ĠT . next ( amount : ĠInt Ġ= Ġ 1 ): ĠT Ġ{ ĊĠĠĠ Ġval Ġvalues Ġ= Ġdeclaring Class . enum Constants ĊĠĠĠ Ġreturn Ġvalues [( ordinal Ġ+ Ġamount ) Ġmod Ġvalues . size ] Ċ } Ċ Ċ // Ġ============ Ċ // ĠClass ĠExtensions Ċ // Ġ============ Ċ Ċ // val Ġ< T Ġ: ĠAny > ĠClass < T >. primitive Type Ċ // Ġ Ġget () Ġ= Ġthis . kotlin . java Primitive Type Ċ // val Ġ< T Ġ: ĠAny > ĠClass < T >. object Type Ċ // Ġ Ġget () Ġ= Ġthis . kotlin . java ObjectType Ċ Ċ val ĠClass <* >. useful Name Ġ// Ġas Ġsimple Name Ġsometimes Ġreturn Ġ"" Ġwhich Ġis Ġuseless ĊĠĠĠ Ġget () Ġ= Ġname . substring After Last ('.') Ċ Ċ // Ġ============ Ċ // ĠScope ĠFunctions Ġwith Ġif Ġelse Ċ // Ġ============ Ċ // Ġ( let , Ġrun , Ġwith , Ġapply , Ġalso ) Ċ Ċ // Ġhints : Ċ // Ġ[ null Ġt ernary ] Ġa . let Ġ{ Ġif Ġ( it Ġ== Ġnull ) Ġb Ġelse Ġc Ġ} Ġ< ==> Ġa ?. let Ġ{ Ġc Ġ} Ġ?: Ġb Ċ Ċ inline Ġfun Ġ< T > ĠT . run If ( condition : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock : ĠT . () Ġ-> ĠT ): ĠT Ġ= Ġif Ġ( condition ) Ġrun ( block ) Ġelse Ġthis Ċ Ċ inline Ġfun Ġ< T > ĠT . let If ( condition : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock : Ġ( T ) Ġ-> ĠT ): ĠT Ġ= Ġif Ġ( condition ) Ġlet ( block ) Ġelse Ġthis Ċ Ċ inline Ġfun Ġ< T > ĠT . apply If ( condition : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock : ĠT . () Ġ-> ĠUnit ): ĠT Ġ= Ġif Ġ( condition ) Ġapply ( block ) Ġelse Ġthis Ċ Ċ inline Ġfun Ġ< T > ĠT . also If ( condition : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock : Ġ( T ) Ġ-> ĠUnit ): ĠT Ġ= Ġif Ġ( condition ) Ġalso ( block ) Ġelse Ġthis Ċ Ċ // Ġ[ self Ġt ernary ] Ġa . run Ġ{ Ġif Ġ( cond ) Ġthis Ġelse Ġb Ġ} Ċ // Ġ> Ġcond Ġ[ not Ġdepends ] Ġon Ġa , Ġb Ġ[ depends ] Ġon Ġa Ċ // Ġ Ġ* Ġ Ġ< ==> Ġa . run If (! cond ) Ġ{ Ġb Ġ} Ċ // ĠĠĠĠ Ġ< ==> Ġa Ġbe Ġ{ Ġb Ġ} Ġif It Ġ! cond Ċ // Ġ> Ġcond Ġ[ depends ] Ġon Ġa , Ġb Ġ[ not Ġdepends ] Ġon Ġa Ċ // ĠĠĠĠ Ġ< ==> Ġa . take If Ġ{ Ġit . cond Ġ} Ġ?: Ġb Ċ // Ġ Ġ* Ġ Ġ< ==> Ġa . if It Ġ{ Ġcond Ġ} Ġ?: Ġb Ċ // ĠĠĠĠ Ġ< ==> Ġa Ġbe Ġb Ġif It Ġ{ Ġ! cond Ġ} ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġb Ġevaluated Ċ // Ġ> Ġcond Ġ[ not Ġdepends ] Ġon Ġa , Ġb Ġ[ not Ġdepends ] Ġon Ġa Ċ // Ġ Ġ* Ġ Ġ< ==> Ġif Ġ( cond ) Ġa Ġelse Ġb Ċ // ĠĠĠĠ Ġ< ==> Ġa Ġbe Ġb Ġif It Ġ! cond ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġb Ġevaluated Ċ // Ġ> Ġcond Ġ[ depends ] Ġon Ġa , Ġb Ġ[ depends ] Ġon Ġa Ċ // ĠĠĠĠ Ġ< ==> Ġa . run Ġ{ Ġif Ġ( cond ) Ġthis Ġelse Ġb Ġ} Ċ // ĠĠĠĠ Ġ< ==> Ġa . self If Ġ{ Ġcond Ġor Else Ġb Ġ} ĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġb Ġevaluated Ċ // ĠĠĠĠ Ġ< ==> Ġa . self If Ġ{ Ġcond Ġor Else Ġ{ Ġb Ġ} Ġ} Ċ // ĠĠĠĠ Ġ< ==> Ġa Ġbe Ġ{ Ġb Ġ} Ġif It Ġ{ Ġ! cond Ġ} Ċ // ĠĠĠĠ Ġ< ==> Ġa . run If Ġ{ Ġ! cond Ġthen Ġb Ġ} ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġb Ġevaluated Ċ // ĠĠĠĠ Ġ< ==> Ġa . run If Ġ{ Ġ! cond Ġthen Ġ{ Ġb Ġ} Ġ} Ċ // Ġ Ġ* Ġ Ġ< ==> Ġa . run If ({ Ġ! cond Ġ}) Ġ{ Ġb Ġ} Ċ Ċ // Ġlike Ġtake If Ġbut Ġreceiver Ġpredicate Ċ inline Ġfun Ġ< T > ĠT . if It ( predicate : ĠT . () Ġ-> ĠBoolean ): ĠT ? Ġ= Ġif Ġ( this . predicate ()) Ġthis Ġelse Ġnull Ċ inline Ġfun Ġ< T > ĠT . unless It ( predicate : ĠT . () Ġ-> ĠBoolean ): ĠT ? Ġ= Ġif Ġ(! this . predicate ()) Ġthis Ġelse Ġnull ĊĊ Ċ inline Ġfun Ġ< T > ĠT ?. or Default ( predicate : Ġ() Ġ-> ĠT ): ĠT Ġ= Ġthis Ġ?: Ġpredicate () Ċ Ċ inline Ġfun Ġ< T > ĠT . run If ( condition : ĠT . () Ġ-> ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock : ĠT . () Ġ-> ĠT ): ĠT Ġ= Ġif Ġ( condition ()) Ġrun ( block ) Ġelse Ġthis Ċ Ċ inline Ġfun Ġ< T > ĠT . let If ( condition : Ġ( T ) Ġ-> ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock : Ġ( T ) Ġ-> ĠT ): ĠT Ġ= Ġif Ġ( condition ( this )) Ġlet ( block ) Ġelse Ġthis Ċ Ċ inline Ġfun Ġ< T > ĠT . apply If ( condition : ĠT . () Ġ-> ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock : ĠT . () Ġ-> ĠUnit ): ĠT Ġ= Ġif Ġ( condition ()) Ġapply ( block ) Ġelse Ġthis Ċ Ċ inline Ġfun Ġ< T > ĠT . also If ( condition : Ġ( T ) Ġ-> ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock : Ġ( T ) Ġ-> ĠUnit ): ĠT Ġ= Ġif Ġ( condition ( this )) Ġalso ( block ) Ġelse Ġthis Ċ Ċ // Ġ[ self Ġt ernary Ġequals ] Ġa . run Ġ{ Ġif Ġ( this Ġ== Ġc ) Ġthis Ġelse Ġb Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . run Ġ{ Ġif Ġ( this Ġ!= Ġc ) Ġthis Ġelse Ġb Ġ} Ċ // Ġ> Ġb Ġ[ depends ] Ġon Ġa Ċ // ĠĠĠĠ Ġ< ==> Ġa . run Ġ{ Ġif Ġ( this Ġ== Ġc ) Ġthis Ġelse Ġb Ġ} Ċ // ĠĠĠĠ Ġ< ==> Ġa . let Ġ{ Ġif Ġ( it Ġ== Ġc ) Ġit Ġelse Ġit . b Ġ} Ċ // Ġ Ġ* Ġ Ġ< ==> Ġa . run If ({ Ġthis Ġ== Ġc Ġ}) Ġ{ Ġb Ġ} Ċ // ĠĠĠĠ Ġ< ==> Ġa . let If ({ Ġit Ġ== Ġc Ġ}) Ġ{ Ġit . b Ġ} Ċ // ĠĠĠĠ Ġ< ==> Ġa . run If ( c :: equals ) Ġ{ Ġb Ġ} Ċ // ĠĠĠĠ Ġ< ==> Ġa . run If ( c :: not Equals ) Ġ{ Ġb Ġ} Ċ // ĠĠĠĠ Ġ< ==> Ġa . run If Equals ( c ) Ġ{ Ġb Ġ} Ċ // Ġ> Ġb Ġ[ not Ġdepends ] Ġon Ġa Ċ // Ġ Ġ* Ġ Ġ< ==> Ġa . take If Ġ{ Ġit Ġ== Ġc Ġ} Ġ?: Ġb Ċ // ĠĠĠĠ Ġ< ==> Ġa . if It Ġ{ Ġthis Ġ== Ġc Ġ} Ġ?: Ġb Ċ // ĠĠĠĠ Ġ< ==> Ġa . if It Ġ{ Ġequals ( c ) Ġ} Ġ?: Ġb Ċ // ĠĠĠĠ Ġ< ==> Ġa . if It ( c :: equals ) Ġ?: Ġb Ċ // ĠĠĠĠ Ġ< ==> Ġa . if It ( c :: not Equals ) Ġ?: Ġb Ċ // ĠĠĠĠ Ġ< ==> Ġa . if It Equals ( c ) Ġ?: Ġb Ċ // ĠĠĠĠ Ġ< ==> Ġa . if It Not Equals ( c ) Ġ?: Ġb Ċ Ċ // fun ĠAny . not Equals ( other : ĠAny ?): ĠBoolean Ġ= Ġthis Ġ!= Ġother Ċ Ċ // Ġ============ Ċ // ĠBoolean ĠExtensions Ċ // Ġ============ Ċ Ċ // Ġboolean . also Ġ{ Ġif Ġ( it ) Ġblock () Ġ} Ġ< ==> Ġboolean . if True Ġ{ Ġblock () Ġ} Ċ inline Ġfun ĠBoolean . if True ( block : Ġ() Ġ-> ĠUnit ) Ġ= Ġalso Ġ{ Ġif Ġ( this ) Ġblock () Ġ} Ċ inline Ġfun ĠBoolean . if False ( block : Ġ() Ġ-> ĠUnit ) Ġ= Ġalso Ġ{ Ġif Ġ(! this ) Ġblock () Ġ} Ċ Ċ // Ġ============ Ċ // ĠBulk ĠComp arisons Ċ // Ġ============ Ċ Ċ class ĠAs Comparable < T >( val Ġvalue : ĠT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomparator : ĠComparator < T >) Ġ: ĠComparable < As Comparable < T >> Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġcompare To ( other : ĠAs Comparable < T >): ĠInt Ġ= Ġcomparator . compare ( value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ Ġother . value ) Ċ } Ċ Ċ fun Ġ< T > ĠT . as Comparable ( comparator : ĠComparator < T >) Ġ= ĠAs Comparable ( this , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomparator ) Ċ Ċ fun Ġ< T Ġ: ĠComparable < T >> ĠList < T >. as Comparable () Ġ= Ġas Comparable ( Comparator (:: compare List )) Ċ fun Ġ< T Ġ: ĠComparable < T >> ĠList < T >. compareTo ( other : ĠList < T >): ĠInt Ġ= Ġcompare List ( this , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠ Ġother ) Ċ Ċ private Ġfun Ġ< T Ġ: ĠComparable < T >> Ġcompare List ( a : ĠList < T >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb : ĠList < T >): ĠInt Ġ{ ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġmin Of ( a . size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb . size )) Ġ{ ĊĠĠĠĠĠĠĠ Ġa [ i ]. compareTo ( b [ i ]). let Ġ{ Ġif Ġ( it Ġ!= Ġ 0 ) Ġreturn Ġit Ġ} ĊĠĠĠ Ġ} Ġ// Ġlist Ġ 2 Ġshorter Ġthan Ġlist Ġ 1 Ġ=> Ġ 1 Ġelse Ġlonger Ġ=> Ġ- 1 ĊĠĠĠ Ġreturn Ġa . size Ġ- Ġb . size Ċ } Ċ Ċ fun Ġ< T > ĠList < Comparator < T >> . as Comparator () Ġ= ĠComparator < T >( :: compare ) Ċ fun Ġ< T > ĠList < Comparator < T >> . compare ( a : ĠT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb : ĠT ): ĠInt Ġ{ ĊĠĠĠ ĠforEach Ġ{ ĊĠĠĠĠĠĠĠ Ġit . compare ( a , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb ). let Ġ{ Ġresult Ġ-> Ġif Ġ( result Ġ!= Ġ 0 ) Ġreturn Ġresult Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġ 0 Ċ } Ċ Ċ // Ġ============ Ċ // Ġdep lete Ċ // Ġ============ Ċ Ċ // Ġlike Ġremove All Ġbut Ġallowing Ġlocal Ġreturns Ġto Ġstop Ġthe Ġwhile Ġloop Ċ // inline Ġfun Ġ< T > ĠMutable List < T >. dep lete ( action : Ġ( T ) Ġ-> ĠBoolean ) Ġ= Ġthis . apply Ġ{ Ċ // Ġ Ġval Ġit Ġ= Ġthis . iterator () Ċ // Ġ Ġwhile Ġ( it . hasNext ()) Ġ{ Ċ // ĠĠĠ Ġif Ġ( action ( it . next ())) Ġ{ Ċ // ĠĠĠĠĠ Ġit . remove () Ċ // ĠĠĠ Ġ} Ċ // Ġ Ġ} Ċ //} Ċ Ċ // inline Ġfun Ġ< T > ĠMutable List < T >. dep lete Re versed ( action : Ġ( T ) Ġ-> ĠBoolean ) Ġ= Ċ // Ġ Ġthis . as Re versed (). dep lete ( action ) Ċ