package Ġde . west erm ann . k observe . list Ċ Ċ import Ġde . west erm ann . k observe . ReadOnly Property Ċ import Ġde . west erm ann . k observe . property . property Ċ Ċ class ĠSort edList < T >( ĊĠĠĠ Ġparent : ĠObservable ReadOnly List < T >, ĊĠĠĠ Ġcomparator : ĠComparator < T > Ċ ) Ġ: ĠRel ational List < T >( parent ) Ġ{ ĊĊĠĠĠ Ġval Ġcomparator Property Ġ= Ġproperty ( comparator ) ĊĠĠĠ Ġvar Ġcomparator Ġby Ġcomparator Property ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Relation () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( parent . size Ġ!= Ġrelation . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrelation . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrelation . addAll (( 0 Ġuntil Ġparent . size ). map Ġ{ ĠRelation ( it , Ġparent [ it ]. hashCode ()) Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsort Section ( relation . to Mutable List (), Ġrelation , Ġ 0 , Ġrelation . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmerge Hal ves ( ĊĠĠĠĠĠĠĠ Ġwork A : ĠMutable List < Relation >, ĊĠĠĠĠĠĠĠ Ġwork B : ĠMutable List < Relation >, ĊĠĠĠĠĠĠĠ Ġstart : ĠInt , ĊĠĠĠĠĠĠĠ Ġmid : ĠInt , ĊĠĠĠĠĠĠĠ Ġexclusive End : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġp 1 Ġ= Ġstart ĊĠĠĠĠĠĠĠ Ġvar Ġp 2 Ġ= Ġmid ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġstart Ġuntil Ġexclusive End ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( p 1 Ġ< Ġmid Ġ&& Ġ( p 2 Ġ== Ġexclusive End Ġ|| Ġcomparator . compare ( parent [ work A [ p 1 ]. index ], Ġparent [ work A [ p 2 ]. index ]) Ġ<= Ġ 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwork B [ i ] Ġ= Ġwork A [ p 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 1 ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwork B [ i ] Ġ= Ġwork A [ p 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 2 ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsort Section ( ĊĠĠĠĠĠĠĠ Ġinput : ĠMutable List < Relation >, ĊĠĠĠĠĠĠĠ Ġoutput : ĠMutable List < Relation >, ĊĠĠĠĠĠĠĠ Ġstart : ĠInt , ĊĠĠĠĠĠĠĠ Ġexclusive End : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( exclusive End Ġ- Ġstart Ġ<= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmid Ġ= Ġ( start Ġ+ Ġexclusive End ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġsort Section ( output , Ġinput , Ġstart , Ġmid ) ĊĠĠĠĠĠĠĠ Ġsort Section ( output , Ġinput , Ġmid , Ġexclusive End ) ĊĠĠĠĠĠĠĠ Ġmerge Hal ves ( input , Ġoutput , Ġstart , Ġmid , Ġexclusive End ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ== Ġnull Ġ|| Ġthis :: class Ġ!= Ġother :: class ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġother Ġas ĠSort edList < *> ĊĊĠĠĠĠĠĠĠ Ġif Ġ( parent Ġ!= Ġother . parent ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( comparator Ġ!= Ġother . comparator ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġparent . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġcomparator . hashCode () ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĊĠĠĠĠĠĠĠ Ġcomparator Property . onChange Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġ< T > ĠObservable ReadOnly List < T >. sort Observable ( comparator : ĠComparator < T >): ĠSort edList < T > Ġ= ĊĠĠĠ ĠSort edList ( this , Ġcomparator ) Ċ Ċ fun Ġ< T > ĠObservable ReadOnly List < T >. sort Observable ( comparator Property : ĠReadOnly Property < Comparator < T >> ): ĠSort edList < T > Ġ= ĊĠĠĠ ĠSort edList ( this , Ġcomparator Property . value ). also Ġ{ ĊĠĠĠĠĠĠĠ Ġit . comparator Property . bind ( comparator Property ) ĊĠĠĠ Ġ} Ċ