package Ġdev . re imer . ale xa Ċ Ċ import Ġdev . re imer . domain . k tx . Domain Ċ import Ġjava . io . File Ċ Ċ internal Ġclass ĠAlex a R anks File Cache ( top 1 m File : ĠFile ) Ġ: ĠAbstract Map < Domain , ĠLong >() Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġentries Ġby Ġlazy Ġ{ Ġbuild Cache ( top 1 m File ) Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Cache ( file : ĠFile ): ĠSet < Map . Entry < Domain , ĠLong >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfile . use Lines Ġ{ Ġlines Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlines . map Ġ{ Ġline Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( rank , Ġdomain ) Ġ= Ġline . split (",") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠMap . Entry < Domain , ĠLong > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġkey Ġ= ĠDomain ( domain ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġvalue Ġ= Ġrank . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toSet () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcontains Key ( key : ĠDomain ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . containsKey ( key ) Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey . has Prefix Ġ-> Ġcontains Key ( key . strip Sub Domain ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget ( key : ĠDomain ): ĠLong ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . containsKey ( key ) Ġ-> Ġsuper . get ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey . has Prefix Ġ-> Ġget ( key . strip Sub Domain ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget OrDefault ( key : ĠDomain , ĠdefaultValue : ĠLong ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . containsKey ( key ) Ġ-> Ġsuper . get OrDefault ( key , ĠdefaultValue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey . has Prefix Ġ-> Ġget OrDefault ( key . strip Sub Domain (), ĠdefaultValue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . get OrDefault ( key , ĠdefaultValue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }