package Ġnet . oned aybe ard . bit vector Ċ Ċ const Ġval ĠWORD _ SIZE : ĠInt Ġ= Ġ 3 2 Ċ Ċ /** Ċ Ġ* ĠPerformance Ġoptimized Ġbit set Ġimplementation . ĠCert ain Ġoperations Ġare Ċ Ġ* Ġprefixed Ġwith Ġ` unsafe `; Ġthese Ġmethods Ġperform Ġno Ġvalidation . Ċ Ġ*/ Ċ class ĠBit Vector Ġ: ĠIterable < Int > Ġ{ ĊĠĠĠ Ġ/** Ġ( can Ġbe Ġmanip ulated Ġdirectly ) Ġ*/ ĊĠĠĠ Ġvar Ġwords Ġ= ĠInt Array ( 1 ) ĊĊĠĠĠ Ġconstructor () ĊĊĠĠĠ Ġ/** ĠCreates Ġa Ġbit Ġset Ġbased Ġoff Ġanother Ġbit Ġvector . Ġ*/ ĊĠĠĠ Ġconstructor ( copyFrom : ĠBit Vector ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwords Ġ= ĠInt Array ( copyFrom . words . size ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. words . size Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwords [ i ] Ġ= Ġcopy From . words [ i ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcopy () Ġ Ġ= ĠBit Vector ( this ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġindex Ġthe Ġindex Ġof Ġthe Ġbit ĊĠĠĠĠ Ġ* Ġ@ return Ġwhether Ġthe Ġbit Ġis Ġset ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġget ( index : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġword Ġ= Ġindex . to Word Idx () ĊĠĠĠĠĠĠĠ Ġreturn Ġword Ġ< Ġwords . size Ġ&& Ġwords [ word ] Ġand Ġ( 1 Ġshl Ġindex ) Ġ!= Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ@ param Ġindex Ġthe Ġindex Ġof Ġthe Ġbit Ġto Ġset Ġ*/ ĊĠĠĠ Ġfun Ġset ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġword Ġ= Ġindex . to Word Idx () ĊĠĠĠĠĠĠĠ Ġcheck Capacity ( word ) ĊĠĠĠĠĠĠĠ Ġwords [ word ] Ġ= Ġwords [ word ] Ġor Ġ( 1 Ġshl Ġindex ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ@ param Ġindex Ġthe Ġindex Ġof Ġthe Ġbit Ġto Ġset Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġset ( index : ĠInt , Ġvalue : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( index ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear ( index ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġindex Ġthe Ġindex Ġof Ġthe Ġbit ĊĠĠĠĠ Ġ* Ġ@ return Ġwhether Ġthe Ġbit Ġis Ġset ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġunsafe Get ( index : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwords [ index . to Word Idx ()] Ġand Ġ( 1 Ġshl Ġindex ) Ġ!= Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ@ param Ġindex Ġthe Ġindex Ġof Ġthe Ġbit Ġto Ġset Ġ*/ ĊĠĠĠ Ġfun Ġunsafe Set ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġword Ġ= Ġindex . to Word Idx () ĊĠĠĠĠĠĠĠ Ġwords [ word ] Ġ= Ġwords [ word ] Ġor Ġ( 1 Ġshl Ġindex ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ@ param Ġindex Ġthe Ġindex Ġof Ġthe Ġbit Ġto Ġset Ġ*/ ĊĠĠĠ Ġfun Ġunsafe Set ( index : ĠInt , Ġvalue : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġunsafe Set ( index ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġunsafe Clear ( index ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ@ param Ġindex Ġthe Ġindex Ġof Ġthe Ġbit Ġto Ġflip Ġ*/ ĊĠĠĠ Ġfun Ġflip ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġword Ġ= Ġindex . to Word Idx () ĊĠĠĠĠĠĠĠ Ġcheck Capacity ( word ) ĊĠĠĠĠĠĠĠ Ġwords [ word ] Ġ= Ġwords [ word ] Ġxor Ġ( 1 Ġshl Ġindex ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠG rows Ġthe Ġbacking Ġarray Ġso Ġthat Ġit Ġcan Ġhold Ġthe Ġrequested ĊĠĠĠĠ Ġ* Ġbits . ĠMost ly Ġapplicable Ġwhen Ġrelying Ġon Ġthe Ġ` unsafe ` Ġmethods , ĊĠĠĠĠ Ġ* Ġincluding Ġ[ unsafe Get ] Ġand Ġ[ unsafe Clear ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġbits Ġnumber Ġof Ġbits Ġto Ġac com od ate ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġensure Capacity ( bits : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Capacity ( bits . to Word Idx ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Capacity ( word Index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( word Index Ġ>= Ġwords . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwords Ġ= ĠInt Array ( word Index Ġ+ Ġ 1 ). also Ġ{ Ġa Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwords . forEach Indexed Ġ{ Ġidx , Ġbits Ġ-> Ġa [ idx ] Ġ= Ġbits Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġindex Ġthe Ġindex Ġof Ġthe Ġbit Ġto Ġclear ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġclear ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġword Ġ= Ġindex . to Word Idx () ĊĠĠĠĠĠĠĠ Ġif Ġ( word Ġ>= Ġwords . size ) Ġreturn ĊĠĠĠĠĠĠĠ Ġwords [ word ] Ġ= Ġwords [ word ] Ġand Ġ( 1 Ġshl Ġindex ). inv () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ@ param Ġindex Ġthe Ġindex Ġof Ġthe Ġbit Ġto Ġclear Ġ*/ ĊĠĠĠ Ġfun Ġunsafe Clear ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġword Ġ= Ġindex . to Word Idx () ĊĠĠĠĠĠĠĠ Ġwords [ word ] Ġ= Ġwords [ word ] Ġand Ġ( 1 Ġshl Ġindex ). inv () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠClear s Ġthe Ġentire Ġbit set Ġ Ġ*/ ĊĠĠĠ Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġwords . indices ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwords [ i ] Ġ= Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġ" logical Ġsize " Ġof Ġthis Ġbit set : Ġthe Ġindex Ġof Ġthe ĊĠĠĠĠ Ġ* Ġhighest Ġset Ġbit Ġin Ġthe Ġbit set Ġplus Ġone . ĠReturns Ġzero Ġif Ġthe ĊĠĠĠĠ Ġ* Ġbit set Ġcontains Ġno Ġset Ġbits . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġlogical Ġsize Ġof Ġthis Ġbit set ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġlength (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbits Ġ= Ġthis . words ĊĠĠĠĠĠĠĠ Ġfor Ġ( word Ġin Ġbits . indices . reversed ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbits At Word Ġ= Ġbits [ word ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bits At Word Ġ!= Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġword . bit Capacity () Ġ+ ĠWORD _ SIZE Ġ- Ġleading Z eros ( bits At Word ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ@ return Ġ` true ` Ġif Ġthis Ġbit set Ġcontains Ġno Ġset Ġbits Ġ*/ ĊĠĠĠ Ġval ĠisEmpty : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġwords . all Ġ{ Ġit Ġ== Ġ 0 Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPerforms Ġa Ġlogical Ġ** AND ** Ġof Ġthis Ġtarget Ġbit Ġset Ġwith Ġthe ĊĠĠĠĠ Ġ* Ġargument Ġbit Ġset . ĠThis Ġbit Ġset Ġis Ġmodified Ġso Ġthat Ġeach Ġbit Ġin ĊĠĠĠĠ Ġ* Ġit Ġhas Ġthe Ġvalue Ġtrue Ġif Ġand Ġonly Ġif Ġit Ġboth Ġinitially Ġhad Ġthe ĊĠĠĠĠ Ġ* Ġvalue Ġtrue Ġand Ġthe Ġcorresponding Ġbit Ġin Ġthe Ġbit Ġset Ġargument ĊĠĠĠĠ Ġ* Ġalso Ġhad Ġthe Ġvalue Ġtrue . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġother Ġa Ġbit Ġset ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġand ( other : ĠBit Vector ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcommon Words Ġ= Ġmin Of ( words . size , Ġother . words . size ) ĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( common Words Ġ> Ġi ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwords [ i ] Ġ= Ġwords [ i ] Ġand Ġother . words [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( words . size Ġ> Ġcommon Words ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġcommon Words ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġwords . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( s Ġ> Ġi ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwords [ i ] Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClear s Ġall Ġof Ġthe Ġbits Ġin Ġthis Ġbit Ġset Ġwhose Ġcorresponding ĊĠĠĠĠ Ġ* Ġbit Ġis Ġset Ġin Ġthe Ġspecified Ġbit Ġset . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġother Ġa Ġbit Ġset ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġand Not ( other : ĠBit Vector ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcommon Words Ġ= Ġmin Of ( words . size , Ġother . words . size ) ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( common Words Ġ> Ġi ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwords [ i ] Ġ= Ġwords [ i ] Ġand Ġother . words [ i ]. inv () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPerforms Ġa Ġlogical Ġ** OR ** Ġof Ġthis Ġbit Ġset Ġwith Ġthe Ġbit Ġset ĊĠĠĠĠ Ġ* Ġargument . ĠThis Ġbit Ġset Ġis Ġmodified Ġso Ġthat Ġa Ġbit Ġin Ġit Ġhas Ġthe ĊĠĠĠĠ Ġ* Ġvalue Ġ` true ` Ġif Ġand Ġonly Ġif Ġit Ġeither Ġalready Ġhad Ġthe Ġvalue Ġ` true ` ĊĠĠĠĠ Ġ* Ġor Ġthe Ġcorresponding Ġbit Ġin Ġthe Ġbit Ġset Ġargument Ġhas Ġthe ĊĠĠĠĠ Ġ* Ġvalue Ġ` true `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġother Ġa Ġbit Ġset ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġor ( other : ĠBit Vector ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcommon Words Ġ= Ġmin Of ( words . size , Ġother . words . size ) ĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( common Words Ġ> Ġi ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwords [ i ] Ġ= Ġwords [ i ] Ġor Ġother . words [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( common Words Ġ< Ġother . words . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Capacity ( other . words . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġcommon Words ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġother . words . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( s Ġ> Ġi ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwords [ i ] Ġ= Ġother . words [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPerforms Ġa Ġlogical Ġ** XOR ** Ġof Ġthis Ġbit Ġset Ġwith Ġthe Ġbit Ġset ĊĠĠĠĠ Ġ* Ġargument . ĠThis Ġbit Ġset Ġis Ġmodified Ġso Ġthat Ġa Ġbit Ġin Ġit Ġhas ĊĠĠĠĠ Ġ* Ġthe Ġvalue Ġtrue Ġif Ġand Ġonly Ġif Ġone Ġof Ġthe Ġfollowing Ġstatements Ġholds : ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ Ġ* ĠThe Ġbit Ġinitially Ġhas Ġthe Ġvalue Ġtrue , Ġand Ġthe Ġcorresponding Ġbit Ġin ĊĠĠĠĠ Ġ* ĠĠĠ Ġthe Ġargument Ġhas Ġthe Ġvalue Ġ` false `. ĊĠĠĠĠ Ġ* Ġ Ġ* ĠThe Ġbit Ġinitially Ġhas Ġthe Ġvalue Ġfalse , Ġand Ġthe Ġcorresponding Ġbit Ġin ĊĠĠĠĠ Ġ* ĠĠĠ Ġthe Ġargument Ġhas Ġthe Ġvalue Ġ` true `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġother ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġxor ( other : ĠBit Vector ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcommon Words Ġ= Ġmin Of ( words . size , Ġother . words . size ) ĊĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( common Words Ġ> Ġi ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwords [ i ] Ġ= Ġwords [ i ] Ġxor Ġother . words [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( common Words Ġ< Ġother . words . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Capacity ( other . words . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġcommon Words ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġother . words . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( s Ġ> Ġi ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwords [ i ] Ġ= Ġother . words [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġtrue Ġif Ġthe Ġspecified ĠBit Vector Ġhas Ġany Ġbits Ġset Ġto Ġtrue ĊĠĠĠĠ Ġ* Ġthat Ġare Ġalso Ġset Ġto Ġtrue Ġin Ġthis ĠBit Vector . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġother Ġa Ġbit Ġset ĊĠĠĠĠ Ġ* Ġ@ return Ġboolean Ġindicating Ġwhether Ġthis Ġbit Ġset Ġintersect s Ġthe Ġspecified Ġbit Ġset ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġintersect s ( other : ĠBit Vector ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbits Ġ= Ġthis . words ĊĠĠĠĠĠĠĠ Ġval Ġother Bits Ġ= Ġother . words ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġmin Of ( bits . size , Ġother Bits . size ) ĊĠĠĠĠĠĠĠ Ġwhile Ġ( s Ġ> Ġi ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bits [ i ] Ġand Ġother Bits [ i ] Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġtrue Ġif Ġthis Ġbit Ġset Ġis Ġa Ġsuper Ġset Ġof Ġthe Ġspecified Ġset , ĊĠĠĠĠ Ġ* Ġi . e . Ġit Ġhas Ġall Ġbits Ġset Ġto Ġtrue Ġthat Ġare Ġalso Ġset Ġto Ġtrue ĊĠĠĠĠ Ġ* Ġin Ġthe Ġspecified ĠBit Vector . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġother Ġa Ġbit Ġset ĊĠĠĠĠ Ġ* Ġ@ return Ġboolean Ġindicating Ġwhether Ġthis Ġbit Ġset Ġis Ġa Ġsuper Ġset Ġof Ġthe Ġspecified Ġset ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġcontains ( other : ĠBit Vector ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbits Ġ= Ġthis . words ĊĠĠĠĠĠĠĠ Ġval Ġother Bits Ġ= Ġother . words ĊĠĠĠĠĠĠĠ Ġval Ġother Bits Length Ġ= Ġother Bits . size ĊĠĠĠĠĠĠĠ Ġval Ġbits Length Ġ= Ġbits . size ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġbits Length .. other Bits Length Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( other Bits [ i ] Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġmin Of ( bits Length , Ġother Bits Length ) ĊĠĠĠĠĠĠĠ Ġwhile Ġ( s Ġ> Ġi ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bits [ i ] Ġand Ġother Bits [ i ] Ġ!= Ġother Bits [ i ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠReturns Ġthe Ġcount Ġof Ġ` true ` Ġbits Ġ*/ ĊĠĠĠ Ġfun Ġcardinality (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġwords . indices ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount Ġ+= Ġbit Count ( words [ i ]) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcount ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġiterator (): ĠInt Iterator Ġ= ĠBit Vector It ( this ) ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġword Ġ= Ġlength (). to Word Idx () ĊĠĠĠĠĠĠĠ Ġvar Ġhash Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( word Ġ>= Ġi ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhash Ġ= Ġ 1 2 7 Ġ* Ġhash Ġ+ Ġwords [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġhash ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( obj : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġobj ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( obj Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( this :: class Ġ!= Ġobj :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġval Ġother Ġ= Ġobj Ġas ĠBit Vector ? ĊĠĠĠĠĠĠĠ Ġval Ġother Bits Ġ= Ġother !!. words ĊĊĠĠĠĠĠĠĠ Ġval Ġcommon Words Ġ= Ġmin Of ( words . size , Ġother Bits . size ) ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( common Words Ġ> Ġi ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( words [ i ] Ġ!= Ġother Bits [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( words . size Ġ== Ġother Bits . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĊĠĠĠĠĠĠĠ Ġreturn Ġlength () Ġ== Ġother . length () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcardinality Ġ= Ġcardinality () ĊĠĠĠĠĠĠĠ Ġval Ġend Ġ= Ġmin Of ( 1 2 8 , Ġcardinality ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( cardinality Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Ġ= Ġ" Bit Vector [$ cardinality : Ġ{" Ġ+ Ġtake ( 1 2 8 ). join ToString ( separator Ġ= Ġ", Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Ġ= Ġif Ġ( cardinality Ġ> Ġend ) Ġ" Ġ... }] " Ġelse Ġ" }] " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfirst Ġ+ Ġlast ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Bit Vector []" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEnum er ates Ġover Ġall Ġ` true ` Ġbits Ġsequ ene ially . ĠThis Ġfunction ĊĠĠĠĠ Ġ* Ġperforms Ġbetter Ġthan Ġ[ forEach ] Ġand Ġany Ġother Ġfunctions ĊĠĠĠĠ Ġ* Ġfrom Ġ` Iterable < Int >`. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinline Ġfun ĠforEach Bit ( f : Ġ( Int ) Ġ-> ĠUnit ): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġw Ġ= Ġwords ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġw . size ĊĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( size Ġ> Ġindex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbit set Ġ= Ġw [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( bit set Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt Ġ= Ġbit set Ġand Ġ- bit set ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbit set Ġ= Ġbit set Ġxor Ġt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf (( index Ġshl Ġ 5 ) Ġ+ Ġbit Count ( t Ġ- Ġ 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ