/* Ċ Ġ* Ġ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 . Callback Ċ import Ġio . realm . C ancellable Ċ import Ġio . realm . Realm Object Ċ import Ġio . realm . Realm Results Ċ import Ġio . realm . internal . interop . Native Pointer Ċ import Ġio . realm . internal . interop . Realm Interop Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlin . reflect . K Class Ċ Ċ @ Suppress (" Un necessary Abstract Class ") Ċ abstract Ġclass ĠBase Realm Impl Ġinternal Ġconstructor ( ĊĠĠĠ Ġfinal Ġoverride Ġval Ġconfiguration : ĠInternal Realm Configuration , ĊĠĠĠ Ġdb Pointer : ĠNative Pointer Ċ ) Ġ: ĠBase Realm , ĠRealm State Holder Ġ{ ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠOB SERV ABLE _ NOT _ SUPPORTED _ MESSAGE Ġ= Ġ" Ob serving Ġchanges Ġare Ġnot Ġsupported Ġby Ġthis ĠRealm ." ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRealm Ġreference Ġthat Ġlinks Ġthe ĠKotlin Ġinstance Ġwith Ġthe Ġunderlying ĠC ++ ĠShared Realm . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe ĠC ++ ĠShared Realm Ġcan Ġbe Ġeither Ġa Ġfrozen Ġor Ġlive Ġrealm , Ġso Ġeven Ġthough Ġthis Ġreference Ġis ĊĠĠĠĠ Ġ* Ġnot Ġupdated Ġthe Ġversion Ġof Ġthe Ġunderlying ĠRealm Ġcan Ġchange . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠNOTE : Ġ[ Realm ] Ġover writes Ġthis Ġto Ġan Ġup datable Ġproperty Ġwhich Ġis Ġadvanced Ġwhen Ġthe Ġ[ Realm ] Ġis ĊĠĠĠĠ Ġ* Ġupdated Ġto Ġpoint Ġto Ġa Ġnew Ġfrozen Ġversion Ġafter Ġwrites Ġor Ġnotification , Ġso Ġcare Ġshould Ġbe ĊĠĠĠĠ Ġ* Ġtaken Ġnot Ġto Ġspread Ġoperations Ġover Ġdifferent Ġreferences . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġopen Ġvar Ġrealm Reference : ĠRealm Reference Ġ= ĠRealm Reference ( this , Ġdb Pointer ) ĊĠĠĠĠĠĠĠ Ġset (_) Ġ= Ġthrow ĠUnsupportedOperationException (" Base Realm Ġreference Ġshould Ġnever Ġbe Ġupdated ") ĊĊĠĠĠ Ġoverride Ġfun Ġrealm State (): ĠRealm State Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrealm Reference ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Closed (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . is Closed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġval Ġlog : ĠRealm Log Ġ= ĠRealm Log ( configuration Ġ= Ġconfiguration . log ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . info (" Realm Ġopened : Ġ${ configuration . path }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġ< T Ġ: ĠRealm Object > Ġobjects ( clazz : ĠK Class < T >): ĠRealm Results < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠUse Ġsame Ġreference Ġthrough Ġout Ġall Ġoperations Ġto Ġavoid Ġlocking ĊĠĠĠĠĠĠĠ Ġval Ġrealm Reference Ġ= Ġthis . realm Reference ĊĠĠĠĠĠĠĠ Ġrealm Reference . check Closed () ĊĠĠĠĠĠĠĠ Ġreturn ĠRealm Results Impl . from Query ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrealm Reference , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRealm Interop . realm _ query _ parse ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrealm Reference . db Pointer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclazz . simple Name !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" TRUE PRE D ICATE " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclazz , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration . medi ator ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġopen Ġfun Ġ< T > Ġregister Observer ( t : ĠObservable < T >): ĠFlow < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠNotImplementedError ( OB SERV ABLE _ NOT _ SUPPORTED _ MESSAGE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġopen Ġfun Ġ< T Ġ: ĠRealm Object > Ġregister Results ChangeListener ( ĊĠĠĠĠĠĠĠ Ġresults : ĠRealm Results Impl < T >, ĊĠĠĠĠĠĠĠ Ġcallback : ĠCallback < Realm Results Impl < T >> ĊĠĠĠ Ġ): ĠC ancellable Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠNotImplementedError ( OB SERV ABLE _ NOT _ SUPPORTED _ MESSAGE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġopen Ġfun Ġ< T Ġ: ĠRealm Object > Ġregister List ChangeListener ( ĊĠĠĠĠĠĠĠ Ġlist : ĠList < T >, ĊĠĠĠĠĠĠĠ Ġcallback : ĠCallback < List < T >> ĊĠĠĠ Ġ): ĠC ancellable Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠNotImplementedError ( OB SERV ABLE _ NOT _ SUPPORTED _ MESSAGE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġopen Ġfun Ġ< T Ġ: ĠRealm Object > Ġregister Object ChangeListener ( ĊĠĠĠĠĠĠĠ Ġobj : ĠT , ĊĠĠĠĠĠĠĠ Ġcallback : ĠCallback < T ?> ĊĠĠĠ Ġ): ĠC ancellable Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠNotImplementedError ( OB SERV ABLE _ NOT _ SUPPORTED _ MESSAGE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget NumberOf Active Versions (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreference Ġ= Ġrealm Reference ĊĠĠĠĠĠĠĠ Ġreference . check Closed () ĊĠĠĠĠĠĠĠ Ġreturn ĠRealm Interop . realm _ get _ num _ versions ( reference . db Pointer ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠNot Ġall Ġsub Ġclasses Ġof Ġ` Base Realm ` Ġcan Ġbe Ġclosed Ġby Ġusers . ĊĠĠĠ Ġinternal Ġopen Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreference Ġ= Ġrealm Reference ĊĠĠĠĠĠĠĠ Ġreference . check Closed () ĊĠĠĠĠĠĠĠ ĠRealm Interop . realm _ close ( reference . db Pointer ) ĊĠĠĠĠĠĠĠ Ġlog . info (" Realm Ġclosed : Ġ${ configuration . path }") ĊĠĠĠ Ġ} Ċ } Ċ