/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠGoogle ĠLLC . Ċ Ġ* Ċ Ġ* ĠThis Ġcode Ġmay Ġonly Ġbe Ġused Ġunder Ġthe ĠBSD Ġstyle Ġlicense Ġfound Ġat Ċ Ġ* Ġhttp :// polymer . github . io / LICENSE . txt Ċ Ġ* Ċ Ġ* ĠCode Ġdistributed Ġby ĠGoogle Ġas Ġpart Ġof Ġthis Ġproject Ġis Ġalso Ġsubject Ġto Ġan Ġadditional ĠIP Ġrights Ċ Ġ* Ġgrant Ġfound Ġat Ċ Ġ* Ġhttp :// polymer . github . io / PAT ENTS . txt Ċ Ġ*/ Ċ Ċ package Ġar cs . core . data Ċ Ċ /** Ċ Ġ* ĠStore Ġcapabilities Ġcontaining Ġa Ġcombination Ġof Ġindividual Ġ[ Capability ] s Ġ( e . g . ĠPersistence Ċ Ġ* Ġand / or ĠT tl Ġand / or ĠQuery able Ġetc ). Ċ Ġ* ĠIf Ġa Ġcertain Ġcapability Ġdoes Ġnot Ġappear Ġin Ġthe Ġcombination , Ġit Ġis Ġnot Ġrestricted . Ċ Ġ*/ Ċ class ĠCap abilities ( capabilities : ĠList < Capability > Ġ= Ġempty List ()) Ġ{ ĊĠĠĠ Ġval Ġranges : ĠList < Capability . Range > ĊĊĠĠĠ Ġconstructor ( capability : ĠCap ability ) Ġ: Ġthis ( listOf ( capability )) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġranges Ġ= Ġcapabilities . map Ġ{ Ġit Ġ-> Ġit . to Range () Ġ} ĊĠĠĠĠĠĠĠ Ġrequire ( ranges . distinct By Ġ{ Ġit . min . tag Ġ}. size Ġ== Ġcapabilities . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Capabilities Ġmust Ġbe Ġunique Ġ$ capabilities ." ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġpersistence : ĠCap ability . Persistence ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġget Capability < Capability . Persistence >() ĊĊĠĠĠ Ġval Ġttl : ĠCap ability . T tl ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġget Capability < Capability . T tl >() ĊĊĠĠĠ Ġval Ġis Encrypted : ĠBoolean ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġget Capability < Capability . Encryption >() ?. let Ġ{ Ġit . value Ġ} ĊĊĠĠĠ Ġval Ġis Queryable : ĠBoolean ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġget Capability < Capability . Queryable >() ?. let Ġ{ Ġit . value Ġ} ĊĊĠĠĠ Ġval Ġis Share able : ĠBoolean ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġget Capability < Capability . Share able >() ?. let Ġ{ Ġit . value Ġ} ĊĊĠĠĠ Ġval ĠisEmpty Ġ= Ġranges . isEmpty () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġtrue , Ġif Ġthe Ġgiven Ġ[ Capability ] Ġis Ġwithin Ġthe Ġcorresponding Ġ[ Capability . Range ] ĊĠĠĠĠ Ġ* Ġof Ġsame Ġtype Ġof Ġthis . ĊĠĠĠĠ Ġ* ĠFor Ġexample , Ġ[ Capabilities ] Ġwith ĠT tl Ġrange Ġof Ġ 1 - 5 Ġdays Ġ` contains ` Ġa ĠT tl Ġof Ġ 3 Ġdays . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcontains ( capability : ĠCap ability ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġranges . find Ġ{ Ġit . is Compatible ( capability ) Ġ} ?. contains ( capability ) Ġ?: Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġtrue Ġif Ġall Ġranges Ġin Ġthe Ġgiven Ġ[ Capabilities ] Ġare Ġcontained Ġin Ġthis . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcontains All ( other : ĠCap abilities ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġother . ranges . all Ġ{ Ġother Range Ġ-> Ġcontains ( other Range ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Equivalent ( other : ĠCap abilities ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġranges . size Ġ== Ġother . ranges . size Ġ&& Ġother . ranges . all Ġ{ Ġhas Equivalent ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhas Equivalent ( capability : ĠCap ability ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġranges . any Ġ{ Ġit . is Compatible ( capability ) Ġ&& Ġit . is Equivalent ( capability ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠCap ability > Ġget Capability (): ĠT ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġranges . find Ġ{ Ġit . min Ġis ĠT Ġ} ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( it . min . is Equivalent ( it . max )) Ġ{ Ġ" Cannot Ġget Ġcapability Ġfor Ġa Ġrange " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . min Ġas ĠT ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Annotations ( annotations : ĠList < Annotation >): ĠCap abilities Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġranges Ġ= Ġmutable ListOf < Capability . Range >() ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCap ability . Persistence . from Annotations ( annotations )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġranges . add ( it . to Range ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCap ability . Encryption . from Annotations ( annotations )?. let Ġ{ Ġranges . add ( it . to Range ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCap ability . T tl . from Annotations ( annotations )?. let Ġ{ Ġranges . add ( it . to Range ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCap ability . Queryable . from Annotations ( annotations )?. let Ġ{ Ġranges . add ( it . to Range ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCap ability . Share able . from Annotations ( annotations )?. let Ġ{ Ġranges . add ( it . to Range ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCap abilities ( ranges ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfrom Annotation ( annotation : ĠAnnotation ) Ġ= Ġfrom Annotations ( listOf ( annotation )) ĊĠĠĠ Ġ} Ċ } Ċ