package Ġio . lam art . gyro . mutable Ċ Ċ import Ġio . lam art . gyro . Fold able Ċ import Ġio . lam art . gyro . immutable . Immutable Ċ import Ġio . lam art . gyro . variables . Variable Ċ import Ġio . lam art . gyro . variables . variable Of Ċ import Ġjava . util . concurrent . atomic . Atomic Reference Ċ Ċ class ĠMutable < T >( ĊĠĠĠ Ġprivate Ġval Ġget : Ġ() Ġ-> ĠT , ĊĠĠĠ Ġprivate Ġval Ġset : Ġ( T ) Ġ-> ĠUnit Ċ ) Ġ: ĠMutable Type < T >, ĠVariable < T > Ġby Ġvariable Of ( get , Ġset ) Ġ{ ĊĊĠĠĠ Ġfun Ġ< R > Ġselect ( transform : ĠT . () Ġ-> ĠR , Ġcopy : ĠT .( R ) Ġ-> ĠT ): ĠMutable < R > Ġ= ĊĠĠĠĠĠĠĠ ĠMutable ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġget (). let ( transform ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġcopy ( get (), Ġit ). let (:: set ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġfilter ( predicate : ĠT . () Ġ-> ĠBoolean ): ĠOptional Mutable < T > Ġ= ĊĠĠĠĠĠĠĠ Ġto Optional Mutable (). filter ( predicate ) ĊĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠR > Ġfilter () Ġ= ĊĠĠĠĠĠĠĠ Ġfilter ( R :: class . java :: is Instance ) ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġfun Ġ< R > Ġcast () Ġ= ĊĠĠĠĠĠĠĠ ĠMutable ({ Ġget () Ġas ĠR Ġ}, Ġ{ Ġset ( it Ġas ĠT ) Ġ}) ĊĊĠĠĠ Ġfun Ġintercept ( delegate : ĠMutable < T >. ( value : ĠT ) Ġ-> ĠVoid ): ĠMutable < T > Ġ= ĊĠĠĠĠĠĠĠ Ġintercept ({ Ġit Ġ}, Ġdelegate ) ĊĊĠĠĠ Ġfun Ġ< R > Ġintercept ( transform : Ġ( T ) Ġ-> ĠR , Ġdelegate : ĠMutable < T >. ( value : ĠR ) Ġ-> ĠVoid ): ĠMutable < R > Ġ= ĊĠĠĠĠĠĠĠ ĠMutable ({ Ġget (). let ( transform ) Ġ}, Ġ{ Ġdelegate ( this , Ġit ) Ġ}) ĊĊĠĠĠ Ġfun Ġto Optional Mutable (): ĠOptional Mutable < T > Ġ= ĊĠĠĠĠĠĠĠ ĠOptional Mutable ({ ĠFold able . some ( get ) Ġ}, Ġset ) Ċ Ċ } Ċ Ċ fun Ġ< T > ĠAtomic Reference < T >. to Mutable () Ġ= ĠMutable (:: get , Ġ:: set ) Ċ Ċ fun Ġ< T > ĠMutable < T >. to Immutable () Ġ= ĠImmutable ( this ) Ċ Ċ fun Ġ< T > Ġmutable Of ( get : Ġ() Ġ-> ĠT , Ġset : Ġ( T ) Ġ-> ĠUnit ): ĠMutable < T > Ġ= ĠMutable ( get , Ġset ) ĊĊ