/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 - 2 0 2 2 ĠCh air Ġof ĠGe oin form atics , ĠTechnical ĠUniversity Ġof ĠM un ich Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġio . r tron . math . range Ċ Ċ import Ġcom . google . common . collect . ImmutableList Ċ import Ġcom . google . common . collect . Immutable Range Set Ġas ĠG Immutable Range Set Ċ Ċ /** ĠConversion Ġfrom ĠGu ava Ġrange Ġset Ġclass . Ġ*/ Ċ fun Ġ< T Ġ: ĠComparable <* >> ĠG Immutable Range Set < T >. to Range Set () Ġ= ĠRange Set ( this ) Ċ Ċ /** Ċ Ġ* ĠAn Ġimmutable Ġset Ġof Ġranges . Ċ Ġ* Ċ Ġ* Ġ@ param Ġrange Set Ġadapted ĠGu ava Ġclass Ċ Ġ*/ Ċ class ĠRange Set < T Ġ: ĠComparable < *> >( ĊĠĠĠ Ġprivate Ġval Ġrange Set : ĠG Immutable Range Set < T > Ċ ) Ġ{ ĊĊĠĠĠ Ġ// ĠSecondary ĠConstructors ĊĊĠĠĠ Ġconstructor ( ranges : ĠSet < Range < T >>) Ġ: ĊĠĠĠĠĠĠĠ Ġthis Ġ( G Immutable Range Set . copyOf ( ImmutableList . copyOf ( ranges . map Ġ{ Ġit . to Range G () Ġ} ))) ĊĊĠĠĠ Ġ// ĠOperators ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġtrue , Ġif Ġthe Ġ[ value ] Ġis Ġwithin Ġthe Ġ[ Range Set ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġcontains ( value : ĠT ): ĠBoolean Ġ= Ġvalue Ġin Ġthis . range Set ĊĊĠĠĠ Ġ// ĠMethods ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġminimal Ġrange Ġthat Ġen clo ses Ġthe Ġrange Ġset . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġspan (): ĠRange < T > Ġ= Ġthis . range Set . span (). to Range () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġtrue , Ġif Ġthis Ġ[ Range Set ] Ġintersect s Ġwith Ġthe Ġ[ other Range ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġintersect s ( other Range : ĠRange < T >): ĠBoolean Ġ= Ġthis . range Set . intersect s ( other Range . to Range G ()) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġtrue , Ġif Ġthis Ġ[ Range Set ] Ġintersect s Ġwith Ġthe Ġ[ other Range Set ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġintersect s ( other Range Set : ĠRange Set < T >): ĠBoolean Ġ= Ġother Range Set . as Ranges (). any Ġ{ Ġintersect s ( it ) Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUnion Ġoperation Ġof Ġthis Ġ[ Range Set ] Ġand Ġthe Ġ[ other ] Ġ[ Range Set ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġunion ( other : ĠRange Set < T >): ĠRange Set < T > Ġ= Ġrange Set . union ( other . to Range Set G ()). to Range Set () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġintersect ing Ġ[ Range Set ] Ġof Ġthis Ġrange Ġwith Ġthe Ġ[ other ] Ġ[ Range Set ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġother Ġrange Ġset Ġthat Ġmust Ġbe Ġconnected Ġto Ġthis Ġrange Ġset ĊĠĠĠĠ Ġ* Ġ@ return Ġintersect ing Ġ[ Range Set ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġintersection ( other : ĠRange Set < T >): ĠRange Set < T > Ġ= Ġrange Set . intersection ( other . to Range Set G ()). to Range Set () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġnew Ġ[ Range Set ] Ġconsisting Ġof Ġthe Ġdifference Ġof Ġthis Ġrange Ġset Ġand Ġthe Ġ[ other ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdifference ( other : ĠRange Set < T >): ĠRange Set < T > Ġ= Ġrange Set . difference ( other . to Range Set G ()). to Range Set () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġnumber Ġof Ġdisconnected Ġintervals Ġof Ġthis Ġ[ Range Set ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠnumberOf Disconnected Ranges () Ġ= Ġas Ranges (). size ĊĊĠĠĠ Ġ// ĠCon versions ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConversion Ġto ĠGu ava Ġrange Ġset Ġclass . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġto Range Set G () Ġ= Ġthis . range Set ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġall Ġranges Ġindividually . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġas Ranges (): ĠSet < Range < T >> Ġ= Ġthis . range Set . as Ranges (). map Ġ{ Ġit . to Range () Ġ}. toSet () ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( java Class Ġ!= Ġother ?. java Class ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġother Ġas ĠRange Set < *> ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this . range Set Ġ!= Ġother . range Set ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . range Set . hashCode () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCreates Ġan Ġempty Ġ[ Range Set ]. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġ< T Ġ: ĠComparable <* >> Ġempty () Ġ= ĠRange Set ( empty Set < Range < T >> ()) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCreates Ġa Ġ[ Range Set ] Ġthat Ġcontains Ġall Ġvalues . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġ< T Ġ: ĠComparable <* >> Ġall () Ġ= ĠRange Set ( set Of < Range < T >>( Range . all ())) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCreates Ġa Ġ[ Range Set ] Ġcontaining Ġthe Ġprovided Ġ[ ranges ]. ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġranges Ġranges Ġwhich Ġare Ġincluded Ġin Ġthe Ġ[ Range Set ] ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġ< T Ġ: ĠComparable <* >> Ġof ( var arg Ġranges : ĠRange < T >): ĠRange Set < T > Ġ= ĠRange Set ( ranges . toSet ()) ĊĠĠĠ Ġ} Ċ } Ċ