package Ġorg . research suite . research suite extensions . common Ċ Ċ import Ġandroid . util . Atomic File Ċ import Ġjava . io .* Ċ import Ġjava . security . General Security Exception Ċ Ċ open Ġclass ĠRS KeyValue Store ( val ĠfilePath : ĠString , Ġval Ġobject Converter : ĠRS Object Converter < Map < String , ĠAny >> Ġ= ĠRS Java Object Converter ()) Ġ{ ĊĊĠĠĠ Ġvar Ġcurrent Map : ĠMap < String , ĠAny >? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġprivate Ġfun Ġload Map (): ĠMap < String , ĠAny >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( this . filePath ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbytes : ĠByteArray ? Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġatomic File Ġ= ĠAtomic File ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġatomic File . read Fully () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠFileNotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( bytes Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis . object Converter . from Bytes ( bytes ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġprivate Ġfun Ġget Map (): ĠMap < String , ĠAny > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcurrent Map Ġ?: Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// check Ġif Ġfile Ġexists ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// if Ġso , Ġload Ġfile , Ġreturn Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Map (). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . current Map Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// if Ġnot , Ġcreate Ġfile Ġand Ġsave Ġempty Ġmap Ġto Ġdisk ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// return Ġempty Ġmap ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġmap Of < String , ĠAny >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . save Map ( map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} () ĊĊĠĠĠĠĠĠĠ Ġ} () ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġprivate Ġfun Ġsave Map ( map : ĠMap < String , ĠAny >) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// convert Ġmap Ġto Ġbytes ĊĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= Ġthis . object Converter . to Bytes ( map ) ĊĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( this . filePath ) ĊĠĠĠĠĠĠĠ Ġfile . mkdir s () ĊĊĠĠĠĠĠĠĠ Ġval Ġatomic File Ġ= ĠAtomic File ( file ) ĊĠĠĠĠĠĠĠ Ġval Ġf os Ġ= Ġatomic File . start Write () ĊĊĠĠĠĠĠĠĠ Ġf os . write ( bytes ) ĊĠĠĠĠĠĠĠ Ġatomic File . finish Write ( fos ) ĊĠĠĠĠĠĠĠ Ġf os . close () ĊĊĠĠĠĠĠĠĠ Ġthis . current Map Ġ= Ġmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// get ĊĠĠĠ Ġfun Ġget ( key : ĠString ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . getMap (). get ( key ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// set ĊĠĠĠ Ġfun Ġset ( key : ĠString , Ġvalue : ĠAny ?) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . save Map ( this . getMap (). minus ( key )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . save Map ( this . getMap (). plus ( Pair ( key , Ġvalue ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// has ĊĠĠĠ Ġfun Ġhas ( key : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . getMap (). containsKey ( key ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// remove ĊĠĠĠ Ġfun Ġremove ( key : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . save Map ( this . getMap (). minus ( key )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// clear ĊĠĠĠ Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . save Map ( map Of ()) ĊĠĠĠ Ġ} Ċ Ċ }