package Ġpw . bin om . concurrency čĊč Ċ import Ġkotlinx . c interop . Stable Ref č Ċ import Ġpw . bin om . do Freeze č Ċ import Ġpw . bin om . io . Closeable č Ċ import Ġpw . bin om . io . Closed Exception č Ċ import Ġkotlin . native . concurrent . Atomic Int č Ċ import Ġkotlin . properties . ReadOnly Property č Ċ import Ġkotlin . reflect . K Property čĊčĊč Ċ actual Ġclass ĠReference < T Ġ: ĠAny ?> Ġactual Ġconstructor ( value : ĠT ) Ġ: ĠClose able , ĠReadOnly Property < Any ?, ĠT > Ġ{ čĊĠĠĠ Ġprivate Ġval Ġptr Ġ= Ġvalue ?. let Ġ{ ĠSt able Ref . create ( it ) Ġ} čĊĠĠĠ Ġprivate Ġvar Ġclosed Ġ= ĠAtomic Int ( 0 ) čĊĠĠĠ Ġactual Ġval Ġowner Ġ= ĠThread Ref () čĊčĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") čĊĠĠĠ Ġactual Ġval Ġvalue : ĠT čĊĠĠĠĠĠĠĠ Ġget () Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( closed . value Ġ!= Ġ 0 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠClosed Exception () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! owner . same ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Can 't Ġget Ġaccess Ġto Ġvalue Ġfrom Ġother Ġthread ") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġptr ?. get () Ġas ĠT čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( closed . value Ġ!= Ġ 0 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠClosed Exception () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġclosed . value Ġ= Ġ 1 čĊĠĠĠĠĠĠĠ Ġptr ?. dispose () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġinit Ġ{ čĊĠĠĠĠĠĠĠ Ġdo Freeze () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun ĠgetValue ( this Ref : ĠAny ?, Ġproperty : ĠK Property < *> ): ĠT Ġ= čĊĠĠĠĠĠĠĠ Ġvalue č Ċ }