// ĠWITH _ STD LIB Ċ // ĠWORK S _ WHEN _ VALUE _ CLASS Ċ // ĠLANGUAGE : Ġ+ Value Classes Ċ Ċ OPTIONAL _ JVM _ INLINE _ AN NOT ATION Ċ value Ġclass ĠZ ( val Ġx : ĠInt ) Ċ Ċ OPTIONAL _ JVM _ INLINE _ AN NOT ATION Ċ value Ġclass ĠZ 2 ( val Ġx : ĠZ ) Ċ Ċ fun Ġz 2 ( x : ĠInt ) Ġ= ĠZ 2 ( Z ( x )) Ċ Ċ OPTIONAL _ JVM _ INLINE _ AN NOT ATION Ċ value Ġclass ĠZ Mutable Collection ( private Ġval Ġms : ĠMutable Collection < Z >) Ġ: ĠMutable Collection < Z > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġadd ( element : ĠZ ): ĠBoolean Ġ= Ġms . add ( element ) ĊĠĠĠ Ġoverride Ġfun Ġadd All ( elements : ĠCollection < Z >): ĠBoolean Ġ= Ġms . addAll ( elements ) ĊĠĠĠ Ġoverride Ġfun Ġclear () Ġ{ Ġms . clear () Ġ} ĊĠĠĠ Ġoverride Ġfun Ġiterator (): ĠMutable Iterator < Z > Ġ= Ġms . iterator () ĊĠĠĠ Ġoverride Ġfun Ġremove ( element : ĠZ ): ĠBoolean Ġ= Ġms . remove ( element ) ĊĠĠĠ Ġoverride Ġfun Ġremove All ( elements : ĠCollection < Z >): ĠBoolean Ġ= Ġms . removeAll ( elements ) ĊĠĠĠ Ġoverride Ġfun Ġretain All ( elements : ĠCollection < Z >): ĠBoolean Ġ= Ġms . retain All ( elements ) ĊĠĠĠ Ġoverride Ġval Ġsize : ĠInt Ġget () Ġ= Ġms . size ĊĠĠĠ Ġoverride Ġfun Ġcontains ( element : ĠZ ): ĠBoolean Ġ= Ġms . contains ( element ) ĊĠĠĠ Ġoverride Ġfun Ġcontains All ( elements : ĠCollection < Z >): ĠBoolean Ġ= Ġms . contains All ( elements ) ĊĠĠĠ Ġoverride Ġfun ĠisEmpty (): ĠBoolean Ġ= Ġms . isEmpty () Ċ } Ċ Ċ OPTIONAL _ JVM _ INLINE _ AN NOT ATION Ċ value Ġclass ĠZ 2 Mutable Collection ( private Ġval Ġms : ĠMutable Collection < Z 2 >) Ġ: ĠMutable Collection < Z 2 > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġadd ( element : ĠZ 2 ): ĠBoolean Ġ= Ġms . add ( element ) ĊĠĠĠ Ġoverride Ġfun Ġadd All ( elements : ĠCollection < Z 2 >): ĠBoolean Ġ= Ġms . addAll ( elements ) ĊĠĠĠ Ġoverride Ġfun Ġclear () Ġ{ Ġms . clear () Ġ} ĊĠĠĠ Ġoverride Ġfun Ġiterator (): ĠMutable Iterator < Z 2 > Ġ= Ġms . iterator () ĊĠĠĠ Ġoverride Ġfun Ġremove ( element : ĠZ 2 ): ĠBoolean Ġ= Ġms . remove ( element ) ĊĠĠĠ Ġoverride Ġfun Ġremove All ( elements : ĠCollection < Z 2 >): ĠBoolean Ġ= Ġms . removeAll ( elements ) ĊĠĠĠ Ġoverride Ġfun Ġretain All ( elements : ĠCollection < Z 2 >): ĠBoolean Ġ= Ġms . retain All ( elements ) ĊĠĠĠ Ġoverride Ġval Ġsize : ĠInt Ġget () Ġ= Ġms . size ĊĠĠĠ Ġoverride Ġfun Ġcontains ( element : ĠZ 2 ): ĠBoolean Ġ= Ġms . contains ( element ) ĊĠĠĠ Ġoverride Ġfun Ġcontains All ( elements : ĠCollection < Z 2 >): ĠBoolean Ġ= Ġms . contains All ( elements ) ĊĠĠĠ Ġoverride Ġfun ĠisEmpty (): ĠBoolean Ġ= Ġms . isEmpty () Ċ } Ċ Ċ fun Ġbox (): ĠString Ġ{ ĊĠĠĠ Ġval Ġz c 1 Ġ= ĠZ Mutable Collection ( mutable ListOf ( Z ( 1 ), ĠZ ( 2 ), ĠZ ( 3 ))) ĊĠĠĠ Ġz c 1 . remove ( Z ( 1 )) ĊĠĠĠ Ġif Ġ( Z ( 1 ) Ġin Ġz c 1 ) Ġthrow ĠAssertionError (" Z ( 1 ) Ġin Ġz c 1 ") ĊĊĠĠĠ Ġval Ġz c 2 Ġ= ĠZ 2 Mutable Collection ( mutable ListOf ( z 2 ( 1 ), Ġz 2 ( 2 ), Ġz 2 ( 3 ))) ĊĠĠĠ Ġz c 2 . remove ( z 2 ( 1 )) ĊĠĠĠ Ġif Ġ( z 2 ( 1 ) Ġin Ġz c 2 ) Ġthrow ĠAssertionError (" z 2 ( 1 ) Ġin Ġz c 2 ") ĊĊĠĠĠ Ġreturn Ġ" OK " Ċ }