package Ġcom . github . j corn az . col le kt . stdlib Ċ Ċ import Ġcom . github . j corn az . col le kt . api . Persistent Set Ċ import Ġcom . github . j corn az . col le kt . api . Persistent Set Factory Ċ Ċ /** Ċ Ġ* ĠNa ive Ġimplementation Ġusing Ġkotlin Ġstandard Ġlists Ġand Ġoperators . Ċ Ġ* Ċ Ġ* ĠThis Ġis Ġthe Ġworse Ġpersistent Ġimplementation Ġpossible , Ġand Ġperform ances Ġof Ġall Ġmutation Ġmethod Ġare Ġexpected Ġto Ġbe Ġreally Ġbad . Ċ Ġ* Ċ Ġ* ĠIt Ġis Ġonly Ġuseful Ġfor Ġcomparison Ġpurposes Ġwith Ġother Ġpersistent Ġimplementations Ċ Ġ*/ Ċ public Ġclass ĠStd lib Set < out ĠE > Ġinternal Ġconstructor ( private Ġval Ġset : ĠSet < E >) Ġ: ĠAbstract Set < E >(), ĠPersistent Set < E > Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject ĠFactory Ġ: ĠPersistent Set Factory Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġempty Ġ= ĠStd lib Set < Nothing >( empty Set ()) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< E > Ġempty (): ĠPersistent Set < E > Ġ= Ġempty ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< E > Ġfrom ( elements : ĠIterable < E >): ĠPersistent Set < E > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( elements Ġis ĠStd lib Set < E >) Ġreturn Ġelements ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġset Ġ= Ġelements . to HashSet () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( set . isEmpty ()) Ġempty Ġelse ĠStd lib Set ( set ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġsize : ĠInt Ġget () Ġ= Ġset . size ĊĊĠĠĠ Ġoverride Ġfun ĠisEmpty (): ĠBoolean Ġ= Ġset . isEmpty () ĊĊĠĠĠ Ġoverride Ġfun Ġcontains ( element : Ġ@ Unsafe Variance ĠE ): ĠBoolean Ġ= Ġset . contains ( element ) ĊĠĠĠ Ġoverride Ġfun Ġcontains All ( elements : ĠCollection < @ Unsafe Variance ĠE >): ĠBoolean Ġ= Ġset . contains All ( elements ) ĊĊĠĠĠ Ġoverride Ġfun Ġiterator (): ĠIterator < E > Ġ= Ġset . iterator () ĊĊĠĠĠ Ġoverride Ġfun Ġplus ( element : Ġ@ Unsafe Variance ĠE ): ĠPersistent Set < E > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrap ( set Ġ+ Ġelement ) ĊĊĠĠĠ Ġoverride Ġfun Ġplus ( elements : ĠIterable < @ Unsafe Variance ĠE >): ĠPersistent Set < E > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrap ( set Ġ+ Ġelements ) ĊĊĠĠĠ Ġoverride Ġfun Ġminus ( element : Ġ@ Unsafe Variance ĠE ): ĠPersistent Set < E > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrap ( set Ġ- Ġelement ) ĊĊĠĠĠ Ġoverride Ġfun Ġminus ( elements : ĠIterable < @ Unsafe Variance ĠE >): ĠPersistent Set < E > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrap ( set Ġ- Ġelements ) ĊĊĠĠĠ Ġoverride Ġfun Ġempty (): ĠPersistent Set < E > Ġ= Ġempty ĊĊĠĠĠ Ġprivate Ġfun Ġwrap ( new Set : ĠSet < E >): ĠPersistent Set < E > Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġnew Set Ġ=== Ġset Ġ-> Ġthis ĊĠĠĠĠĠĠĠ Ġnew Set . isEmpty () Ġ-> Ġempty ĊĠĠĠĠĠĠĠ Ġelse Ġ-> ĠStd lib Set ( new Set ) ĊĠĠĠ Ġ} Ċ }