package Ġcom . react n atives pac ex . impl . store . persistence Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Log Ċ import Ġcom . react n atives pac ex . impl . store . Record Ċ import Ġcom . react n atives pac ex . impl . store . Record Set Ċ import Ġcom . react n atives pac ex . impl . store . parse Record Ċ import Ġcom . react n atives pac ex . impl . store . serialize Record Ċ import Ġcom . react n atives pac ex . impl . utils . Dispatch Queue Ċ import Ġjava . util . concurrent . Executors Ċ import Ġjava . util . concurrent . S ynchronous Queue Ċ import Ġjava . util . concurrent . ThreadPoolExecutor Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ /** Ċ Ġ* ĠSpace X Persistence Ġprovides Ġdis patched Ġoperations Ġon Ġtop Ġof Ġunderlying Ġpersistence Ġprovider . Ċ Ġ*/ Ċ class ĠSpace X Persistence ( val Ġcontext : ĠContext , Ġval Ġname : ĠString ?) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġpersistence Provider Ġ= ĠEmpty Persistence Provider () ĊĊĠĠĠ Ġprivate Ġval Ġwriter Executor Ġ= ĠExec utors . new Single Thread Executor () ĊĠĠĠ Ġprivate Ġval Ġreader Executor Ġ= ĠThreadPool Executor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 , Ġ 8 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 6 0 L , ĠTimeUnit . SECONDS , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS ynchronous Queue < Runnable >() ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSave Ġrecords Ġto Ġstore ĊĠĠĠĠ Ġ* Ġ@ param Ġrecords Ġrecords Ġto Ġwrite ĊĠĠĠĠ Ġ* Ġ@ param Ġqueue ĠDispatch Queue Ġto Ġdispatch Ġcallback Ġon ĊĠĠĠĠ Ġ* Ġ@ param Ġcallback ĠCallback Ġto Ġcall Ġon Ġsuccessful Ġwrite ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsave Records ( records : ĠRecord Set , Ġqueue : ĠDispatch Queue , Ġcallback : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwriter Executor . submit Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSerial izing ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġstart Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġserialized Ġ= Ġrecords . records . map Values Ġ{ Ġserialize Record ( it . value ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Space X - Persistence ", Ġ" Serialized Ġin Ġ" Ġ+ Ġ( System . currentTimeMillis () Ġ- Ġstart ) Ġ+ Ġ" Ġms ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWrite Ġto Ġstore ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpersistence Provider . save Records ( serialized ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Space X - Persistence ", Ġ" Written Ġin Ġ" Ġ+ Ġ( System . currentTimeMillis () Ġ- Ġstart ) Ġ+ Ġ" Ġms ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġqueue . async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLoad Ġrecords Ġfrom Ġstore ĊĠĠĠĠ Ġ* Ġ@ param Ġkeys Ġkeys Ġto Ġread ĊĠĠĠĠ Ġ* Ġ@ param Ġqueue Ġ ĠDispatch Queue Ġto Ġdispatch Ġcallback Ġon ĊĠĠĠĠ Ġ* Ġ@ param Ġcallback ĠCallback Ġto Ġcall Ġon Ġsuccessful Ġread ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġload Records ( keys : ĠSet < String >, Ġqueue : ĠDispatch Queue , Ġcallback : Ġ( records : ĠRecord Set ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreader Executor . execute Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReading Ġfrom Ġstore ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġstart Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġpersistence Provider . load Records ( keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Space X - Persistence ", Ġ" Read Ġin Ġ" Ġ+ Ġ( System . currentTimeMillis () Ġ- Ġstart ) Ġ+ Ġ" Ġms ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠParsing ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġloaded Ġ= Ġmutable Map Of < String , ĠRecord >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( kv Ġin Ġres ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloaded [ kv . key ] Ġ= Ġparse Record ( kv . key , Ġkv . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFill Ġempty Ġfor Ġmissing Ġrecords ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( k Ġin Ġkeys ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! loaded . containsKey ( k )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloaded [ k ] Ġ= ĠRecord ( k , Ġempty Map ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Space X - Persistence ", Ġ" Parsed Ġin Ġ" Ġ+ Ġ( System . currentTimeMillis () Ġ- Ġstart ) Ġ+ Ġ" Ġms ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġqueue . async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( Record Set ( loaded )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ