package Ġio . realm . internal Ċ Ċ import Ġio . realm . Callback Ċ import Ġio . realm . C ancellable Ċ import Ġio . realm . Mutable Realm Ċ import Ġio . realm . Realm Ċ import Ġio . realm . Realm Object Ċ import Ġio . realm . internal . interop . Native Pointer Ċ import Ġio . realm . internal . interop . Realm Core Exception Ċ import Ġio . realm . internal . interop . Realm Interop Ċ import Ġio . realm . internal . platform . Weak Reference Ċ import Ġio . realm . internal . platform . run Blocking Ċ import Ġkotlinx . atomic fu . Atomic Ref Ċ import Ġkotlinx . atomic fu . atomic Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Supervisor Job Ċ import Ġkotlinx . coroutines . cancel Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . Mutable Shared Flow Ċ import Ġkotlinx . coroutines . flow . as Shared Flow Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . sync . Mutex Ċ import Ġkotlinx . coroutines . sync . with Lock Ċ Ċ // ĠTODO ĠAPI - PUBLIC ĠDocument Ġplatform Ġspecific Ġinternals Ġ( Realm Initializer , Ġetc .) Ċ internal Ġclass ĠRealm Impl Ġprivate Ġconstructor ( ĊĠĠĠ Ġconfiguration : ĠInternal Realm Configuration , ĊĠĠĠ Ġdb Pointer : ĠNative Pointer Ċ ) Ġ: ĠBase Realm Impl ( configuration , Ġdb Pointer ), ĠRealm Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġrealm Pointer Mutex Ġ= ĠMutex () ĊĊĠĠĠ Ġinternal Ġval Ġrealm Scope Ġ= ĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Supervisor Job () Ġ+ Ġconfiguration . notification Dispatcher ) ĊĠĠĠ Ġprivate Ġval Ġrealm Flow Ġ= ĊĠĠĠĠĠĠĠ ĠMutable Shared Flow < Realm Impl >( replay Ġ= Ġ 1 ) Ġ// ĠRealm Ġnotifications Ġemit Ġtheir Ġinitial Ġstate Ġwhen Ġsubscribed Ġto ĊĠĠĠ Ġprivate Ġval Ġnot ifier Ġ= ĊĠĠĠĠĠĠĠ ĠS uspend able Notifier ( this , Ġconfiguration . notification Dispatcher ) ĊĠĠĠ Ġprivate Ġval Ġwriter Ġ= ĊĠĠĠĠĠĠĠ ĠS uspend able Writer ( this , Ġconfiguration . write Dispatcher ) ĊĊĠĠĠ Ġprivate Ġvar Ġup datable Realm : ĠAtomic Ref < Realm Reference > Ġ= Ġatomic ( Realm Reference ( this , Ġdb Pointer )) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġcurrent ĠRealm Ġreference Ġthat Ġpoints Ġto Ġthe Ġunderlying Ġfrozen ĠC ++ ĠShared Realm . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠNOTE : ĠAs Ġthis Ġis Ġupdated Ġto Ġa Ġnew Ġfrozen Ġversion Ġon Ġnotifications Ġabout Ġchanges Ġin Ġthe ĊĠĠĠĠ Ġ* Ġunderlying Ġrealm , Ġcare Ġshould Ġbe Ġtaken Ġnot Ġto Ġspread Ġoperations Ġover Ġdifferent Ġreferences . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġoverride Ġvar Ġrealm Reference : ĠRealm Reference ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġup datable Realm . value ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġup datable Realm . value Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠSet Ġof Ġcurrently Ġopen Ġreal ms . ĠSt oring Ġthe Ġnative Ġpointer Ġexplicitly Ġto Ġenable Ġus Ġto Ġclose ĊĠĠĠ Ġ// Ġthe Ġrealm Ġwhen Ġthe ĠRealm Reference Ġis Ġno Ġlonger Ġreferenced Ġanymore . ĊĠĠĠ Ġinternal Ġval Ġintermediate References : ĠAtomic Ref < Set < Pair < Native Pointer , ĠWeak Reference < Realm Reference >>>> Ġ= ĊĠĠĠĠĠĠĠ Ġatomic ( mutable Set Of ()) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO ĠFind Ġa Ġcleaner Ġway Ġto Ġget Ġthe Ġinitial Ġfrozen Ġinstance . ĠCurrently Ġwe Ġexpect Ġthe ĊĠĠĠĠĠĠĠ Ġ// Ġ Ġprimary Ġconstructor Ġsupplied Ġdb Pointer Ġto Ġbe Ġa Ġpointer Ġto Ġa Ġlive Ġrealm , Ġso Ġget Ġthe ĊĠĠĠĠĠĠĠ Ġ// Ġ Ġfrozen Ġpointer Ġand Ġclose Ġthe Ġlive Ġone . ĊĠĠĠĠĠĠĠ Ġval Ġinitial Live Db Pointer Ġ= Ġrealm Reference . db Pointer ĊĠĠĠĠĠĠĠ Ġval Ġfrozen Realm Ġ= ĠRealm Interop . realm _ freeze ( initial Live Db Pointer ) ĊĠĠĠĠĠĠĠ ĠRealm Interop . realm _ close ( initial Live Db Pointer ) ĊĠĠĠĠĠĠĠ Ġrealm Reference Ġ= ĠRealm Reference ( this , Ġfrozen Realm ) ĊĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġthe ĠRealm Ġif Ġanother Ġprocess Ġor Ġthe ĠSync ĠClient Ġupdates Ġthe ĠRealm ĊĠĠĠĠĠĠĠ Ġrealm Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrealm Flow . emit ( this @ Realm Impl ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnot ifier . realm Changed (). collect Ġ{ Ġrealm Reference Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Realm Pointer ( realm Reference ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( configuration : ĠInternal Realm Configuration ) Ġ: ĊĠĠĠĠĠĠĠ Ġthis ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRealm Interop . realm _ open ( configuration . native Config ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠRealm Core Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġgeneric Realm Core ExceptionHandler ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Could Ġnot Ġopen ĠRealm Ġwith Ġthe Ġgiven Ġconfiguration ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġ< R > Ġwrite ( block : ĠMutable Realm . () Ġ-> ĠR ): ĠR Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( reference , Ġresult ) Ġ= Ġthis . writer . write ( block ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġthe Ġuser Ġfacing ĠRealm Ġbefore Ġreturning Ġthe Ġresult . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThat Ġway , Ġquerying Ġthe ĠRealm Ġright Ġafter Ġthe Ġ` write ` Ġcompletes Ġwill Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe Ġwritten Ġdata . ĠOtherwise , Ġwe Ġwould Ġhave Ġto Ġwait Ġfor Ġthe ĠNot ifier Ġthread ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġto Ġdetect Ġit Ġand Ġupdate Ġthe Ġuser ĠRealm . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Realm Pointer ( reference ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠRealm Core Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġgeneric Realm Core ExceptionHandler ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Could Ġnot Ġexecute Ġthe Ġwrite Ġtransaction ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġ< R > Ġwrite Blocking ( block : ĠMutable Realm . () Ġ-> ĠR ): ĠR Ġ{ ĊĠĠĠĠĠĠĠ Ġwriter . check In Transaction (" Cannot Ġinitiate Ġtransaction Ġwhen Ġalready Ġin Ġa Ġwrite Ġtransaction ") ĊĠĠĠĠĠĠĠ Ġreturn Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite ( block ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġobserve (): ĠFlow < Realm Impl > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrealm Flow . as Shared Flow () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFIXME ĠHidden Ġuntil Ġwe Ġcan Ġadd Ġproper Ġsupport ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġadd ChangeListener (): ĠC ancellable Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġ< T > Ġregister Observer ( t : ĠObservable < T >): ĠFlow < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnot ifier . register Observer ( t ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġoverride Ġfun Ġ< T Ġ: ĠRealm Object > Ġregister Results ChangeListener ( ĊĠĠĠĠĠĠĠ Ġresults : ĠRealm Results Impl < T >, ĊĠĠĠĠĠĠĠ Ġcallback : ĠCallback < Realm Results Impl < T >> ĊĠĠĠ Ġ): ĠC ancellable Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġoverride Ġfun Ġ< T Ġ: ĠRealm Object > Ġregister List ChangeListener ( list : ĠList < T >, Ġcallback : ĠCallback < List < T >> ): ĠC ancellable Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġoverride Ġfun Ġ< T Ġ: ĠRealm Object > Ġregister Object ChangeListener ( obj : ĠT , Ġcallback : ĠCallback < T ?> ): ĠC ancellable Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġupdate Realm Pointer ( new Realm Reference : ĠRealm Reference ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrealm Pointer Mutex . with Lock Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Version Ġ= Ġnew Realm Reference . version () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug (" Updating ĠRealm Ġversion : Ġ${ version ()} Ġ-> Ġ$ new Version ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġwe Ġadvance Ġto Ġa Ġnewer Ġversion Ġthen Ġwe Ġshould Ġkeep Ġtrack Ġof Ġthe Ġpreceding Ġone , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġotherwise Ġjust Ġtrack Ġthe Ġnew Ġone Ġdirectly . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġun tracked Reference Ġ= Ġif Ġ( new Version Ġ>= Ġversion ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprevious Realm Reference Ġ= Ġrealm Reference ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrealm Reference Ġ= Ġnew Realm Reference ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Realm Reference ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Realm Reference ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrack New And Close Expired References ( un tracked Reference ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNotify Ġpublic Ġob servers Ġthat Ġthe ĠRealm Ġchanged ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrealm Flow . emit ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠMust Ġonly Ġbe Ġcalled Ġwith Ġrealm Pointer Mutex Ġlocked ĊĠĠĠ Ġprivate Ġfun Ġtrack New And Close Expired References ( realm Reference : ĠRealm Reference ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreferences Ġ= Ġmutable Set Of < Pair < Native Pointer , ĠWeak Reference < Realm Reference >> >( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( realm Reference . db Pointer , ĠWeak Reference ( realm Reference )) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġintermediate References . value . forEach Ġ{ Ġentry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( pointer , Ġref ) Ġ= Ġentry ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ref . get () Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug (" Closing Ġun referenced Ġversion : Ġ${ Realm Interop . realm _ get _ version _ id ( pointer )} ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRealm Interop . realm _ close ( pointer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreferences . add ( entry ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġintermediate References . value Ġ= Ġreferences ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO ĠRe consider Ġthis Ġconstraint . ĠWe Ġhave Ġthe Ġprimitives Ġto Ġcheck Ġis Ġwe Ġare Ġon Ġthe ĊĠĠĠĠĠĠĠ Ġ// Ġ Ġwriter Ġthread Ġand Ġjust Ġclose Ġthe Ġrealm Ġin Ġwriter . close () ĊĠĠĠĠĠĠĠ Ġwriter . check In Transaction (" Cannot Ġclose Ġthe ĠRealm Ġwhile Ġinside Ġa Ġtransaction Ġblock ") ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrealm Pointer Mutex . with Lock Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrealm Scope . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnot ifier . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintermediate References . value . forEach Ġ{ Ġ( pointer , Ġ_) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Closing Ġinter medi ated Ġversion : Ġ${ Realm Interop . realm _ get _ version _ id ( pointer )}" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRealm Interop . realm _ close ( pointer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠTODO ĠThere Ġis Ġcurrently Ġnothing Ġthat Ġtear s Ġdown Ġthe Ġdispatcher ĊĠĠĠ Ġ} Ċ } Ċ