/* Ċ Ġ* ĠMIT ĠLicense Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 ĠAnd re - max Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġcom . andre _ max . tik tok clone . utils . map Ċ Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . Observer Ċ Ċ class ĠSmart Map < K , ĠV >( private Ġval Ġskip Current Value Call : ĠBoolean Ġ= Ġfalse ) Ġ: ĊĠĠĠ ĠMutable LiveData < Smart Map < K , ĠV >> (), ĠIterable < Map . Entry < K , ĠV >> Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġmap : ĠHashMap < K , ĠV > Ġ= ĠHashMap () ĊĊĠĠĠ Ġvar Ġaction : ĠSmart Action ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġvar Ġaction Key : ĠK ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġvar Ġaction Value : ĠV ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġvar Ġaction Map : ĠMap < out ĠK , ĠV >? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġvar Ġresult Value : ĠV ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġoverride Ġfun Ġobserve ( owner : ĠLifecycle Owner , Ġobserver : ĠObserver < in ĠSmart Map < K , ĠV >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . observe ( owner ) Ġ{ Ġobserver . on Changed ( this ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġobserve Fore ver ( observer : ĠObserver < in ĠSmart Map < K , ĠV >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . observe Fore ver Ġ{ Ġobserver . on Changed ( this ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsignal Changed ( ĊĠĠĠĠĠĠĠ Ġaction : ĠSmart Action , ĊĠĠĠĠĠĠĠ Ġaction Key : ĠK ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġaction Value : ĠV ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġaction Map : ĠMap < out ĠK , ĠV >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġresult Value : ĠV ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( skip Current Value Call Ġ&& Ġ! has Active Observer s ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠ Ġthis . action Ġ= Ġaction ĊĠĠĠĠĠĠĠ Ġthis . action Key Ġ= Ġaction Key ĊĠĠĠĠĠĠĠ Ġthis . action Value Ġ= Ġaction Value ĊĠĠĠĠĠĠĠ Ġthis . action Map Ġ= Ġaction Map ĊĠĠĠĠĠĠĠ Ġthis . result Value Ġ= Ġresult Value ĊĠĠĠĠĠĠĠ Ġvalue Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġsize : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmap . size ĊĊĠĠĠ Ġfun ĠisEmpty (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmap . isEmpty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġmap . clear () ĊĠĠĠĠĠĠĠ Ġsignal Changed ( action Ġ= ĠSmart Action . Clear ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠWe 'll Ġget Ġthe Ġposition Ġif Ġcomment Group Ġ== Ġcomment Group Ġfails ĊĠĠĠ Ġfun Ġremove ( key : ĠK ): ĠV ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġmap . remove ( key ) ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsignal Changed ( action Ġ= ĠSmart Action . Remove , Ġaction Key Ġ= Ġkey , Ġresult Value Ġ= Ġvalue ) ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcontains Key ( key : ĠK ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmap . containsKey ( key ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcontains Value ( value : ĠV ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmap . contains Value ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġget ( key : ĠK ): ĠV ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmap [ key ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġentries : ĠMutable Set < Mutable Map . Mutable Entry < K , ĠV >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmap . entries ĊĊĠĠĠ Ġval Ġkeys : ĠMutable Set < K > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmap . keys ĊĊĠĠĠ Ġval Ġvalues : ĠMutable Collection < V > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmap . values ĊĊĠĠĠ Ġfun Ġput ( key : ĠK , Ġvalue : ĠV ): ĠV ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Value Ġ= Ġmap . put ( key , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġsignal Changed ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Ġ= ĠSmart Action . Put , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Key Ġ= Ġkey , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Value Ġ= Ġvalue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Value Ġ= Ġresult Value ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresult Value ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġset ( key : ĠK , Ġvalue : ĠV ): ĠV ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġput ( key , Ġvalue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġput All ( from : ĠMap < out ĠK , ĠV >) Ġ{ ĊĠĠĠĠĠĠĠ Ġmap . put All ( from ) ĊĠĠĠĠĠĠĠ Ġsignal Changed ( action Ġ= ĠSmart Action . Put All , Ġaction Map Ġ= Ġfrom ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠindexOf ( key : ĠK ) Ġ= Ġmap . keys . indexOf ( key ) ĊĊĠĠĠ Ġoverride Ġfun Ġiterator (): ĠIterator < Map . Entry < K , ĠV >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmap . iterator () ĊĠĠĠ Ġ} Ċ }