/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠRealm ĠInc . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġio . realm . internal Ċ Ċ import Ġio . realm . Base Realm Ċ import Ġio . realm . Realm Object Ċ import Ġio . realm . interop . Link Ċ import Ġio . realm . interop . Native Pointer Ċ import Ġio . realm . interop . Realm Interop Ċ import Ġkotlin . reflect . K Class Ċ Ċ // ĠTODO ĠAPI - INTERNAL Ċ // ĠWe Ġcould Ġinline Ġthis Ċ fun Ġ< T Ġ: ĠRealm Object > ĠRealm Object Internal . manage ( ĊĠĠĠ Ġrealm : ĠRealm Reference , ĊĠĠĠ Ġmedi ator : ĠMed iator , ĊĠĠĠ Ġtype : ĠK Class < T >, ĊĠĠĠ Ġobject Pointer : ĠNative Pointer Ċ ): ĠT Ġ{ ĊĠĠĠ Ġthis .` $ realm $ Is Managed ` Ġ= Ġtrue ĊĠĠĠ Ġthis .` $ realm $ Owner ` Ġ= Ġrealm ĊĠĠĠ Ġthis .` $ realm $ TableName ` Ġ= Ġtype . simple Name ĊĠĠĠ Ġthis .` $ realm $ Object Pointer ` Ġ= Ġobject Pointer ĊĠĠĠ Ġ// ĠFIXME ĠAPI - LI FE CYCLE ĠInitialize Ġactual Ġlink ; Ġrequires Ġhandling Ġof Ġlink Ġin Ġcompiler Ġplugin ĊĠĠĠ Ġ// Ġthis . link Ġ= ĠRealm Interop . realm _ object _ as _ link () ĊĠĠĠ Ġthis .` $ realm $ Mediator ` Ġ= Ġmedi ator ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġreturn Ġthis Ġas ĠT Ċ } Ċ Ċ // ĠTODO ĠAPI - INTERNAL Ċ fun Ġ< T Ġ: ĠRealm Object > ĠRealm Object Internal . link ( ĊĠĠĠ Ġrealm : ĠRealm Reference , ĊĠĠĠ Ġmedi ator : ĠMed iator , ĊĠĠĠ Ġtype : ĠK Class < T >, ĊĠĠĠ Ġlink : ĠLink Ċ ): ĠT Ġ{ ĊĠĠĠ Ġthis .` $ realm $ Is Managed ` Ġ= Ġtrue ĊĠĠĠ Ġthis .` $ realm $ Owner ` Ġ= Ġrealm ĊĠĠĠ Ġthis .` $ realm $ TableName ` Ġ= Ġtype . simple Name ĊĠĠĠ Ġ// ĠFIXME ĠAPI - LI FE CYCLE ĠCould Ġbe Ġlazy Ġloaded Ġfrom Ġlink ; Ġrequires Ġhandling Ġof Ġlink Ġin Ġcompiler Ġplugin ĊĠĠĠ Ġthis .` $ realm $ Object Pointer ` Ġ= ĠRealm Interop . realm _ get _ object ( realm . db Pointer , Ġlink ) ĊĠĠĠ Ġthis .` $ realm $ Mediator ` Ġ= Ġmedi ator ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġreturn Ġthis Ġas ĠT Ċ } Ċ Ċ /** Ċ Ġ* ĠCreates Ġa Ġfrozen Ġcopy Ġof Ġthis Ġobject . Ċ Ġ* Ċ Ġ* Ġ@ param Ġfrozen Realm ĠPointer Ġto Ġfrozen ĠRealm Ġto Ġwhich Ġthe Ġfrozen Ġcopy Ġshould Ġbelong . Ċ Ġ*/ Ċ fun Ġ< T Ġ: ĠRealm Object > ĠRealm Object Internal . freeze ( frozen Realm : ĠRealm Reference ): ĠT Ġ{ ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġval Ġtype : ĠK Class < T > Ġ= Ġthis :: class Ġas ĠK Class < T > ĊĠĠĠ Ġval Ġmanaged Model Ġ= Ġ(` $ realm $ Mediator ` Ġas ĠMed iator ). create InstanceOf ( type ) ĊĠĠĠ Ġreturn Ġmanaged Model . manage ( ĊĠĠĠĠĠĠĠ Ġfrozen Realm !! , ĊĠĠĠĠĠĠĠ Ġ`$ realm $ Mediator ` Ġas ĠMed iator , ĊĠĠĠĠĠĠĠ Ġtype , ĊĠĠĠĠĠĠĠ ĠRealm Interop . realm _ object _ freeze ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ`$ realm $ Object Pointer ` !! , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrozen Realm . db Pointer ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠCreates Ġa Ġlive Ġcopy Ġof Ġthis Ġobject . Ċ Ġ* Ċ Ġ* Ġ@ param Ġlive Realm ĠReference Ġto Ġthe ĠLive ĠRealm Ġthat Ġshould Ġown Ġthe Ġth aw ed Ġobject . Ċ Ġ*/ Ċ internal Ġfun Ġ< T Ġ: ĠRealm Object > ĠRealm Object Internal . th aw ( live Realm : ĠBase Realm ): ĠT ? Ġ{ ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġval Ġtype : ĠK Class < T > Ġ= Ġthis :: class Ġas ĠK Class < T > ĊĠĠĠ Ġval Ġmanaged Model Ġ= Ġ(` $ realm $ Mediator ` Ġas ĠMed iator ). create InstanceOf ( type ) ĊĠĠĠ Ġval Ġdb Pointer Ġ= Ġlive Realm . realm Reference . db Pointer ĊĠĠĠ Ġ@ Suppress (" Too Generic Exception Ca ught ") ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRealm Interop . realm _ object _ th aw (` $ realm $ Object Pointer ` !! , Ġdb Pointer ) !!. let Ġ{ Ġth aw ed Object Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanaged Model . manage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlive Realm . realm Reference , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ`$ realm $ Mediator ` Ġas ĠMed iator , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġth aw ed Object ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠFIXME ĠC - API Ġis Ġcurrently Ġthrowing Ġan Ġerror Ġif Ġthe Ġobject Ġhas Ġbeen Ġdeleted , Ġso Ġcurrently Ġjust ĊĠĠĠĠĠĠĠ Ġ// Ġ Ġcatch ing Ġthat Ġand Ġreturning Ġnull . ĠOnly Ġtreat Ġunknown Ġnull Ġpointers Ġas Ġnon - existing Ġobjects ĊĠĠĠĠĠĠĠ Ġ// Ġ Ġto Ġavoid Ġhandling Ġun int ended Ġsituations Ġhere . ĊĠĠĠĠĠĠĠ Ġif Ġ( e . message ?. startsWith ("[ 2 ]: Ġnull ") Ġ?: Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ