package Ġcom . mapbox . navigation . ui . maps . util Ċ Ċ import Ġandroid . util . L ru Cache Ċ Ċ internal Ġobject ĠCache Result Utils Ġ{ ĊĠĠĠ Ġprivate Ġinterface ĠCache Result Call < in ĠF , Ġout ĠR > Ġ{ ĊĠĠĠĠĠĠĠ Ġoperator Ġfun Ġinvoke ( f : ĠF ): ĠR ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġdata Ġclass ĠCache Result Key 1 < out ĠP 1 , ĠR >( val Ġp 1 : ĠP 1 ) Ġ: ĊĠĠĠĠĠĠĠ ĠCache Result Call <( P 1 ) Ġ-> ĠR , ĠR > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinvoke ( f : Ġ( P 1 ) Ġ-> ĠR ) Ġ= Ġf ( p 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< P 1 , ĠR > Ġ(( P 1 ) Ġ-> ĠR ). cache Result ( maxSize : ĠInt ): Ġ( P 1 ) Ġ-> ĠR Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: Ġ( P 1 ) Ġ-> ĠR Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġhandler Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCache Result Handler < (( P 1 ) Ġ-> ĠR ), ĠCache Result Key 1 < P 1 , ĠR >, ĠR >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ cache Result , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmaxSize ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinvoke ( p 1 : ĠP 1 ) Ġ= Ġhandler ( Cache Result Key 1 ( p 1 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠCache Result Handler < F , Ġin ĠK Ġ: ĠCache Result Call < F , ĠR >, Ġout ĠR >( ĊĠĠĠĠĠĠĠ Ġval Ġf : ĠF , ĊĠĠĠĠĠĠĠ ĠmaxSize : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcache Ġ= ĠL ru Cache < K , ĠR >( maxSize ) ĊĠĠĠĠĠĠĠ Ġoperator Ġfun Ġinvoke ( k : ĠK ): ĠR Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( cache ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcache [ k ] Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġk ( f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cache . get ( k ) Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache . put ( k , Ġr ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ