/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 8 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ċ Ġ* Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ Ċ package Ġkotlin . native Ċ Ċ /** Ċ Ġ* ĠA Ġvector Ġof Ġbits Ġgrowing Ġif Ġnecessary Ġand Ġallowing Ġone Ġto Ġset / clear / read Ġbits Ġfrom Ġit Ġby Ġa Ġbit Ġindex . Ċ Ġ* Ċ Ġ* Ġ@ constructor Ġcreates Ġan Ġempty Ġbit Ġset Ġwith Ġthe Ġspecified Ġ[ size ] Ċ Ġ* Ġ@ param Ġsize Ġthe Ġsize Ġof Ġone Ġelement Ġin Ġthe Ġarray Ġused Ġto Ġstore Ġbits . Ċ Ġ*/ Ċ public Ġclass ĠBit Set ( size : ĠInt Ġ= ĠELEMENT _ SIZE ) Ġ{ ĊĊĠĠĠ Ġ@ kotlin . native . internal . Can Be Pre created ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠDefault Ġsize Ġof Ġone Ġelement Ġin Ġthe Ġarray Ġused Ġto Ġstore Ġbits . ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠELEMENT _ SIZE Ġ= Ġ 6 4 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAX _ BIT _ OFFSET Ġ= ĠELEMENT _ SIZE Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠALL _ TRUE Ġ= Ġ- 1 L Ġ// Ġ 0 xFFFF _ FFFF _ FFFF _ FFFF ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠALL _ FALSE Ġ= Ġ 0 L Ġ// Ġ 0 x 0 0 0 0 _ 0 0 0 0 _ 0 0 0 0 _ 0 0 0 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġbits : ĠLong Array Ġ= ĠLong Array ( bit To Element Size ( size )) ĊĊĠĠĠ Ġprivate Ġval Ġlast Index : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġsize Ġ- Ġ 1 ĊĊĠĠĠ Ġ/** ĠReturns Ġan Ġindex Ġof Ġthe Ġlast Ġbit Ġthat Ġhas Ġ` true ` Ġvalue . ĠReturns Ġ- 1 Ġif Ġthe Ġset Ġis Ġempty . Ġ*/ ĊĠĠĠ Ġval Ġlast True Index : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġprevious Set Bit ( size ) ĊĊĠĠĠ Ġ/** ĠTrue Ġif Ġthis ĠBit Set Ġcontains Ġno Ġbits Ġset Ġto Ġtrue . Ġ*/ ĊĠĠĠ Ġval ĠisEmpty : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġbits . all Ġ{ Ġit Ġ== ĠALL _ FALSE Ġ} ĊĊĠĠĠ Ġ/** ĠActual Ġnumber Ġof Ġbits Ġavailable Ġin Ġthe Ġset . ĠAll Ġbits Ġwith Ġindices Ġ>= Ġsize Ġassumed Ġto Ġbe Ġ 0 Ġ*/ ĊĠĠĠ Ġvar Ġsize : ĠInt Ġ= Ġsize ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġbit Ġset Ġof Ġgiven Ġ[ length ] Ġfilling Ġelements Ġusing Ġ[ initializer ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( length : ĠInt , Ġinitializer : Ġ( Int ) Ġ-> ĠBoolean ): Ġthis ( length ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġlength ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( i , Ġinitializer ( i )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTrans forms Ġa Ġbit Ġindex Ġinto Ġan Ġelement Ġindex Ġin Ġthe Ġ` bits ` Ġarray . ĊĠĠĠ Ġprivate Ġval ĠInt . element Index : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis Ġ/ ĠELEMENT _ SIZE ĊĊĠĠĠ Ġ// ĠTrans forms Ġa Ġbit Ġindex Ġin Ġthe Ġset Ġinto Ġa Ġbit Ġin Ġthe Ġelement Ġof Ġthe Ġ` bits ` Ġarray . ĊĠĠĠ Ġprivate Ġval ĠInt . bit Offset : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis Ġ% ĠELEMENT _ SIZE ĊĊĠĠĠ Ġ// ĠTrans forms Ġa Ġbit Ġindex Ġin Ġthe Ġset Ġinto Ġpair Ġof Ġa Ġ` bits ` Ġelement Ġindex Ġand Ġa Ġbit Ġindex Ġin Ġthe Ġelement . ĊĠĠĠ Ġprivate Ġval ĠInt . as Bit Coordinates : ĠPair < Int , ĠInt > ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠPair ( element Index , Ġbit Offset ) ĊĊĠĠĠ Ġ// ĠTrans forms Ġa Ġbit Ġoffset Ġto Ġthe Ġmask Ġwith Ġonly Ġbit Ġset Ġcorresponding Ġto Ġthe Ġoffset . ĊĠĠĠ Ġprivate Ġval ĠInt . as Mask : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ 0 x 1 L Ġshl Ġthis ĊĊĠĠĠ Ġ// ĠTrans forms Ġa Ġbit Ġoffset Ġto Ġthe Ġmask Ġwith Ġonly Ġbits Ġbefore Ġthe Ġindex Ġ( inclusive ) Ġset . ĊĠĠĠ Ġprivate Ġval ĠInt . as Mask Before : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġget Mask Between ( 0 , Ġthis ) ĊĊĠĠĠ Ġ// ĠTrans forms Ġa Ġbit Ġoffset Ġto Ġthe Ġmask Ġwith Ġonly Ġbits Ġafter Ġthe Ġindex Ġ( inclusive ) Ġset . ĊĠĠĠ Ġprivate Ġval ĠInt . as Mask After : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġget Mask Between ( this , ĠMAX _ BIT _ OFFSET ) ĊĊĠĠĠ Ġ// ĠBuilds Ġa Ġmasks Ġwith Ġ 1 Ġbetween Ġfrom Offset Ġand Ġto Offset Ġ( both Ġinclusive ). ĊĠĠĠ Ġprivate Ġfun Ġget Mask Between ( from Offset : ĠInt , Ġto Offset : ĠInt ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġres Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġval Ġmask ToAdd Ġ= Ġfrom Offset . as Mask ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġfrom Offset .. to Offset ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres Ġ= Ġ( res Ġshl Ġ 1 ) Ġor Ġmask ToAdd ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTrans forms Ġa Ġsize Ġin Ġbits Ġto Ġa Ġsize Ġin Ġelements Ġof Ġthe Ġ` bits ` Ġarray . ĊĠĠĠ Ġprivate Ġfun Ġbit To Element Size ( bit Size : ĠInt ): ĠInt Ġ= Ġ( bit Size Ġ+ ĠELEMENT _ SIZE Ġ- Ġ 1 ) Ġ/ ĠELEMENT _ SIZE ĊĊĠĠĠ Ġ// ĠTrans forms Ġa Ġpair Ġof Ġan Ġelement Ġindex Ġand Ġa Ġbit Ġoffset Ġto Ġa Ġbit Ġindex . ĊĠĠĠ Ġprivate Ġfun Ġbit Index ( element Index : ĠInt , Ġbit Offset : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement Index Ġ* ĠELEMENT _ SIZE Ġ+ Ġbit Offset ĊĊĠĠĠ Ġ// ĠSets Ġall Ġbits Ġafter Ġthe Ġlast Ġavailable Ġbit Ġ( size Ġ- Ġ 1 ) Ġto Ġ 0 . ĊĠĠĠ Ġprivate Ġfun Ġclear Unused Tail () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( last Element Index , Ġlast Bit Offset ) Ġ= Ġlast Index . as Bit Coordinates ĊĠĠĠĠĠĠĠ Ġbits [ bits . last Index ] Ġ= Ġbits [ bits . last Index ] Ġand Ġlast Bit Offset . as Mask Before ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġlast Element Index Ġ+ Ġ 1 Ġuntil Ġbits . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbits [ i ] Ġ= ĠALL _ FALSE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠInternal Ġfunction . ĠSets Ġbits Ġspecified Ġby Ġthe Ġelement Ġindex Ġand Ġthe Ġgiven Ġmask Ġto Ġvalue . ĊĠĠĠ Ġprivate Ġfun Ġset Bits With Mask ( element Index : ĠInt , Ġmask : ĠLong , Ġvalue : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġelement Ġ= Ġbits [ element Index ] ĊĠĠĠĠĠĠĠ Ġif Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbits [ element Index ] Ġ= Ġelement Ġor Ġmask ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbits [ element Index ] Ġ= Ġelement Ġand Ġmask . inv () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠInternal Ġfunction . ĠF lips Ġbits Ġspecified Ġby Ġthe Ġelement Ġindex Ġand Ġthe Ġgiven Ġmask . ĊĠĠĠ Ġprivate Ġfun Ġflip Bits With Mask ( element Index : ĠInt , Ġmask : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġelement Ġ= Ġbits [ element Index ] ĊĠĠĠĠĠĠĠ Ġbits [ element Index ] Ġ= Ġelement Ġxor Ġmask ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠChecks Ġif Ġindex Ġis Ġvalid Ġand Ġextends Ġthe Ġ` bits ` Ġarray Ġif Ġthe Ġindex Ġexceeds Ġits Ġsize . ĊĠĠĠĠ Ġ* Ġ@ throws Ġ[ Index OutOfBoundsException ] Ġif Ġ[ index ] Ġ< Ġ 0 . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġensure Capacity ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIndex OutOfBoundsException () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ>= Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= Ġindex Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index . element Index Ġ>= Ġbits . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate Ġa Ġnew Ġarray Ġcontaining Ġthe Ġindex - th Ġbit . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbits Ġ= Ġbits . copyOf ( bit To Element Size ( index Ġ+ Ġ 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġall Ġbits Ġafter Ġthe Ġindex Ġto Ġ 0 . ĠTODO : ĠWe Ġcan Ġremove Ġit . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Unused Tail () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠSet Ġthe Ġbit Ġspecified Ġto Ġthe Ġspecified Ġvalue . Ġ*/ ĊĠĠĠ Ġfun Ġset ( index : ĠInt , Ġvalue : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġensure Capacity ( index ) ĊĠĠĠĠĠĠĠ Ġval Ġ( element Index , Ġoffset ) Ġ= Ġindex . as Bit Coordinates ĊĠĠĠĠĠĠĠ Ġset Bits With Mask ( element Index , Ġoffset . as Mask , Ġvalue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠSets Ġthe Ġbits Ġwith Ġindices Ġbetween Ġ[ from ] Ġ( inclusive ) Ġand Ġ[ to ] Ġ( exclusive ) Ġto Ġthe Ġspecified Ġvalue . Ġ*/ ĊĠĠĠ Ġfun Ġset ( from Ġ: ĠInt , Ġto : ĠInt , Ġvalue : ĠBoolean Ġ= Ġtrue ) Ġ= Ġset ( from Ġuntil Ġto , Ġvalue ) ĊĊĠĠĠ Ġ/** ĠSets Ġthe Ġbits Ġfrom Ġthe Ġrange Ġspecified Ġto Ġthe Ġspecified Ġvalue . Ġ*/ ĊĠĠĠ Ġfun Ġset ( range : ĠInt Range , Ġvalue : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( range . start Ġ< Ġ 0 Ġ|| Ġrange . end Inclusive Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIndex OutOfBoundsException () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( range . start Ġ> Ġrange . end Inclusive ) Ġ{ Ġ// ĠEmpty Ġrange . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġensure Capacity ( range . end Inclusive ) ĊĠĠĠĠĠĠĠ Ġval Ġ( from Index , Ġfrom Offset ) Ġ= Ġrange . start . as Bit Coordinates ĊĠĠĠĠĠĠĠ Ġval Ġ( to Index , Ġto Offset ) Ġ= Ġrange . end Inclusive . as Bit Coordinates ĊĠĠĠĠĠĠĠ Ġif Ġ( to Index Ġ== Ġfrom Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmask Ġ= Ġget Mask Between ( from Offset , Ġto Offset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Bits With Mask ( from Index , Ġmask , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġbits Ġin Ġthe Ġfirst Ġelement . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Bits With Mask ( from Index , Ġfrom Offset . as Mask After , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġall Ġbits Ġof Ġall Ġelements Ġ( ex cluding Ġborder Ġones ) Ġto Ġ 0 Ġor Ġ 1 Ġdepending . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġfrom Index Ġ+ Ġ 1 Ġuntil Ġto Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbits [ index ] Ġ= Ġif Ġ( value ) ĠALL _ TRUE Ġelse ĠALL _ FALSE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġbits Ġin Ġthe Ġlast Ġelement ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Bits With Mask ( to Index , Ġto Offset . as Mask Before , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĠClear s Ġthe Ġbit Ġspecified Ġ*/ ĊĠĠĠ Ġfun Ġclear ( index : ĠInt ) Ġ= Ġset ( index , Ġfalse ) ĊĠĠĠ Ġ/** ĠClear s Ġthe Ġbits Ġwith Ġindices Ġbetween Ġ[ from ] Ġ( inclusive ) Ġand Ġ[ to ] Ġ( exclusive ) Ġto Ġthe Ġspecified Ġvalue . Ġ*/ ĊĠĠĠ Ġfun Ġclear ( from Ġ: ĠInt , Ġto : ĠInt ) Ġ= Ġset ( from , Ġto , Ġfalse ) ĊĠĠĠ Ġ/** ĠClear s Ġthe Ġbit Ġspecified Ġ*/ ĊĠĠĠ Ġfun Ġclear ( range : ĠInt Range ) Ġ= Ġset ( range , Ġfalse ) ĊĊĠĠĠ Ġ/** ĠSets Ġall Ġbits Ġin Ġthe ĠBit Set Ġto Ġ` false `. Ġ*/ ĊĠĠĠ Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġbits . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbits [ i ] Ġ= ĠALL _ FALSE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠRe ver ses Ġthe Ġbit Ġspecified . Ġ*/ ĊĠĠĠ Ġfun Ġflip ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġensure Capacity ( index ) ĊĠĠĠĠĠĠĠ Ġval Ġ( element Index , Ġoffset ) Ġ= Ġindex . as Bit Coordinates ĊĠĠĠĠĠĠĠ Ġflip Bits With Mask ( element Index , Ġoffset . as Mask ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠRe ver ses Ġthe Ġbits Ġwith Ġindices Ġbetween Ġ[ from ] Ġ( inclusive ) Ġand Ġ[ to ] Ġ( exclusive ). Ġ*/ ĊĠĠĠ Ġfun Ġflip ( from : ĠInt , Ġto : ĠInt ) Ġ= Ġflip ( from Ġuntil Ġto ) ĊĊĠĠĠ Ġ/** ĠRe ver ses Ġthe Ġbits Ġfrom Ġthe Ġrange Ġspecified . Ġ*/ ĊĠĠĠ Ġfun Ġflip ( range : ĠInt Range ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( range . start Ġ< Ġ 0 Ġ|| Ġrange . end Inclusive Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIndex OutOfBoundsException () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( range . start Ġ> Ġrange . end Inclusive ) Ġ{ Ġ// ĠEmpty Ġrange . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġensure Capacity ( range . end Inclusive ) ĊĠĠĠĠĠĠĠ Ġval Ġ( from Index , Ġfrom Offset ) Ġ= Ġrange . start . as Bit Coordinates ĊĠĠĠĠĠĠĠ Ġval Ġ( to Index , Ġto Offset ) Ġ= Ġrange . end Inclusive . as Bit Coordinates ĊĠĠĠĠĠĠĠ Ġif Ġ( to Index Ġ== Ġfrom Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmask Ġ= Ġget Mask Between ( from Offset , Ġto Offset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflip Bits With Mask ( from Index , Ġmask ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFlip Ġbits Ġin Ġthe Ġfirst Ġelement . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflip Bits With Mask ( to Index , Ġto Offset . as Mask After ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFlip Ġbits Ġbetween Ġthe Ġfirst Ġand Ġthe Ġlast Ġelements . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġfrom Index Ġ+ Ġ 1 Ġuntil Ġto Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbits [ index ] Ġ= Ġbits [ index ]. inv () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFlip Ġbits Ġin Ġthe Ġlast Ġelement . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflip Bits With Mask ( to Index , Ġto Offset . as Mask Before ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġan Ġindex Ġof Ġa Ġnext Ġset Ġ( if Ġ[ look For ] Ġ== Ġtrue ) Ġor Ġclear ĊĠĠĠĠ Ġ* Ġ( if Ġ[ look For ] Ġ== Ġfalse ) Ġbit Ġafter Ġ[ startIndex ] Ġ( inclusive ). ĊĠĠĠĠ Ġ* ĠReturns Ġ- 1 Ġ( for Ġ[ look For ] Ġ== Ġtrue ) Ġor Ġ[ size ] Ġ( for Ġlook For Ġ== Ġfalse ) ĊĠĠĠĠ Ġ* Ġif Ġthere Ġis Ġno Ġsuch Ġbits Ġbetween Ġ[ startIndex ] Ġand Ġ[ size ] Ġ- Ġ 1 . ĊĠĠĠĠ Ġ* Ġ@ throws ĠIndex OutOf Bound Exception Ġif Ġ[ startIndex ] Ġ< Ġ 0 . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġnext Bit ( startIndex : ĠInt , Ġlook For : ĠBoolean ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( startIndex Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIndex OutOfBoundsException () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( startIndex Ġ>= Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( look For ) Ġ- 1 Ġelse ĠstartIndex ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġ( start Element Index , Ġstart Offset ) Ġ= ĠstartIndex . as Bit Coordinates ĊĠĠĠĠĠĠĠ Ġ// ĠLook Ġfor Ġthe Ġnext Ġset Ġbit Ġin Ġthe Ġfirst Ġelement . ĊĠĠĠĠĠĠĠ Ġvar Ġelement Ġ= Ġbits [ start Element Index ] ĊĠĠĠĠĠĠĠ Ġfor Ġ( offset Ġin Ġstart Offset .. MAX _ BIT _ OFFSET ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbit Ġ= Ġelement Ġand Ġ( 0 x 1 L Ġshl Ġoffset ) Ġ!= Ġ 0 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bit Ġ== Ġlook For ) Ġ{ Ġ Ġ// ĠLook Ġfor Ġnot Ġ 0 Ġif Ġwe Ġneed Ġa Ġset Ġbit Ġand Ġlook Ġfor Ġ 0 Ġotherwise . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbit Index ( start Element Index , Ġoffset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠLook Ġfor Ġin Ġthe Ġremaining Ġelements . ĊĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġstart Element Index Ġ+ Ġ 1 .. bits . last Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement Ġ= Ġbits [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( offset Ġin Ġ 0 .. MAX _ BIT _ OFFSET ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbit Ġ= Ġelement Ġand Ġ( 0 x 1 L Ġshl Ġoffset ) Ġ!= Ġ 0 L ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bit Ġ== Ġlook For ) Ġ{ Ġ// ĠLook Ġfor Ġnot Ġ 0 Ġif Ġwe Ġneed Ġa Ġset Ġbit Ġand Ġlook Ġfor Ġ 0 Ġotherwise . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbit Index ( index , Ġoffset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( look For ) Ġ- 1 Ġelse Ġsize ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġan Ġindex Ġof Ġa Ġnext Ġbit Ġwhich Ġvalue Ġis Ġ` true ` Ġafter Ġ[ startIndex ] Ġ( inclusive ). ĊĠĠĠĠ Ġ* ĠReturns Ġ- 1 Ġif Ġthere Ġis Ġno Ġsuch Ġbits Ġafter Ġ[ startIndex ]. ĊĠĠĠĠ Ġ* Ġ@ throws ĠIndex OutOf Bound Exception Ġif Ġ[ startIndex ] Ġ< Ġ 0 . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnext Set Bit ( startIndex : ĠInt Ġ= Ġ 0 ): ĠInt Ġ= Ġnext Bit ( startIndex , Ġtrue ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġan Ġindex Ġof Ġa Ġnext Ġbit Ġwhich Ġvalue Ġis Ġ` false ` Ġafter Ġ[ startIndex ] Ġ( inclusive ). ĊĠĠĠĠ Ġ* ĠReturns Ġ[ size ] Ġif Ġthere Ġis Ġno Ġsuch Ġbits Ġbetween Ġ[ startIndex ] Ġand Ġ[ size ] Ġ- Ġ 1 Ġassuming Ġthat Ġthe Ġset Ġhas Ġan Ġinfinite ĊĠĠĠĠ Ġ* Ġsequence Ġof Ġ` false ` Ġbits Ġafter Ġ( size Ġ- Ġ 1 )- th . ĊĠĠĠĠ Ġ* Ġ@ throws ĠIndex OutOf Bound Exception Ġif Ġ[ startIndex ] Ġ< Ġ 0 . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnext Clear Bit ( startIndex : ĠInt Ġ= Ġ 0 ): ĠInt Ġ= Ġnext Bit ( startIndex , Ġfalse ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġbiggest Ġindex Ġof Ġa Ġbit Ġwhich Ġvalue Ġis Ġ[ look For ] Ġbefore Ġ[ startIndex ] Ġ( inclusive ). ĊĠĠĠĠ Ġ* ĠReturns Ġ- 1 Ġif Ġthere Ġis Ġno Ġsuch Ġbits Ġbefore Ġ[ startIndex ]. ĊĠĠĠĠ Ġ* ĠIf Ġ[ startIndex ] Ġ>= Ġ[ size ] Ġreturns Ġ- 1 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġprevious Bit ( startIndex : ĠInt , Ġlook For : ĠBoolean ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcorrect StartIndex Ġ= ĠstartIndex ĊĠĠĠĠĠĠĠ Ġif Ġ( startIndex Ġ>= Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġassume Ġthat Ġall Ġbits Ġafter Ġ` size Ġ- Ġ 1 ` Ġare Ġ 0 . ĠSo Ġwe Ġcan Ġreturn Ġthe Ġstart Ġindex Ġif Ġwe Ġare Ġlooking Ġfor Ġ 0 . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! look For ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠstartIndex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġwe Ġare Ġlooking Ġfor Ġ 1 Ġwe Ġcan Ġskip Ġall Ġthese Ġ 0 Ġafter Ġ` size Ġ- Ġ 1 `. ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcorrect StartIndex Ġ= Ġsize Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( correct StartIndex Ġ< Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIndex OutOfBoundsException () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( correct StartIndex Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġ( start Element Index , Ġstart Offset ) Ġ= Ġcorrect StartIndex . as Bit Coordinates ĊĠĠĠĠĠĠĠ Ġ// ĠLook Ġfor Ġthe Ġnext Ġset Ġbit Ġin Ġthe Ġfirst Ġelement . ĊĠĠĠĠĠĠĠ Ġvar Ġelement Ġ= Ġbits [ start Element Index ] ĊĠĠĠĠĠĠĠ Ġfor Ġ( offset Ġin Ġstart Offset Ġdown To Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbit Ġ= Ġelement Ġand Ġ( 0 x 1 L Ġshl Ġoffset ) Ġ!= Ġ 0 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bit Ġ== Ġlook For ) Ġ{ Ġ Ġ// ĠLook Ġfor Ġnot Ġ 0 Ġif Ġwe Ġneed Ġa Ġset Ġbit Ġand Ġlook Ġfor Ġ 0 Ġotherwise . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbit Index ( start Element Index , Ġoffset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠLook Ġfor Ġin Ġthe Ġremaining Ġelements . ĊĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġstart Element Index Ġ- Ġ 1 Ġdown To Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement Ġ= Ġbits [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( offset Ġin ĠMAX _ BIT _ OFFSET Ġdown To Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbit Ġ= Ġelement Ġand Ġ( 0 x 1 L Ġshl Ġoffset ) Ġ!= Ġ 0 L ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bit Ġ== Ġlook For ) Ġ{ Ġ Ġ// ĠLook Ġfor Ġnot Ġ 0 Ġif Ġwe Ġneed Ġa Ġset Ġbit Ġand Ġlook Ġfor Ġ 0 Ġotherwise . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbit Index ( index , Ġoffset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġbiggest Ġindex Ġof Ġa Ġbit Ġwhich Ġvalue Ġis Ġ` true ` Ġbefore Ġ[ startIndex ] Ġ( inclusive ). ĊĠĠĠĠ Ġ* ĠReturns Ġ- 1 Ġif Ġthere Ġis Ġno Ġsuch Ġbits Ġbefore Ġ[ startIndex ] Ġor Ġif Ġ[ startIndex ] Ġ== Ġ- 1 . ĊĠĠĠĠ Ġ* ĠIf Ġ[ startIndex ] Ġ>= Ġsize Ġwill Ġsearch Ġfrom Ġ( size Ġ- Ġ 1 )- th Ġbit . ĊĠĠĠĠ Ġ* Ġ@ throws ĠIndex OutOf Bound Exception Ġif Ġ[ startIndex ] Ġ< Ġ- 1 . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġprevious Set Bit ( startIndex : ĠInt ): ĠInt Ġ= Ġprevious Bit ( startIndex , Ġtrue ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġbiggest Ġindex Ġof Ġa Ġbit Ġwhich Ġvalue Ġis Ġ` false ` Ġbefore Ġ[ startIndex ] Ġ( inclusive ). ĊĠĠĠĠ Ġ* ĠReturns Ġ- 1 Ġif Ġthere Ġis Ġno Ġsuch Ġbits Ġbefore Ġ[ startIndex ] Ġor Ġif Ġ[ startIndex ] Ġ== Ġ- 1 . ĊĠĠĠĠ Ġ* ĠIf Ġ[ startIndex ] Ġ>= Ġsize Ġwill Ġreturn Ġ[ startIndex ] Ġassuming Ġthat Ġthe Ġset Ġhas Ġan Ġinfinite ĊĠĠĠĠ Ġ* Ġsequence Ġof Ġ` false ` Ġbits Ġafter Ġ( size Ġ- Ġ 1 )- th . ĊĠĠĠĠ Ġ* Ġ@ throws ĠIndex OutOf Bound Exception Ġif Ġ[ startIndex ] Ġ< Ġ- 1 . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġprevious Clear Bit ( startIndex : ĠInt ): ĠInt Ġ= Ġprevious Bit ( startIndex , Ġfalse ) ĊĊĠĠĠ Ġ/** ĠReturns Ġa Ġvalue Ġof Ġa Ġbit Ġwith Ġthe Ġ[ index ] Ġspecified . Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġget ( index : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIndex OutOfBoundsException () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ>= Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġ( element Index , Ġoffset ) Ġ= Ġindex . as Bit Coordinates ĊĠĠĠĠĠĠĠ Ġreturn Ġbits [ element Index ] Ġand Ġoffset . as Mask Ġ!= Ġ 0 L ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinline Ġfun Ġdo Operation ( another : ĠBit Set , Ġoperation : ĠLong .( Long ) Ġ-> ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġensure Capacity ( another . last Index ) ĊĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( index Ġ< Ġanother . bits . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbits [ index ] Ġ= Ġoperation ( bits [ index ], Ġanother . bits [ index ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwhile Ġ( index Ġ< Ġbits . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbits [ index ] Ġ= Ġoperation ( bits [ index ], ĠALL _ FALSE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠPerforms Ġa Ġlogical Ġand Ġoperation Ġover Ġcorresponding Ġbits Ġof Ġthis Ġand Ġ[ another ] ĠBit Sets . ĠThe Ġresult Ġis Ġsaved Ġin Ġthis ĠBit Set . Ġ*/ ĊĠĠĠ Ġfun Ġand ( another : ĠBit Set ) Ġ= Ġdo Operation ( another , ĠLong :: and ) ĊĊĠĠĠ Ġ/** ĠPerforms Ġa Ġlogical Ġor Ġoperation Ġover Ġcorresponding Ġbits Ġof Ġthis Ġand Ġ[ another ] ĠBit Sets . ĠThe Ġresult Ġis Ġsaved Ġin Ġthis ĠBit Set . Ġ*/ ĊĠĠĠ Ġfun Ġor ( another : ĠBit Set ) Ġ= Ġdo Operation ( another , ĠLong :: or ) ĊĊĠĠĠ Ġ/** ĠPerforms Ġa Ġlogical Ġxor Ġoperation Ġover Ġcorresponding Ġbits Ġof Ġthis Ġand Ġ[ another ] ĠBit Sets . ĠThe Ġresult Ġis Ġsaved Ġin Ġthis ĠBit Set . Ġ*/ ĊĠĠĠ Ġfun Ġxor ( another : ĠBit Set ) Ġ= Ġdo Operation ( another , ĠLong :: xor ) ĊĊĠĠĠ Ġ/** ĠPerforms Ġa Ġlogical Ġand Ġ+ Ġnot Ġoperations Ġover Ġcorresponding Ġbits Ġof Ġthis Ġand Ġ[ another ] ĠBit Sets . ĠThe Ġresult Ġis Ġsaved Ġin Ġthis ĠBit Set . Ġ*/ ĊĠĠĠ Ġfun Ġand Not ( another : ĠBit Set ) Ġ{ ĊĠĠĠĠĠĠĠ Ġensure Capacity ( another . last Index ) ĊĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( index Ġ< Ġanother . bits . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbits [ index ] Ġ= Ġbits [ index ] Ġand Ġanother . bits [ index ]. inv () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwhile Ġ( index Ġ< Ġbits . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbits [ index ] Ġ= Ġbits [ index ] Ġand ĠALL _ TRUE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠReturns Ġtrue Ġif Ġthe Ġspecified ĠBit Set Ġhas Ġany Ġbits Ġset Ġto Ġtrue Ġthat Ġare Ġalso Ġset Ġto Ġtrue Ġin Ġthis ĠBit Set . Ġ*/ ĊĠĠĠ Ġfun Ġintersect s ( another : ĠBit Set ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġmin Of ( bits . size , Ġanother . bits . size )). any Ġ{ Ġbits [ it ] Ġand Ġanother . bits [ it ] Ġ!= Ġ 0 L Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġvar Ġfirst Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġsb . append ('[ ') ĊĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġnext Set Bit ( 0 ) ĊĠĠĠĠĠĠĠ Ġwhile Ġ( index Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! first ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ('| ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġnext Set Bit ( index Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsb . append (' ]') ĊĠĠĠĠĠĠĠ Ġreturn Ġsb . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġx : ĠLong Ġ= Ġ 1 2 3 4 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. bits . last Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġx Ġxor Ġbits [ i ] Ġ* Ġ( i Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ( x Ġshr Ġ 3 2 Ġxor Ġx ). toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ! is ĠBit Set ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( index Ġ< Ġmin Of ( bits . size , Ġother . bits . size )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bits [ index ] Ġ!= Ġother . bits [ index ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlongest Bits Ġ= Ġif Ġ( bits . size Ġ> Ġother . bits . size ) Ġbits Ġelse Ġother . bits ĊĠĠĠĠĠĠĠ Ġwhile Ġ( index Ġ< Ġlongest Bits . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( longest Bits [ index ] Ġ!= ĠALL _ FALSE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ