@ file : Suppress (" unused ", Ġ" NOTH ING _ TO _ INLINE ", Ġ" Member Visibility Can Be Private ") Ċ Ċ package Ġcom . commons ense . android . kotlin . base . extensions . collections Ċ Ċ import Ġandroid . support . annotation . Int Range Ċ import Ġandroid . util .* Ċ import Ġcom . commons ense . android . kotlin . base .* Ċ import Ġcom . commons ense . android . kotlin . base . algorithms .* Ċ import Ġcom . commons ense . android . kotlin . base . debug . pretty String Content Ċ import Ġkotlin . Pair Ċ Ċ type alias ĠSparse Array Entry Mapper < T , ĠO > Ġ= Ġ( key : ĠInt , Ġitem : ĠT ) Ġ-> ĠO Ċ Ċ /** Ċ Ġ* Ġsets Ġthe Ġcontent Ġto Ġthe Ġgiven Ġlist Ġof Ġpairs Ġ( unwrap s Ġthe Ġpair Ġinto Ġ( first Ġ Ġ-> Ġsecond ) Ċ Ġ*/ Ċ inline Ġfun ĠS parseInt Array . set ( input : ĠList < Pair < Int , ĠInt >>) Ġ{ ĊĠĠĠ Ġclear () ĊĠĠĠ Ġinput . forEach Ġ{ Ġput ( it . first , Ġit . second ) Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġsets Ġthe Ġcontent Ġto Ġthe Ġgiven Ġmap Ġ( unwrap s Ġthe Ġmap Ġinto Ġ( first Ġ Ġ-> Ġsecond ) Ċ Ġ*/ Ċ inline Ġfun ĠS parseInt Array . set ( input : ĠMap < Int , ĠInt >) Ġ{ ĊĠĠĠ Ġclear () ĊĠĠĠ Ġinput . forEach Ġ{ Ġput ( it . key , Ġit . value ) Ġ} Ċ } ĊĊ Ċ /** Ċ Ġ* ĠDescri bes Ġa Ġsparse Ġarray Ġentry . Ġwhich Ġis Ġa Ġkey Ġvalue Ġpair . Ċ Ġ*/ Ċ data Ġclass ĠSparse Array Entry < out ĠT >( @ Int Range ( from Ġ= Ġ 0 ) Ġval Ġkey : ĠInt , Ġval Ġvalue : ĠT ) Ċ Ċ /** Ċ Ġ* ĠConverts Ġa Ġsp are Array Ġto Ġa Ġlist . Ġit Ġwill Ġconvert Ġall Ġkeys , Ġunless Ġa Ġmax Ġkey Ġis Ġspecified . Ċ Ġ* Ġ@ receiver ĠSparse Array < T > Ċ Ġ* Ġ@ param Ġmax KeyValue ĠInt Ċ Ġ* Ġ@ return ĠList < Sparse Array Entry < T >> Ċ Ġ*/ Ċ inline Ġfun Ġ< T > ĠSparse Array < T >. toList ( ĊĠĠĠĠĠĠĠ Ġ@ Int Range ( from Ġ= Ġ 1 ) Ġmax KeyValue : ĠInt Ġ= ĠInt . MAX _ VALUE ): ĠList < Sparse Array Entry < T >> Ġ{ ĊĠĠĠ Ġval Ġmapped Ġ= Ġ( 0 Ġuntil Ġsize ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( this :: key At ) ĊĠĠĠ Ġreturn Ġif Ġ( max KeyValue Ġ< ĠInt . MAX _ VALUE ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmapped . take While Ġ{ Ġit Ġ<= Ġmax KeyValue Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġmapped ĊĠĠĠ Ġ}. map NotNull Ġ{ Ġkey Ġ-> Ġget ( key )?. let Ġ{ ĠSparse Array Entry ( key , Ġit ) Ġ} Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġfinds Ġthe Ġelement Ġthat Ġfirst ly Ġsatisfy Ġa Ġgiven Ġcondition . Ċ Ġ* Ġ@ receiver ĠSparse Array < T > Ċ Ġ* Ġ@ param Ġcondition ĠFunction 2 < Int , T , ĠBoolean > Ġ( int Ġis Ġthe Ġkey , ĠT Ġis Ġthe Ġvalue ) Ċ Ġ* Ġ@ return ĠT ? Ċ Ġ*/ Ċ inline Ġfun Ġ< T > ĠSparse Array < T >. findFirst ( ĊĠĠĠĠĠĠĠ Ġcross inline Ġcondition : ĠSparse Array Entry Mapper < T , ĠBoolean >): ĠSparse Array Entry < T >? Ġ{ ĊĠĠĠ Ġval Ġsize Ġ= Ġsize () ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġkey At ( i ) ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġget ( key ) ĊĠĠĠĠĠĠĠ Ġ// never Ġfound Ġsomething Ġthat Ġful filled Ġthe Ġcondition Ġso Ġreturn Ġthat ĊĠĠĠĠĠĠĠ Ġif Ġ( condition ( key , Ġitem )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSparse Array Entry ( key , Ġitem ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// we Ġnever Ġfound Ġanything Ġthat Ġful filled Ġthe Ġcondition ĊĠĠĠ Ġreturn Ġnull Ċ } ĊĊ Ċ /** Ċ Ġ* Ġconverts Ġeach Ġelement Ġin Ġthe Ġsparse Ġarray Ġusing Ġthe Ġmapper Ċ Ġ*/ Ċ inline Ġfun Ġ< E , ĠU > ĠSparse Array < E >. map ( mapper : ĠMap Function < E , ĠU >): ĠList < U > Ġ{ ĊĠĠĠ Ġreturn Ġmutable ListOf < U >(). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis @ map . forEach Ġ{ Ġadd ( mapper ( it )) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠIter ates Ġover Ġall Ġthe Ġvalues Ġthis Ġsparse Ġarray Ċ Ġ* Ġ@ receiver ĠSparse Array < E > Ċ Ġ* Ġ@ param Ġaction ĠFunction Unit < E > Ċ Ġ*/ Ċ inline Ġfun Ġ< E > ĠSparse Array < E >. forEach ( action : ĠFunction Unit < E >) Ġ{ ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġsize ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġvalue At ( i ) ĊĠĠĠĠĠĠĠ Ġaction ( value ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠIter ates Ġover Ġall Ġthe Ġkeys Ġand Ġvalues Ġthis Ġsparse Ġarray Ċ Ġ* Ġ@ receiver ĠSparse Array < E > Ċ Ġ* Ġ@ param Ġaction Ġ( key : ĠInt , Ġvalue : ĠE ) Ġ-> ĠUnit Ċ Ġ*/ Ċ inline Ġfun Ġ< E > ĠSparse Array < E >. forEach KeyValue ( action : Ġ( key : ĠInt , Ġvalue : ĠE ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġsize ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġkey At ( i ) ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġvalue At ( i ) ĊĠĠĠĠĠĠĠ Ġaction ( key , Ġvalue ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠIter ates Ġover Ġall Ġthe Ġkeys Ġand Ġvalues Ġwith Ġthe Ġindex Ġin Ġthis Ġsparse Ġarray Ċ Ġ* Ġ@ receiver ĠSparse Array < E > Ċ Ġ* Ġ@ param Ġaction Ġ( key : ĠInt , Ġvalue : ĠE , Ġindex : ĠInt ) Ġ-> ĠUnit Ċ Ġ*/ Ċ inline Ġfun Ġ< E > ĠSparse Array < E >. forEach Indexed ( action : Ġ( key : ĠInt , Ġvalue : ĠE , Ġindex : ĠInt ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġval Ġsize Ġ= Ġsize () ĊĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġkey At ( index ) ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġvalue At ( index ) ĊĠĠĠĠĠĠĠ Ġaction ( key , Ġvalue , Ġindex ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠComputes Ġa Ġpretty Ġstring Ġrepresentation Ġof Ġthis ĠSparse Array . Ċ Ġ* Ġ@ receiver ĠSparse Array < E > Ċ Ġ*/ Ċ inline Ġfun Ġ< E > ĠSparse Array < E >. to Pretty String (): ĠString Ġ{ ĊĠĠĠ Ġval Ġsize Ġ= Ġsize () ĊĠĠĠ Ġval Ġcontent Ġ= Ġmutable ListOf (" size : Ġ$ size ") ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġkey At ( i ) ĊĠĠĠĠĠĠĠ Ġval Ġelement Ġ= Ġthis . get ( key ) ĊĠĠĠĠĠĠĠ Ġcontent . add ("$ key Ġ= Ġ$ element ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġ" Sparse Array Ġstate : Ġ" Ġ+ Ġcontent . pretty String Content () Ċ } Ċ Ċ /** Ċ Ġ* ĠRetrieves Ġboth Ġthe Ġkey Ġand Ġvalue Ġfor Ġa Ġgiven Ġindex , Ġif Ġvalid . Ċ Ġ* Ġ@ receiver ĠSparse Array < E > Ċ Ġ* Ġ@ param Ġindex ĠInt Ġthe Ġindex Ġto Ġlookup Ċ Ġ* Ġ@ return ĠPair < Int , ĠE >? Ġnull Ġif Ġthe Ġindex Ġis Ġoutside Ġof Ġrange . Ġotherwise Ġthe Ġkey Ġand Ġvalue Ċ Ġ*/ Ċ inline Ġfun Ġ< E > ĠSparse Array < E >. key Value At ( index : ĠInt ): ĠPair < Int , ĠE >? Ġ= Ġwhen Ġ( is Index Valid ( index )) Ġ{ ĊĠĠĠ Ġtrue Ġ-> ĠPair ( key At ( index ), Ġvalue At ( index )) ĊĠĠĠ Ġelse Ġ-> Ġnull Ċ } Ċ Ċ /** Ċ Ġ* ĠTell s Ġif Ġthe Ġgiven Ġindex Ġis Ġwithin Ġthis ĠSparse Array Ġsize . Ġ( NOT ĠKEY ĠVALUES ) Ċ Ġ* Ġ@ receiver ĠSparse Array < E > Ċ Ġ* Ġ@ param Ġindex ĠInt Ġthe Ġraw Ġindex Ġto Ġvalidate . Ċ Ġ* Ġ@ return ĠBoolean Ġtrue Ġif Ġit Ġis Ġa Ġvalid Ġindex Ġ, Ġfalse Ġotherwise Ċ Ġ*/ Ċ inline Ġfun Ġ< E > ĠSparse Array < E >. is Index Valid ( index : ĠInt ): ĠBoolean Ġ= Ġindex Ġ>= Ġ 0 Ġ&& Ġindex Ġ< Ġsize () Ċ Ċ /** Ċ Ġ* ĠPerforms Ġa Ġbinary Ġsearch Ġon Ġthe Ġgiven ĠSparse Array , Ġusing Ġthe Ġgiven Ġcomparing Ġfunction . Ċ Ġ* Ġ@ receiver ĠSparse Array < E > Ċ Ġ* Ġ@ param Ġcompare ĠFunction 2 < E , ĠInt , ĠComp aring > Ġa Ġcomparison Ġfunction . Ċ Ġ* Ġ@ return ĠSparse Array Entry < E >? Ġnull Ġif Ġno Ġmatching Ġentry Ġwas Ġfound , Ġor Ġthe Ġfound Ġentry Ċ Ġ*/ Ċ inline Ġfun Ġ< E > ĠSparse Array < E >. binary Search ( cross inline Ġcompare : ĠFunction 2 < E , ĠInt , ĠComp aring >): ĠSparse Array Entry < E >? Ġ{ ĊĠĠĠ Ġvar Ġstart Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġend Ġ= Ġsize () ĊĠĠĠ Ġwhile Ġ( start Ġ< Ġend ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmid Ġ= Ġstart Ġ+ Ġ( end Ġ- Ġstart ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġ( key , Ġvalue ) Ġ= Ġkey Value At ( mid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠException (" should Ġnever Ġhappen , Ġmid Ġ= Ġ$ mid , Ġstart Ġ= Ġ$ start , Ġend Ġ= Ġ$ end Ġ\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġpretty ĠSparse Array Ġ= Ġ${ to Pretty String () }") ĊĠĠĠĠĠĠĠ Ġwhen Ġ( compare ( value , Ġmid )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠComp aring . L arger Than Ġ-> Ġstart Ġ= Ġmid Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠComp aring . LessThan Ġ-> Ġend Ġ= Ġmid ĊĠĠĠĠĠĠĠĠĠĠĠ ĠComp aring . Equal Ġ-> Ġreturn ĠSparse Array Entry ( key , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġnull Ċ }