package Ġcom . field on track . k mm . feature . core Ċ Ċ import Ġcom . field on track . k mm . common . Data Base Ċ import Ġcom . field on track . k mm . common . Network Client Ċ import Ġcom . field on track . k mm . common . User Settings Ċ import Ġcom . field on track . k mm . entities . countries . Country Extra Data Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġkotlin . native . concurrent . Thread Local Ċ Ċ class ĠRepository ( ĊĠĠĠ Ġval Ġlocal Db : ĠData Base , ĊĠĠĠ Ġval Ġlocal Settings : ĠUser Settings , ĊĠĠĠ Ġval Ġweb services : ĠNetwork Client , ĊĠĠĠ Ġval Ġuse Default Dispatcher : ĠBoolean Ġ= Ġtrue Ċ ) Ġ{ ĊĊĠĠĠ Ġ// ĠĠĠ Ġinternal Ġval Ġweb services Ġby Ġlazy Ġ{ ĠApi Client () Ġ} Ċ // ĠĠĠ Ġinternal Ġval Ġlocal Db Ġby Ġlazy Ġ{ ĠLocal Db ( sql Driver ) Ġ} Ċ // ĠĠĠ Ġinternal Ġval Ġlocal Settings Ġby Ġlazy Ġ{ ĠMy Settings ( settings ) Ġ} ĊĠĠĠ Ġval Ġruntime Cache : ĠMemory Cache Ġget () Ġ= ĠCache Objects ĊĊĠĠĠ Ġ// Ġwe Ġrun Ġeach Ġrepository Ġfunction Ġon Ġa ĠDispatch ers . Default Ġcoroutine ĊĠĠĠ Ġ// Ġwe Ġpass Ġuse Default Dispatcher = false Ġjust Ġfor Ġthe ĠTest Repository Ġinstance ĊĠĠĠ Ġsuspend Ġfun Ġ< T > Ġwith Repo Context ( block : Ġsuspend Ġ() Ġ-> ĠT ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( use Default Dispatcher ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ @ Thread Local Ċ private Ġobject ĠCache Objects Ġ: ĠMemory Cache Ġ{ ĊĠĠĠ Ġ// Ġhere Ġis Ġthe Ġrepository Ġdata Ġwe Ġdecide Ġto Ġjust Ġcache Ġtemporarily Ġ( for Ġthe Ġruntime Ġsession ), ĊĠĠĠ Ġ// Ġrather Ġthan Ġcaching Ġit Ġper manently Ġin Ġthe Ġlocal Ġdb Ġor Ġlocal Ġsettings ĊĊĠĠĠ Ġoverride Ġval Ġcountry Extra Data : ĠMutable Map < String , ĠCountry Extra Data > Ġby Ġlazy Ġ{ Ġmutable Map Of () Ġ} Ċ Ċ } ĊĊ Ċ interface ĠMemory Cache Ġ{ ĊĠĠĠ Ġval Ġcountry Extra Data : ĠMutable Map < String , ĠCountry Extra Data > Ċ }