/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 8 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ċ Ġ* Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ Ċ package Ġkotlin . native . concurrent Ċ Ċ import Ġkotlin . native . internal . Export TypeInfo Ċ import Ġkotlin . native . internal . Frozen Ċ import Ġkotlin . native . internal . Leak Detector Candidate Ċ import Ġkotlin . native . internal . No Re order Fields Ċ import Ġkotlin . native . Symbol Name Ċ import Ġkotlinx . c interop . Native Ptr Ċ Ċ /** Ċ Ġ* ĠAtomic Ġvalues Ġand Ġfree zing : Ġatom ics Ġ[ Atomic Int ], Ġ[ Atomic Long ], Ġ[ Atomic Native Ptr ] Ġand Ġ[ Atomic Reference ] Ċ Ġ* Ġare Ġunique Ġtypes Ġwith Ġregard Ġto Ġfree zing . ĠName ly , Ġthey Ġprovide Ġmut ating Ġoperations , Ġwhile Ġcan Ġparticip ate Ċ Ġ* Ġin Ġfrozen Ġsub graphs . ĠSo Ġshared Ġfrozen Ġobjects Ġcan Ġhave Ġfields Ġof Ġatomic Ġtypes . Ċ Ġ*/ Ċ @ Frozen Ċ public Ġclass ĠAtomic Int ( private Ġvar Ġvalue _: ĠInt ) Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġvalue Ġbeing Ġheld Ġby Ġthis Ġclass . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġvar Ġvalue : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġget Impl () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( new ) Ġ= Ġset Impl ( new ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIn crements Ġthe Ġvalue Ġby Ġ[ delta ] Ġand Ġreturns Ġthe Ġnew Ġvalue . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdelta Ġthe Ġvalue Ġto Ġadd ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġnew Ġvalue ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Symbol Name (" Kotlin _ Atomic Int _ add AndGet ") ĊĠĠĠ Ġexternal Ġpublic Ġfun Ġadd AndGet ( delta : ĠInt ): ĠInt ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠComp ares Ġvalue Ġwith Ġ[ expected ] Ġand Ġreplaces Ġit Ġwith Ġ[ new ] Ġvalue Ġif Ġvalues Ġmatches . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġexpected Ġthe Ġexpected Ġvalue ĊĠĠĠĠ Ġ* Ġ@ param Ġnew Ġthe Ġnew Ġvalue ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġold Ġvalue ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Symbol Name (" Kotlin _ Atomic Int _ compare And Swap ") ĊĠĠĠ Ġexternal Ġpublic Ġfun Ġcompare And Swap ( expected : ĠInt , Ġnew : ĠInt ): ĠInt ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠComp ares Ġvalue Ġwith Ġ[ expected ] Ġand Ġreplaces Ġit Ġwith Ġ[ new ] Ġvalue Ġif Ġvalues Ġmatches . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġexpected Ġthe Ġexpected Ġvalue ĊĠĠĠĠ Ġ* Ġ@ param Ġnew Ġthe Ġnew Ġvalue ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġsuccessful ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Symbol Name (" Kotlin _ Atomic Int _ compare AndSet ") ĊĠĠĠ Ġexternal Ġpublic Ġfun Ġcompare AndSet ( expected : ĠInt , Ġnew : ĠInt ): ĠBoolean ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIn crements Ġvalue Ġby Ġone . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġincrement (): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġadd AndGet ( 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDec re ments Ġvalue Ġby Ġone . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġdecrement (): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġadd AndGet (- 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġstring Ġrepresentation Ġof Ġthis Ġobject . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġstring Ġrepresentation ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġvalue . toString () ĊĊĠĠĠ Ġ// ĠImplementation Ġdetails . ĊĠĠĠ Ġ@ Symbol Name (" Kotlin _ Atomic Int _ set ") ĊĠĠĠ Ġprivate Ġexternal Ġfun Ġset Impl ( new : ĠInt ): ĠUnit ĊĊĠĠĠ Ġ@ Symbol Name (" Kotlin _ Atomic Int _ get ") ĊĠĠĠ Ġprivate Ġexternal Ġfun Ġget Impl (): ĠInt Ċ } Ċ Ċ @ Frozen Ċ public Ġclass ĠAtomic Long ( private Ġvar Ġvalue _: ĠLong Ġ= Ġ 0 ) Ġ Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġvalue Ġbeing Ġheld Ġby Ġthis Ġclass . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġvar Ġvalue : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġget Impl () ĊĠĠĠĠĠĠĠ Ġset ( new ) Ġ= Ġset Impl ( new ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIn crements Ġthe Ġvalue Ġby Ġ[ delta ] Ġand Ġreturns Ġthe Ġnew Ġvalue . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdelta Ġthe Ġvalue Ġto Ġadd ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġnew Ġvalue ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Symbol Name (" Kotlin _ Atomic Long _ add AndGet ") ĊĠĠĠ Ġexternal Ġpublic Ġfun Ġadd AndGet ( delta : ĠLong ): ĠLong ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIn crements Ġthe Ġvalue Ġby Ġ[ delta ] Ġand Ġreturns Ġthe Ġnew Ġvalue . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdelta Ġthe Ġvalue Ġto Ġadd ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġnew Ġvalue ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġadd AndGet ( delta : ĠInt ): ĠLong Ġ= Ġadd AndGet ( delta . to Long ()) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠComp ares Ġvalue Ġwith Ġ[ expected ] Ġand Ġreplaces Ġit Ġwith Ġ[ new ] Ġvalue Ġif Ġvalues Ġmatches . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġexpected Ġthe Ġexpected Ġvalue ĊĠĠĠĠ Ġ* Ġ@ param Ġnew Ġthe Ġnew Ġvalue ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġold Ġvalue ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Symbol Name (" Kotlin _ Atomic Long _ compare And Swap ") ĊĠĠĠ Ġexternal Ġpublic Ġfun Ġcompare And Swap ( expected : ĠLong , Ġnew : ĠLong ): ĠLong ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠComp ares Ġvalue Ġwith Ġ[ expected ] Ġand Ġreplaces Ġit Ġwith Ġ[ new ] Ġvalue Ġif Ġvalues Ġmatches . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġexpected Ġthe Ġexpected Ġvalue ĊĠĠĠĠ Ġ* Ġ@ param Ġnew Ġthe Ġnew Ġvalue ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġsuccessful , Ġfalse Ġif Ġstate Ġis Ġunchanged ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Symbol Name (" Kotlin _ Atomic Long _ compare AndSet ") ĊĠĠĠ Ġexternal Ġpublic Ġfun Ġcompare AndSet ( expected : ĠLong , Ġnew : ĠLong ): ĠBoolean ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIn crements Ġvalue Ġby Ġone . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġincrement (): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġadd AndGet ( 1 L ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDec re ments Ġvalue Ġby Ġone . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdecrement (): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġadd AndGet (- 1 L ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġstring Ġrepresentation Ġof Ġthis Ġobject . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġstring Ġrepresentation Ġof Ġthis Ġobject ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġvalue . toString () ĊĊĠĠĠ Ġ// ĠImplementation Ġdetails . ĊĠĠĠ Ġ@ Symbol Name (" Kotlin _ Atomic Long _ set ") ĊĠĠĠ Ġprivate Ġexternal Ġfun Ġset Impl ( new : ĠLong ): ĠUnit ĊĊĠĠĠ Ġ@ Symbol Name (" Kotlin _ Atomic Long _ get ") ĊĠĠĠ Ġprivate Ġexternal Ġfun Ġget Impl (): ĠLong Ċ } Ċ Ċ @ Frozen Ċ public Ġclass ĠAtomic Native Ptr ( private Ġvar Ġvalue _: ĠNative Ptr ) Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġvalue Ġbeing Ġheld Ġby Ġthis Ġclass . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġvar Ġvalue : ĠNative Ptr ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġget Impl () ĊĠĠĠĠĠĠĠ Ġset ( new ) Ġ= Ġset Impl ( new ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠComp ares Ġvalue Ġwith Ġ[ expected ] Ġand Ġreplaces Ġit Ġwith Ġ[ new ] Ġvalue Ġif Ġvalues Ġmatches . ĊĠĠĠĠ Ġ* ĠIf Ġ[ new ] Ġvalue Ġis Ġnot Ġnull , Ġit Ġmust Ġbe Ġfrozen Ġor Ġpermanent Ġobject . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġexpected Ġthe Ġexpected Ġvalue ĊĠĠĠĠ Ġ* Ġ@ param Ġnew Ġthe Ġnew Ġvalue ĊĠĠĠĠ Ġ* Ġ@ throws ĠInvalid Mut ability Exception Ġif Ġ[ new ] Ġis Ġnot Ġfrozen Ġor Ġa Ġpermanent Ġobject ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġold Ġvalue ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Symbol Name (" Kotlin _ Atomic Native Ptr _ compare And Swap ") ĊĠĠĠ Ġexternal Ġpublic Ġfun Ġcompare And Swap ( expected : ĠNative Ptr , Ġnew : ĠNative Ptr ): ĠNative Ptr ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠComp ares Ġvalue Ġwith Ġ[ expected ] Ġand Ġreplaces Ġit Ġwith Ġ[ new ] Ġvalue Ġif Ġvalues Ġmatches . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġexpected Ġthe Ġexpected Ġvalue ĊĠĠĠĠ Ġ* Ġ@ param Ġnew Ġthe Ġnew Ġvalue ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġsuccessful ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Symbol Name (" Kotlin _ Atomic Native Ptr _ compare AndSet ") ĊĠĠĠ Ġexternal Ġpublic Ġfun Ġcompare AndSet ( expected : ĠNative Ptr , Ġnew : ĠNative Ptr ): ĠBoolean ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġstring Ġrepresentation Ġof Ġthis Ġobject . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġstring Ġrepresentation Ġof Ġthis Ġobject ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġvalue . toString () ĊĊĠĠĠ Ġ// ĠImplementation Ġdetails . ĊĠĠĠ Ġ@ Symbol Name (" Kotlin _ Atomic Native Ptr _ set ") ĊĠĠĠ Ġprivate Ġexternal Ġfun Ġset Impl ( new : ĠNative Ptr ): ĠUnit ĊĊĠĠĠ Ġ@ Symbol Name (" Kotlin _ Atomic Native Ptr _ get ") ĊĠĠĠ Ġprivate Ġexternal Ġfun Ġget Impl (): ĠNative Ptr Ċ } ĊĊ Ċ private Ġfun Ġid String ( value : ĠAny ) Ġ= Ġ"${ value . hashCode (). to UInt (). toString ( 1 6 )}" Ċ Ċ private Ġfun Ġdebug String ( value : ĠAny ?): ĠString Ġ{ ĊĠĠĠ Ġif Ġ( value Ġ== Ġnull ) Ġreturn Ġ" null " ĊĠĠĠ Ġreturn Ġ"${ value :: class . qualified Name }: Ġ${ id String ( value )}" Ċ } Ċ Ċ /** Ċ Ġ* ĠAn Ġatomic Ġreference Ġto Ġa Ġfrozen ĠKotlin Ġobject . ĠCan Ġbe Ġused Ġin Ġconcurrent Ġscen ar ious Ċ Ġ* Ġbut Ġfrequently Ġshall Ġbe Ġof Ġnullable Ġtype Ġand Ġbe Ġzero ed Ġout Ġonce Ġno Ġlonger Ġneeded . Ċ Ġ* ĠOtherwise Ġmemory Ġleak Ġcould Ġhappen . ĠTo Ġdetect Ġsuch Ġle aks Ġ[ kotlin . native . internal . GC . detect Cycles ] Ċ Ġ* Ġin Ġdebug Ġmode Ġcould Ġbe Ġhelpful . Ċ Ġ*/ Ċ @ Frozen Ċ @ Leak Detector Candidate Ċ @ No Re order Fields Ċ public Ġclass ĠAtomic Reference < T >( private Ġvar Ġvalue _: ĠT ) Ġ{ ĊĠĠĠ Ġ// ĠA Ġspin lock Ġto Ġfix Ġpotential ĠARC Ġrace . ĊĠĠĠ Ġprivate Ġvar Ġlock : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġnew Ġatomic Ġreference Ġpointing Ġto Ġgiven Ġ[ ref ]. ĊĠĠĠĠ Ġ* Ġ@ throws ĠInvalid Mut ability Exception Ġif Ġreference Ġis Ġnot Ġfrozen . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck If Frozen ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġreferenced Ġvalue . ĊĠĠĠĠ Ġ* ĠGets Ġthe Ġvalue Ġor Ġsets Ġthe Ġ[ new ] Ġvalue . ĠIf Ġ[ new ] Ġvalue Ġis Ġnot Ġnull , ĊĠĠĠĠ Ġ* Ġit Ġmust Ġbe Ġfrozen Ġor Ġpermanent Ġobject . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠInvalid Mut ability Exception Ġif Ġthe Ġvalue Ġis Ġnot Ġfrozen Ġor Ġa Ġpermanent Ġobject ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġvar Ġvalue : ĠT ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ@ Suppress (" UN CHECK ED _ CAST ")( get Impl () Ġas ĠT ) ĊĠĠĠĠĠĠĠ Ġset ( new ) Ġ= Ġset Impl ( new ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠComp ares Ġvalue Ġwith Ġ[ expected ] Ġand Ġreplaces Ġit Ġwith Ġ[ new ] Ġvalue Ġif Ġvalues Ġmatches . ĊĠĠĠĠ Ġ* ĠNote Ġthat Ġcomparison Ġis Ġidentity - based , Ġnot Ġvalue - based . ĊĠĠĠĠ Ġ* ĠIf Ġ[ new ] Ġvalue Ġis Ġnot Ġnull , Ġit Ġmust Ġbe Ġfrozen Ġor Ġpermanent Ġobject . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġexpected Ġthe Ġexpected Ġvalue ĊĠĠĠĠ Ġ* Ġ@ param Ġnew Ġthe Ġnew Ġvalue ĊĠĠĠĠ Ġ* Ġ@ throws ĠInvalid Mut ability Exception Ġif Ġthe Ġvalue Ġis Ġnot Ġfrozen Ġor Ġa Ġpermanent Ġobject ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġold Ġvalue ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Symbol Name (" Kotlin _ Atomic Reference _ compare And Swap ") ĊĠĠĠ Ġexternal Ġpublic Ġfun Ġcompare And Swap ( expected : ĠT , Ġnew : ĠT ): ĠT ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠComp ares Ġvalue Ġwith Ġ[ expected ] Ġand Ġreplaces Ġit Ġwith Ġ[ new ] Ġvalue Ġif Ġvalues Ġmatches . ĊĠĠĠĠ Ġ* ĠNote Ġthat Ġcomparison Ġis Ġidentity - based , Ġnot Ġvalue - based . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġexpected Ġthe Ġexpected Ġvalue ĊĠĠĠĠ Ġ* Ġ@ param Ġnew Ġthe Ġnew Ġvalue ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġsuccessful ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Symbol Name (" Kotlin _ Atomic Reference _ compare AndSet ") ĊĠĠĠ Ġexternal Ġpublic Ġfun Ġcompare AndSet ( expected : ĠT , Ġnew : ĠT ): ĠBoolean ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġstring Ġrepresentation Ġof Ġthis Ġobject . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġstring Ġrepresentation Ġof Ġthis Ġobject ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġoverride Ġfun ĠtoString (): ĠString Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ debug String ( this )} Ġ-> Ġ${ debug String ( value )}" ĊĊĠĠĠ Ġ// ĠImplementation Ġdetails . ĊĠĠĠ Ġ@ Symbol Name (" Kotlin _ Atomic Reference _ set ") ĊĠĠĠ Ġprivate Ġexternal Ġfun Ġset Impl ( new : ĠAny ?): ĠUnit ĊĊĠĠĠ Ġ@ Symbol Name (" Kotlin _ Atomic Reference _ get ") ĊĠĠĠ Ġprivate Ġexternal Ġfun Ġget Impl (): ĠAny ? Ċ } Ċ Ċ /** Ċ Ġ* ĠAn Ġatomic Ġreference Ġto Ġa ĠKotlin Ġobject . ĠCan Ġbe Ġused Ġin Ġconcurrent Ġscen ar ious , Ġbut Ġmust Ġbe Ġfrozen Ġfirst , Ċ Ġ* Ġotherwise Ġbehaves Ġas Ġregular Ġbox Ġfor Ġthe Ġvalue . ĠIf Ġfrozen , Ġshall Ġbe Ġzero ed Ġout Ġonce Ġno Ġlonger Ġneeded . Ċ Ġ* ĠOtherwise Ġmemory Ġleak Ġcould Ġhappen . ĠTo Ġdetect Ġsuch Ġle aks Ġ[ kotlin . native . internal . GC . detect Cycles ] Ċ Ġ* Ġin Ġdebug Ġmode Ġcould Ġbe Ġhelpful . Ċ Ġ*/ Ċ @ No Re order Fields Ċ @ Leak Detector Candidate Ċ @ Export TypeInfo (" the Free z able Atomic Reference TypeInfo ") Ċ public Ġclass ĠFree z able Atomic Reference < T >( private Ġvar Ġvalue _: ĠT ) Ġ{ ĊĠĠĠ Ġ// ĠA Ġspin lock Ġto Ġfix Ġpotential ĠARC Ġrace . ĊĠĠĠ Ġprivate Ġvar Ġlock : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġreferenced Ġvalue . ĊĠĠĠĠ Ġ* ĠGets Ġthe Ġvalue Ġor Ġsets Ġthe Ġ[ new ] Ġvalue . ĠIf Ġ[ new ] Ġvalue Ġis Ġnot Ġnull , ĊĠĠĠĠ Ġ* Ġand Ġ` this ` Ġis Ġfrozen Ġ- Ġit Ġmust Ġbe Ġfrozen Ġor Ġpermanent Ġobject . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠInvalid Mut ability Exception Ġif Ġthe Ġvalue Ġis Ġnot Ġfrozen Ġor Ġa Ġpermanent Ġobject ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġvar Ġvalue : ĠT ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ@ Suppress (" UN CHECK ED _ CAST ")( get Impl () Ġas ĠT ) ĊĠĠĠĠĠĠĠ Ġset ( new ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . is Frozen ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Impl ( new ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue _ Ġ= Ġnew ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠComp ares Ġvalue Ġwith Ġ[ expected ] Ġand Ġreplaces Ġit Ġwith Ġ[ new ] Ġvalue Ġif Ġvalues Ġmatches . ĊĠĠĠĠ Ġ* ĠIf Ġ[ new ] Ġvalue Ġis Ġnot Ġnull Ġand Ġobject Ġis Ġfrozen , Ġit Ġmust Ġbe Ġfrozen Ġor Ġpermanent Ġobject . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġexpected Ġthe Ġexpected Ġvalue ĊĠĠĠĠ Ġ* Ġ@ param Ġnew Ġthe Ġnew Ġvalue ĊĠĠĠĠ Ġ* Ġ@ throws ĠInvalid Mut ability Exception Ġif Ġthe Ġvalue Ġis Ġnot Ġfrozen Ġor Ġa Ġpermanent Ġobject ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġold Ġvalue ĊĠĠĠĠ Ġ*/ ĊĠĠĠĠ Ġpublic Ġfun Ġcompare And Swap ( expected : ĠT , Ġnew : ĠT ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( this . is Frozen ) Ġ@ Suppress (" UN CHECK ED _ CAST ")( compare And Swap Impl ( expected , Ġnew ) Ġas ĠT ) Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Ġ= Ġvalue _ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( old Ġ=== Ġexpected ) Ġvalue _ Ġ= Ġnew ĊĠĠĠĠĠĠĠĠĠĠĠ Ġold ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠComp ares Ġvalue Ġwith Ġ[ expected ] Ġand Ġreplaces Ġit Ġwith Ġ[ new ] Ġvalue Ġif Ġvalues Ġmatches . ĊĠĠĠĠ Ġ* ĠNote Ġthat Ġcomparison Ġis Ġidentity - based , Ġnot Ġvalue - based . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġexpected Ġthe Ġexpected Ġvalue ĊĠĠĠĠ Ġ* Ġ@ param Ġnew Ġthe Ġnew Ġvalue ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġsuccessful ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġcompare AndSet ( expected : ĠT , Ġnew : ĠT ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . is Frozen ) Ġreturn Ġcompare AndSet Impl ( expected , Ġnew ) ĊĠĠĠĠĠĠĠ Ġval Ġold Ġ= Ġvalue _ ĊĠĠĠĠĠĠĠ Ġif Ġ( old Ġ=== Ġexpected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue _ Ġ= Ġnew ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġstring Ġrepresentation Ġof Ġthis Ġobject . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġstring Ġrepresentation Ġof Ġthis Ġobject ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġoverride Ġfun ĠtoString (): ĠString Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ debug String ( this )} Ġ-> Ġ${ debug String ( value )}" ĊĊĠĠĠ Ġ// ĠImplementation Ġdetails . ĊĠĠĠ Ġ@ Symbol Name (" Kotlin _ Atomic Reference _ set ") ĊĠĠĠ Ġprivate Ġexternal Ġfun Ġset Impl ( new : ĠAny ?): ĠUnit ĊĊĠĠĠ Ġ@ Symbol Name (" Kotlin _ Atomic Reference _ get ") ĊĠĠĠ Ġprivate Ġexternal Ġfun Ġget Impl (): ĠAny ? ĊĊĠĠĠ Ġ@ Symbol Name (" Kotlin _ Atomic Reference _ compare And Swap ") ĊĠĠĠ Ġprivate Ġexternal Ġfun Ġcompare And Swap Impl ( expected : ĠAny ?, Ġnew : ĠAny ?): ĠAny ? ĊĊĠĠĠ Ġ@ Symbol Name (" Kotlin _ Atomic Reference _ compare AndSet ") ĊĠĠĠ Ġprivate Ġexternal Ġfun Ġcompare AndSet Impl ( expected : ĠAny ?, Ġnew : ĠAny ?): ĠBoolean Ċ }