package Ġcom . ny times . android . external . store 3 . base . impl Ċ Ċ import Ġcom . ny times . android . external . cache 3 . Cache Ċ import Ġcom . ny times . android . external . cache 3 . Cache Builder Ċ import Ġcom . ny times . android . external . cache 3 . Cache Loader Ċ import Ġcom . ny times . android . external . cache 3 . Loading Cache Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ object ĠCache Factory Ġ{ ĊĊĠĠĠ Ġinternal Ġfun Ġ< Key , ĠParsed > Ġcreate Cache ( memory Policy : ĠMemory Policy ?, Ġcache Loader : ĠCache Loader < Key , ĠParsed >): ĠLoading Cache < Key , ĠParsed > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcreate Base Cache ( memory Policy , Ġcache Loader ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġ< Key , ĠParsed > Ġcreate In flight er ( memory Policy : ĠMemory Policy ?): ĠCache < Key , ĠParsed > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcreate Base In Flight er ( memory Policy ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< Key , ĠValue > Ġcreate Base In Flight er ( memory Policy : ĠMemory Policy ?): ĠCache < Key , ĠValue > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpire After To Seconds Ġ= Ġmemory Policy ?. expire After TimeUnit ?. to Seconds ( memory Policy . expire After Write ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠStore Defaults . cache TTL TimeUnit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Seconds ( Store Defaults . cache TTL ) ĊĠĠĠĠĠĠĠ Ġval Ġmaximum In Flight Requests Duration Ġ= ĠTimeUnit . MIN UTES . to Seconds ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( expire After To Seconds Ġ> Ġmaximum In Flight Requests Duration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCache Builder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. expire After Write ( maximum In Flight Requests Duration , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpire After Ġ= Ġmemory Policy ?. expire After Write Ġ?: ĠStore Defaults . cache TTL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpire After Unit Ġ= Ġif Ġ( memory Policy Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStore Defaults . cache TTL TimeUnit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmemory Policy . expire After TimeUnit ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCache Builder . newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. expire After Write ( expire After , Ġexpire After Unit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġ< Key , ĠValue > Ġcreate Base Cache ( memory Policy : ĠMemory Policy ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache Loader : ĠCache Loader < Key , Value >): ĠLoading Cache < Key , ĠValue > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( memory Policy Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCache Builder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. maximum Size ( Store Defaults . cache Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. expire After Write ( Store Defaults . cache TTL , ĠStore Defaults . cache TTL TimeUnit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ( cache Loader ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( memory Policy . expire After Access Ġ== ĠMemory Policy . DEFAULT _ POLICY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCache Builder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. maximum Size ( memory Policy . maxSize ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. expire After Write ( memory Policy . expire After Write , Ġmemory Policy . expire After TimeUnit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ( cache Loader ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCache Builder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. maximum Size ( memory Policy . maxSize ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. expire After Access ( memory Policy . expire After Access , Ġmemory Policy . expire After TimeUnit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ( cache Loader ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ