package Ġcom . github . sat osh un . reactivex . cache Ċ Ċ import Ġio . reactivex . Single Ċ Ċ fun Ġ< R Ġ: ĠAny > Ġrx Cache ( original : Ġ() Ġ-> ĠSingle < R >): ĠSingle Cache 0 < R > Ġ{ ĊĠ Ġreturn ĠSingle Cache 0 ( original ) Ċ } Ċ Ċ class ĠSingle Cache 0 < R Ġ: ĠAny >( ĊĠĠĠ Ġprivate Ġval Ġoriginal : Ġ() Ġ-> ĠSingle < R > Ċ ) Ġ: ĠFunction 0 < Single < R >> Ġ{ ĊĠ Ġprivate Ġvar Ġcache : ĠR ? Ġ= Ġnull ĊĊĠ Ġoverride Ġoperator Ġfun Ġinvoke (): ĠSingle < R > Ġ{ ĊĠĠĠ Ġval Ġvalue Ġ= Ġcache ĊĠĠĠ Ġreturn Ġif Ġ( value Ġ!= Ġnull ) ĠSingle . just ( value ) ĊĠĠĠ Ġelse Ġforce Invalid ation () ĊĠ Ġ} ĊĊĠ Ġfun Ġforce Invalid ation (): ĠSingle < R > Ġ{ ĊĠĠĠ Ġreturn Ġoriginal (). do On Success Ġ{ Ġcache Ġ= Ġit Ġ} ĊĠ Ġ} Ċ } Ċ Ċ fun Ġ< P 1 , ĠR Ġ: ĠAny > Ġrx Cache ( original : Ġ( P 1 ) Ġ-> ĠSingle < R >): ĠSingle Cache 1 < P 1 , ĠR > Ġ{ ĊĠ Ġreturn ĠSingle Cache 1 ( original ) Ċ } Ċ Ċ class ĠSingle Cache 1 < in ĠP 1 , ĠR Ġ: ĠAny >( ĊĠĠĠ Ġprivate Ġval Ġoriginal : Ġ( P 1 ) Ġ-> ĠSingle < R > Ċ ) Ġ: ĠFunction 1 < P 1 , ĠSingle < R >> Ġ{ ĊĠ Ġprivate Ġval Ġcache Ġ= ĠCache Map < P 1 , ĠR >() ĊĊĠ Ġoverride Ġoperator Ġfun Ġinvoke ( p 1 : ĠP 1 ): ĠSingle < R > Ġ{ ĊĠĠĠ Ġval Ġvalue Ġ= Ġif Ġ( p 1 Ġ== Ġnull ) Ġnull Ġelse Ġcache [ p 1 ] ĊĠĠĠ Ġreturn Ġif Ġ( value Ġ!= Ġnull ) ĠSingle . just ( value ) ĊĠĠĠ Ġelse Ġforce Invalid ation ( p 1 ) ĊĠ Ġ} ĊĊĠ Ġfun Ġforce Invalid ation ( p 1 : ĠP 1 ): ĠSingle < R > Ġ{ ĊĠĠĠ Ġreturn Ġoriginal ( p 1 ). do On Success Ġ{ Ġif Ġ( p 1 Ġ!= Ġnull ) Ġcache [ p 1 ] Ġ= Ġit Ġ} ĊĠ Ġ} Ċ } Ċ Ċ fun Ġ< P 1 , ĠP 2 , ĠR Ġ: ĠAny > Ġrx Cache ( original : Ġ( P 1 , ĠP 2 ) Ġ-> ĠSingle < R >): ĠSingle Cache 2 < P 1 , ĠP 2 , ĠR > Ġ{ ĊĠ Ġreturn ĠSingle Cache 2 ( original ) Ċ } Ċ Ċ class ĠSingle Cache 2 < in ĠP 1 , Ġin ĠP 2 , ĠR Ġ: ĠAny >( ĊĠĠĠ Ġprivate Ġval Ġoriginal : Ġ( P 1 , ĠP 2 ) Ġ-> ĠSingle < R > Ċ ) Ġ: ĠFunction 2 < P 1 , ĠP 2 , ĠSingle < R >> Ġ{ ĊĠ Ġprivate Ġval Ġcache Ġ= ĠCache Map < CacheKey 2 < P 1 , ĠP 2 >, ĠR >() ĊĊĠ Ġoverride Ġoperator Ġfun Ġinvoke ( p 1 : ĠP 1 , Ġp 2 : ĠP 2 ): ĠSingle < R > Ġ{ ĊĠĠĠ Ġval Ġkey Ġ= ĠCache Key 2 ( p 1 , Ġp 2 ) ĊĠĠĠ Ġval Ġvalue Ġ= Ġcache [ key ] ĊĠĠĠ Ġreturn Ġif Ġ( value Ġ!= Ġnull ) ĠSingle . just ( value ) ĊĠĠĠ Ġelse Ġforce Invalid ation ( p 1 , Ġp 2 ) ĊĠ Ġ} ĊĊĠ Ġfun Ġforce Invalid ation ( p 1 : ĠP 1 , Ġp 2 : ĠP 2 ): ĠSingle < R > Ġ{ ĊĠĠĠ Ġval Ġkey Ġ= ĠCache Key 2 ( p 1 , Ġp 2 ) ĊĠĠĠ Ġreturn Ġoriginal ( p 1 , Ġp 2 ). do On Success Ġ{ Ġcache [ key ] Ġ= Ġit Ġ} ĊĠ Ġ} Ċ } Ċ Ċ fun Ġ< P 1 , ĠP 2 , ĠP 3 , ĠR Ġ: ĠAny > Ġrx Cache ( original : Ġ( P 1 , ĠP 2 , ĠP 3 ) Ġ-> ĠSingle < R >): ĠSingle Cache 3 < P 1 , ĠP 2 , ĠP 3 , ĠR > Ġ{ ĊĠ Ġreturn ĠSingle Cache 3 ( original ) Ċ } Ċ Ċ class ĠSingle Cache 3 < in ĠP 1 , Ġin ĠP 2 , Ġin ĠP 3 , ĠR Ġ: ĠAny >( ĊĠĠĠ Ġprivate Ġval Ġoriginal : Ġ( P 1 , ĠP 2 , ĠP 3 ) Ġ-> ĠSingle < R > Ċ ) Ġ: ĠFunction 3 < P 1 , ĠP 2 , ĠP 3 , ĠSingle < R >> Ġ{ ĊĠ Ġprivate Ġval Ġcache Ġ= ĠCache Map < CacheKey 3 < P 1 , ĠP 2 , ĠP 3 >, ĠR >() ĊĊĠ Ġoverride Ġoperator Ġfun Ġinvoke ( p 1 : ĠP 1 , Ġp 2 : ĠP 2 , Ġp 3 : ĠP 3 ): ĠSingle < R > Ġ{ ĊĠĠĠ Ġval Ġkey Ġ= ĠCache Key 3 ( p 1 , Ġp 2 , Ġp 3 ) ĊĠĠĠ Ġval Ġvalue Ġ= Ġcache [ key ] ĊĠĠĠ Ġreturn Ġif Ġ( value Ġ!= Ġnull ) ĠSingle . just ( value ) ĊĠĠĠ Ġelse Ġforce Invalid ation ( p 1 , Ġp 2 , Ġp 3 ) ĊĠ Ġ} ĊĊĠ Ġfun Ġforce Invalid ation ( p 1 : ĠP 1 , Ġp 2 : ĠP 2 , Ġp 3 : ĠP 3 ): ĠSingle < R > Ġ{ ĊĠĠĠ Ġval Ġkey Ġ= ĠCache Key 3 ( p 1 , Ġp 2 , Ġp 3 ) ĊĠĠĠ Ġreturn Ġoriginal ( p 1 , Ġp 2 , Ġp 3 ). do On Success Ġ{ Ġcache [ key ] Ġ= Ġit Ġ} ĊĠ Ġ} Ċ } Ċ Ċ fun Ġ< P 1 , ĠP 2 , ĠP 3 , ĠP 4 , ĠR Ġ: ĠAny > Ġrx Cache ( original : Ġ( P 1 , ĠP 2 , ĠP 3 , ĠP 4 ) Ġ-> ĠSingle < R >): ĠSingle Cache 4 < P 1 , ĠP 2 , ĠP 3 , ĠP 4 , ĠR > Ġ{ ĊĠ Ġreturn ĠSingle Cache 4 ( original ) Ċ } Ċ Ċ class ĠSingle Cache 4 < in ĠP 1 , Ġin ĠP 2 , Ġin ĠP 3 , Ġin ĠP 4 , ĠR Ġ: ĠAny >( ĊĠĠĠ Ġprivate Ġval Ġoriginal : Ġ( P 1 , ĠP 2 , ĠP 3 , ĠP 4 ) Ġ-> ĠSingle < R > Ċ ) Ġ: ĠFunction 4 < P 1 , ĠP 2 , ĠP 3 , ĠP 4 , ĠSingle < R >> Ġ{ ĊĠ Ġprivate Ġval Ġcache Ġ= ĠCache Map < CacheKey 4 < P 1 , ĠP 2 , ĠP 3 , ĠP 4 >, ĠR >() ĊĊĠ Ġoverride Ġoperator Ġfun Ġinvoke ( p 1 : ĠP 1 , Ġp 2 : ĠP 2 , Ġp 3 : ĠP 3 , Ġp 4 : ĠP 4 ): ĠSingle < R > Ġ{ ĊĠĠĠ Ġval Ġkey Ġ= ĠCache Key 4 ( p 1 , Ġp 2 , Ġp 3 , Ġp 4 ) ĊĠĠĠ Ġval Ġvalue Ġ= Ġcache [ key ] ĊĠĠĠ Ġreturn Ġif Ġ( value Ġ!= Ġnull ) ĠSingle . just ( value ) ĊĠĠĠ Ġelse Ġforce Invalid ation ( p 1 , Ġp 2 , Ġp 3 , Ġp 4 ) ĊĠ Ġ} ĊĊĠ Ġfun Ġforce Invalid ation ( p 1 : ĠP 1 , Ġp 2 : ĠP 2 , Ġp 3 : ĠP 3 , Ġp 4 : ĠP 4 ): ĠSingle < R > Ġ{ ĊĠĠĠ Ġval Ġkey Ġ= ĠCache Key 4 ( p 1 , Ġp 2 , Ġp 3 , Ġp 4 ) ĊĠĠĠ Ġreturn Ġoriginal ( p 1 , Ġp 2 , Ġp 3 , Ġp 4 ). do On Success Ġ{ Ġcache [ key ] Ġ= Ġit Ġ} ĊĠ Ġ} Ċ } Ċ