/* Ċ Ġ* Ġ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 Ġkotlinx . collections . immutable . implement ations . immutable Set Ċ Ċ import Ġkotlinx . collections . immutable . Persistent Set Ċ import Ġkotlinx . collections . immutable . mutate Ċ Ċ internal Ġclass ĠPersistent HashSet < E >( internal Ġval Ġnode : ĠT rie Node < E >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġsize : ĠInt ): ĠAbstract Set < E >(), ĠPersistent Set < E > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġcontains ( element : ĠE ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnode . contains ( element . hashCode (), Ġelement , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd ( element : ĠE ): ĠPersistent Set < E > Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠnewNode Ġ= Ġnode . add ( element . hashCode (), Ġelement , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( node Ġ=== ĠnewNode ) Ġ{ Ġreturn Ġthis Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠPersistent HashSet ( new Node , Ġsize Ġ+ Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd All ( elements : ĠCollection < E >): ĠPersistent Set < E > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . mutate Ġ{ Ġit . addAll ( elements ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove ( element : ĠE ): ĠPersistent Set < E > Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠnewNode Ġ= Ġnode . remove ( element . hashCode (), Ġelement , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( node Ġ=== ĠnewNode ) Ġ{ Ġreturn Ġthis Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠPersistent HashSet ( new Node , Ġsize Ġ- Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove All ( elements : ĠCollection < E >): ĠPersistent Set < E > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmutate Ġ{ Ġit . removeAll ( elements ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove All ( predicate : Ġ( E ) Ġ-> ĠBoolean ): ĠPersistent Set < E > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmutate Ġ{ Ġit . removeAll ( predicate ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclear (): ĠPersistent Set < E > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPersistent HashSet . empty Of () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġiterator (): ĠIterator < E > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPersistent HashSet Iterator ( node ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbuilder (): ĠPersistent Set . Builder < E > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPersistent HashSet Builder ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠEMPTY Ġ= ĠPersistent HashSet ( T rie Node . EMPTY , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġ< E > Ġempty Of (): ĠPersistent Set < E > Ġ= ĠPersistent HashSet . EMPTY ĊĠĠĠ Ġ} Ċ } Ċ