/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 Ġ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 Ċ Ċ import Ġio . realm . internal . manage Ċ import Ġio . realm . internal . un manage Ċ import Ġio . realm . interop . Realm Interop Ċ import Ġio . realm . runtime api . Native Pointer Ċ import Ġio . realm . runtime api . Realm Model Ċ import Ġio . realm . runtime api . Realm Model Internal Ċ import Ġkotlin . reflect . K Class Ċ Ċ // ĠTODO ĠAPI - PUBLIC ĠDocument Ġplatform Ġspecific Ġinternals Ġ( Realm Init il izer , Ġetc .) Ċ class ĠRealm Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġdb Pointer : ĠNative Pointer ? Ġ= Ġnull Ġ// ĠTODO ĠAPI - INTERNAL Ġnullable Ġto Ġavoid Ġ"' late init ' Ġmodifier Ġis Ġnot Ġallowed Ġon Ġproperties Ġof Ġprimitive Ġtypes " ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrealm Configuration : ĠRealm Configuration ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġopen ( realm Configuration : ĠRealm Configuration ): ĠRealm Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO ĠAPI - INTERNAL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ĠIN ĠAndroid Ġuse Ġlazy Ġproperty Ġdeleg ation Ġinit Ġto Ġload Ġthe Ġshared Ġlibrary Ġuse Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ Ġfunction Ġcall Ġ( lazy Ġinit Ġto Ġdo Ġany Ġpreprocessing Ġbefore Ġstarting ĠRealm Ġeg : Ġlog Ġlevel Ġetc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ Ġor Ġimplement Ġan Ġinit Ġmethod Ġwhich Ġis Ġa ĠNo - OP Ġin ĠiOS Ġbut Ġin ĠAndroid Ġit Ġload Ġthe Ġshared Ġlibrary ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrealm Ġ= ĠRealm () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrealm . realm Configuration Ġ= Ġrealm Configuration ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrealm . db Pointer Ġ= ĠRealm Interop . realm _ open ( realm Configuration . native Config ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrealm ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠFIXME ĠAPI - MUT ABLE - REAL M ĠThis Ġshould Ġactually Ġonly Ġbe Ġpossible Ġon Ġa Ġmutable Ġrealm , Ġi . e . Ġinside ĊĠĠĠĠĠĠĠ Ġ// Ġ Ġa Ġtransaction ĊĠĠĠĠĠĠĠ Ġ// ĠFIXME ĠE VAL U ATE ĠShould Ġthis Ġbe Ġon ĠRealm Model Ġinstead ? ĊĠĠĠĠĠĠĠ Ġfun Ġ< T Ġ: ĠRealm Model > Ġdelete ( obj : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinternal Object Ġ= Ġobj Ġas ĠRealm Model Internal ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Object .` $ realm $ Object Pointer ` ?. let Ġ{ ĠRealm Interop . realm _ object _ delete ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Cannot Ġdelete Ġunmanaged Ġobject ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Object . un manage () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbegin Transaction () Ġ{ ĊĠĠĠĠĠĠĠ ĠRealm Interop . realm _ begin _ write ( db Pointer !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcommit Transaction () Ġ{ ĊĠĠĠĠĠĠĠ ĠRealm Interop . realm _ commit ( db Pointer !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcancel Transaction () Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġregister Listener ( f : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠĠĠ Ġreflection Ġis Ġnot Ġsupported Ġin ĠK / N Ġso Ġwe Ġcan 't Ġoffer Ġmethod Ġlike ĊĠĠĠ Ġ// ĠĠĠ Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠRealm Model > Ġcreate () Ġ: ĠT ĊĠĠĠ Ġ// ĠĠĠ Ġto Ġcreate Ġa Ġdynamically Ġmanaged Ġmodel . Ġwe 're Ġlimited Ġthus Ġto Ġpersist Ġmethods ĊĠĠĠ Ġ// ĠĠĠ Ġwere Ġwe Ġtake Ġan Ġalready Ġcreated Ġun - managed Ġinstance Ġand Ġreturn Ġa Ġnew Ġmanage able Ġone ĊĠĠĠ Ġ// ĠĠĠ Ġ( note Ġsince Ġparameter Ġare Ġimmutable Ġin ĠKotlin , Ġwe Ġneed Ġto Ġcreate Ġa Ġnew Ġinstance Ġinstead Ġof ĊĠĠĠ Ġ// ĠĠĠ Ġdoing Ġthis Ġoperation Ġin Ġplace ) ĊĠĠĠ Ġfun Ġ< T Ġ: ĠRealm Model > Ġcreate ( type : ĠK Class < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobject Type Ġ= Ġtype . simple Name Ġ?: Ġerror (" Cannot Ġget Ġclass Ġname ") ĊĠĠĠĠĠĠĠ Ġval Ġmanaged Model Ġ= Ġrealm Configuration . schema . newInstance ( type ) Ġas ĠRealm Model Internal Ġ// ĠTODO Ġmake Ġnew Instance Ġreturn ĠRealm Model Internal ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= ĠRealm Interop . realm _ find _ class ( db Pointer !! , Ġobject Type ) ĊĠĠĠĠĠĠĠ Ġreturn Ġmanaged Model . manage ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb Pointer !! , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRealm Interop . realm _ object _ create ( db Pointer !! , Ġkey ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T Ġ: ĠRealm Model > Ġobjects ( clazz : ĠK Class < T >): ĠRealm Results < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRealm Results ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb Pointer !! , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" Spread Operator ") Ġ// ĠTODO ĠPER FORMANCE ĠSp read Ġoperator Ġtriggers Ġde te kt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠRealm Interop . realm _ query _ parse ( db Pointer !! , Ġclazz . simple Name !! , Ġ" TRUE PRE D ICATE ") Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclazz , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrealm Configuration . schema ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠFIXME ĠConsider Ġadding Ġa Ġdelete - all Ġalong Ġwith Ġquery Ġsupport ĊĠĠĠ Ġ// Ġ Ġhttps :// github . com / realm / realm - kotlin / issues / 6 4 ĊĠĠĠ Ġ// Ġfun Ġ< T Ġ: ĠRealm Model > Ġdelete ( clazz : ĠK Class < T >) Ċ } Ċ