/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 7 - present ĠRobert ĠJar os Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 ĠY ann ik ĠH amp e Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġio . k vision . core Ċ Ċ interface ĠSingle Object Cache < T Ġ: ĠAny > Ġ{ ĊĠĠĠ Ġval Ġvalue : ĠT ĊĠĠĠ Ġfun Ġclear () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġnew Ġcache , Ġthat Ġwraps Ġthe Ġold Ġcache Ġand Ġautomatically Ġcalls Ġ@ see Ġclear Ġbefore Ġretrieving Ġa Ġvalue Ġif ĊĠĠĠĠ Ġ* Ġshould Clear Ġreturns Ġtrue ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġclear On ( should Clear : Ġ() Ġ-> ĠBoolean ): ĠSingle Object Cache < T > Ġ= ĠAuto Clear Cache ( this , Ġshould Clear ) Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġcache Ġthat Ġbehaves Ġlike Ġa Ġreset table Ġ` Lazy `: ĠIt Ġgenerates Ġa Ġvalue Ġfrom Ġa Ġgiven Ġinitializer Ġl az ily , Ġhowever Ġthat Ċ Ġ* Ġcache Ġcan Ġbe Ġcleared , Ġso Ġthat Ġthe Ġvalue Ġwill Ġbe Ġregenerated Ġwhen Ġqueried Ġnext Ċ Ġ*/ Ċ class ĠLazy Cache < T Ġ: ĠAny >( val Ġinitializer : Ġ() Ġ-> ĠT ) Ġ: ĠSingle Object Cache < T > Ġ{ ĊĠĠĠ Ġoverride Ġval Ġvalue : ĠT ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ value Ġ?: Ġinitializer (). also Ġ{ Ġ_ value Ġ= Ġit Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġ_ value : ĠT ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ value Ġ= Ġnull ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠAuto Clear Cache < T Ġ: ĠAny >( val Ġdelegate : ĠSingle Object Cache < T >, Ġval Ġshould Clear : Ġ() Ġ-> ĠBoolean ) Ġ: ĊĠĠĠ ĠSingle Object Cache < T > Ġby Ġdelegate Ġ{ ĊĠĠĠ Ġoverride Ġval Ġvalue : ĠT ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( should Clear ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdelegate . value ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ