package Ġpw . bin om Ċ Ċ import Ġkotlin . jvm . Jvm Inline Ċ Ċ /** Ċ Ġ* ĠImplements Ġbit set Ġbased Ġon Ġ[ Long ]. ĠIndex Ġ 0 Ġis Ġthe Ġmost Ġleft Ġbit . ĠFor Ġexample : Ġindex Ġ 3 0 Ġin Ġvalue Ġ 0 b 0 1 0 Ġis Ġ 1 , Ġindex Ġ 3 1 Ġand Ġ 2 9 Ġis Ġ 0 Ċ Ġ* Ċ Ġ* ĠExample : Ċ Ġ* Ġ``` Ċ Ġ* Ġvar Ġdata Ġ= ĠBit set 6 4 () Ċ Ġ* ĠassertFalse ( data [ 0 ]) Ċ Ġ* ĠassertFalse ( data [ 1 ]) Ċ Ġ* Ġdata Ġ= Ġdata . set ( 0 , true ) Ċ Ġ* ĠassertTrue ( data [ 0 ]) Ċ Ġ* ĠassertFalse ( data [ 1 ]) Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ @ Jvm Inline Ċ value Ġclass ĠBit Array 6 4 ( val Ġvalue : ĠLong Ġ= Ġ 0 ) Ġ: ĠBit Array Ġ{ ĊĠĠĠ Ġoverride Ġval Ġsize : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠMAX _ BITS ĊĊĠĠĠ Ġoverride Ġfun Ġful led ( value : ĠBoolean , ĠstartIndex : ĠInt , Ġend Index : ĠInt ): ĠBit Array 6 4 Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( startIndex Ġ== Ġ 0 Ġ&& Ġend Index Ġ>= ĠLong . SIZE _ BITS Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnumber Value Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġ 0 xFFFFFFFF FFFFFFFF u L . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġ 0 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBit Array 6 4 ( number Value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . ful led ( value , ĠstartIndex , Ġend Index ) Ġas ĠBit Array 6 4 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġoperator Ġfun Ġget ( index : ĠInt ): ĠBoolean Ġ= Ġvalue [ index ] Ġ// Ġvalue Ġand Ġ( 1 L Ġshl Ġ( MAX _ BITS _ 1 Ġ- Ġindex )) Ġ!= Ġ 0 L ĊĠĠĠ Ġoverride Ġfun ĠisEmpty (): ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġupdate ( index : ĠInt , Ġvalue : ĠBoolean ) Ġ= ĊĠĠĠĠĠĠĠ ĠBit Array 6 4 ( this . value . update ( index Ġ= Ġindex , Ġvalue Ġ= Ġvalue )) ĊĊĠĠĠ Ġoverride Ġfun Ġinverted (): ĠBit Array 6 4 Ġ= ĠBit Array 6 4 ( value . inv ()) ĊĊĠĠĠ Ġfun Ġto Long () Ġ= Ġvalue ĊĠĠĠ Ġfun Ġto UL ong () Ġ= Ġto Long (). to UL ong () ĊĠĠĠ Ġoverride Ġfun Ġget Byte 4 ( index : ĠInt ) Ġ= Ġ(( value Ġ ush r Ġ( MAX _ BITS Ġ- Ġ 4 Ġ- Ġindex )) Ġand Ġ 0 xF ). to Byte () ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Byte 4 ( index : ĠInt , Ġvalue : ĠByte ): ĠBit Array 6 4 Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( value Ġ<= Ġ 0 xF ) ĊĠĠĠĠĠĠĠ Ġval Ġleft Part Ġ= Ġ( this . value Ġ ush r Ġ( MAX _ BITS _ 1 Ġ- Ġindex )) Ġshl Ġ( MAX _ BITS _ 1 Ġ- Ġindex ) ĊĠĠĠĠĠĠĠ Ġval Ġright Part Ġ= Ġ( this . value Ġshl Ġ( index Ġ+ Ġ 4 )) Ġ ush r Ġ( index Ġ+ Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġval Ġvalue Int Ġ= Ġ( value . to Long () Ġand Ġ 0 xF ) Ġshl Ġ( MAX _ BITS Ġ- Ġ 4 Ġ- Ġindex ) ĊĠĠĠĠĠĠĠ Ġreturn ĠBit Array 6 4 ( left Part Ġor Ġvalue Int Ġor Ġright Part ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Byte 8 ( index : ĠInt ): ĠByte Ġ= ĊĠĠĠĠĠĠĠ Ġ(( value Ġ ush r Ġ( size Ġ- Ġ 8 Ġ- Ġindex )) Ġand Ġ 0 xFF ). to Byte () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġvalue Ġas Ġunsigned Ġint Ġin Ġradix Ġ 2 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġvalue . to Bit setString () ĊĠĠĠ Ġoverride Ġfun Ġcopy () Ġ= ĠBit Array 6 4 ( value ) Ċ } Ċ Ċ fun ĠLong . to Bit set () Ġ= ĠBit Array 6 4 ( this ) Ċ Ċ /** Ċ Ġ* ĠReturns Ġint Ġas Ġbit Ġset Ġstring . ĠExample : Ċ Ġ* Ġvalue Ġ= Ġ 0 b 0 0 1 1 0 1 0 0 , Ġresult = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 Ċ Ġ*/ Ċ // Ġprivate Ġfun ĠLong . to Bit setString (): ĠString Ġ{ Ċ // ĠĠĠ Ġval Ġleft Part Ġ= Ġto UL ong (). toString ( 2 ) Ċ // ĠĠĠ Ġvar Ġlen Ġ= ĠMAX _ BITS Ġ- Ġleft Part . length Ċ // ĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () Ċ // ĠĠĠ Ġwhile Ġ( len Ġ> Ġ 0 ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġlen -- Ċ // ĠĠĠĠĠĠĠ Ġsb . append (" 0 ") Ċ // ĠĠĠ Ġ} Ċ // ĠĠĠ Ġsb . append ( left Part ) Ċ // ĠĠĠ Ġreturn Ġsb . toString () Ċ // Ġ} Ċ Ċ private Ġconst Ġval ĠMAX _ BITS Ġ= ĠLong . SIZE _ BITS Ċ private Ġconst Ġval ĠMAX _ BITS _ 1 Ġ= ĠMAX _ BITS Ġ- Ġ 1 Ċ