/* Ċ Ġ* ĠCopyright Ġ 2 0 1 6 - 2 0 1 9 ĠJetBrains Ġs . r . o . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 ĠLicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE . txt Ġfile . Ċ Ġ*/ Ċ Ċ package Ġandroidx . compose . runtime . external . kotlin x . collections . immutable . implement ations . persistent Ordered Map Ċ Ċ import Ġandroidx . compose . runtime . external . kotlin x . collections . immutable . Immutable Collection Ċ import Ġandroidx . compose . runtime . external . kotlin x . collections . immutable . Immutable Set Ċ import Ġandroidx . compose . runtime . external . kotlin x . collections . immutable . Persistent Map Ċ import Ġandroidx . compose . runtime . external . kotlin x . collections . immutable . implement ations . immutable Map . Persistent HashMap Ċ import Ġandroidx . compose . runtime . external . kotlin x . collections . immutable . internal . EndOf Chain Ċ import Ġandroidx . compose . runtime . external . kotlin x . collections . immutable . mutate Ċ Ċ internal Ġclass ĠLinked Value < V >( val Ġvalue : ĠV , Ġval Ġprevious : ĠAny ?, Ġval Ġnext : ĠAny ?) Ġ{ ĊĠĠĠ Ġ/** ĠConstructs ĠLinked Value Ġfor Ġa Ġnew Ġsingle Ġentry Ġ*/ ĊĠĠĠ Ġconstructor ( value : ĠV ) Ġ: Ġthis ( value , ĠEnd Of Chain , ĠEnd Of Chain ) ĊĠĠĠ Ġ/** ĠConstructs ĠLinked Value Ġfor Ġa Ġnew Ġlast Ġentry Ġ*/ ĊĠĠĠ Ġconstructor ( value : ĠV , Ġprevious : ĠAny ?) Ġ: Ġthis ( value , Ġprevious , ĠEnd Of Chain ) ĊĊĠĠĠ Ġfun Ġwith Value ( newValue : ĠV ) Ġ= ĠLinked Value ( newValue , Ġprevious , Ġnext ) ĊĠĠĠ Ġfun Ġwith Previous ( new Previous : ĠAny ?) Ġ= ĠLinked Value ( value , Ġnew Previous , Ġnext ) ĊĠĠĠ Ġfun Ġwith Next ( new Next : ĠAny ?) Ġ= ĠLinked Value ( value , Ġprevious , Ġnew Next ) ĊĊĠĠĠ Ġval Ġhas Next Ġget () Ġ= Ġnext Ġ!== ĠEnd Of Chain ĊĠĠĠ Ġval Ġhas Previous Ġget () Ġ= Ġprevious Ġ!== ĠEnd Of Chain Ċ } Ċ Ċ internal Ġclass ĠPersistent Ordered Map < K , ĠV >( ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġfirst Key : ĠAny ?, ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġlast Key : ĠAny ?, ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġhash Map : ĠPersistent HashMap < K , ĠLinked Value < V >> Ċ ) Ġ: ĠAbstract Map < K , ĠV >(), ĠPersistent Map < K , ĠV > Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġsize : ĠInt Ġget () Ġ= Ġhash Map . size ĊĊĠĠĠ Ġoverride Ġval Ġkeys : ĠImmutable Set < K > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPersistent Ordered Map Keys ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġvalues : ĠImmutable Collection < V > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPersistent Ordered Map Values ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġentries : ĠImmutable Set < Map . Entry < K , ĠV >> ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcreate Entries () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Entries (): ĠImmutable Set < Map . Entry < K , ĠV >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPersistent Ordered Map Entries ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTODO : Ġcompiler Ġbug : Ġthis Ġbridge Ġshould Ġbe Ġgenerated Ġautomatically ĊĠĠĠ Ġ@ Published Api ĊĠĠĠ Ġinternal Ġfun Ġget Entries (): ĠSet < Map . Entry < K , ĠV >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcreate Entries () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcontains Key ( key : ĠK ): ĠBoolean Ġ= Ġhash Map . containsKey ( key ) ĊĊĠĠĠ Ġoverride Ġfun Ġget ( key : ĠK ): ĠV ? Ġ= Ġhash Map [ key ]?. value ĊĊĠĠĠ Ġoverride Ġfun Ġput ( key : ĠK , Ġvalue : Ġ@ Unsafe Variance ĠV ): ĠPersistent Ordered Map < K , ĠV > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Map Ġ= Ġhash Map . put ( key , ĠLinked Value ( value )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPersistent Ordered Map ( key , Ġkey , Ġnew Map ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlinks Ġ= Ġhash Map [ key ] ĊĠĠĠĠĠĠĠ Ġif Ġ( links Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( links . value Ġ=== Ġvalue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Map Ġ= Ġhash Map . put ( key , Ġlinks . with Value ( value )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPersistent Ordered Map ( first Key , Ġlast Key , Ġnew Map ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġval Ġlast Key Ġ= Ġlast Key Ġas ĠK ĊĠĠĠĠĠĠĠ Ġval Ġlast Links Ġ= Ġhash Map [ last Key ] !! Ċ // ĠĠĠĠĠĠĠ Ġassert (! last Link . hasNext ) ĊĠĠĠĠĠĠĠ Ġval Ġnew Map Ġ= Ġhash Map ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ( last Key , Ġlast Links . with Next ( key )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ( key , ĠLinked Value ( value , Ġprevious Ġ= Ġlast Key )) ĊĠĠĠĠĠĠĠ Ġreturn ĠPersistent Ordered Map ( first Key , Ġkey , Ġnew Map ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove ( key : ĠK ): ĠPersistent Ordered Map < K , ĠV > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlinks Ġ= Ġhash Map [ key ] Ġ?: Ġreturn Ġthis ĊĊĠĠĠĠĠĠĠ Ġvar Ġnew Map Ġ= Ġhash Map . remove ( key ) ĊĠĠĠĠĠĠĠ Ġif Ġ( links . has Previous ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprevious Links Ġ= Ġnew Map [ links . previous ] !! Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( previous Links . next Ġ== Ġkey ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Map Ġ= Ġnew Map . put ( links . previous Ġas ĠK , Ġprevious Links . with Next ( links . next )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( links . hasNext ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Links Ġ= Ġnew Map [ links . next ] !! Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( next Links . previous Ġ== Ġkey ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Map Ġ= Ġnew Map . put ( links . next Ġas ĠK , Ġnext Links . with Previous ( links . previous )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġnew First Key Ġ= Ġif Ġ(! links . has Previous ) Ġlinks . next Ġelse Ġfirst Key ĊĠĠĠĠĠĠĠ Ġval Ġnew Last Key Ġ= Ġif Ġ(! links . hasNext ) Ġlinks . previous Ġelse Ġlast Key ĊĠĠĠĠĠĠĠ Ġreturn ĠPersistent Ordered Map ( new First Key , Ġnew Last Key , Ġnew Map ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove ( key : ĠK , Ġvalue : Ġ@ Unsafe Variance ĠV ): ĠPersistent Ordered Map < K , ĠV > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlinks Ġ= Ġhash Map [ key ] Ġ?: Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( links . value Ġ== Ġvalue ) Ġthis . remove ( key ) Ġelse Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput All ( m : ĠMap < out ĠK , Ġ@ Unsafe Variance ĠV >): ĠPersistent Map < K , ĠV > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . mutate Ġ{ Ġit . put All ( m ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclear (): ĠPersistent Map < K , ĠV > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġempty Of () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbuilder (): ĠPersistent Map . Builder < K , ĠV > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPersistent Ordered Map Builder ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠEMPTY Ġ= ĠPersistent Ordered Map < Nothing , ĠNothing >( EndOf Chain , ĠEnd Of Chain , ĠPersistent HashMap . empty Of ()) ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġ< K , ĠV > Ġempty Of (): ĠPersistent Ordered Map < K , ĠV > Ġ= ĠEMPTY Ġas ĠPersistent Ordered Map < K , ĠV > ĊĠĠĠ Ġ} Ċ }