package Ġcom . l ug g soft . common . util Ċ Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ import Ġjava . util . concurrent . Concurrent Map Ċ Ċ /** Ċ Ġ* ĠTODO Ċ Ġ* Ċ Ġ* Ġ@ param Ġmissing Value Ċ Ġ* Ġ@ param ĠTResult Ċ Ġ* Ġ@ property Ġblock Ċ Ġ* Ġ@ property Ġcache Ċ Ġ*/ Ċ data Ġclass ĠM emo ized 2 < T Param 1 , ĠT Param 2 , Ġout ĠTResult >( ĊĠĠĠ Ġprivate Ġval Ġblock : Ġ( T Param 1 , ĠT Param 2 ) Ġ-> ĠTResult , ĊĠĠĠ Ġprivate Ġval Ġcache : ĠConcurrent Map < Tuple 2 < T Param 1 , ĠT Param 2 >, ĠTResult > Ġ= ĠConcurrent HashMap () Ċ ) Ġ: Ġ( T Param 1 , ĠT Param 2 ) Ġ-> ĠTResult , ĠMap < Tuple 2 < T Param 1 , ĠT Param 2 >, ĠTResult > Ġby Ġcache Ċ { ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTODO ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġmissing Value ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġinvoke ( param 1 : ĠT Param 1 , Ġparam 2 : ĠT Param 2 ): ĠTResult ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= ĠTuple 2 ( param 1 , Ġparam 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġprovider Ġ= Ġthis . block . partial ( param 1 , Ġparam 2 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . cache . get Or Put ( key , Ġprovider ) ĊĠĠĠ Ġ} Ċ } Ċ