@@ -4,40 +4,31 @@ package bit
44// Field is a variable-length bit-field
55type Field []byte
66
7- // IsSet checks if bit n is set
8- func (bf * Field ) IsSet ( n int ) bool {
9- bit , off := n >> 3 , byte (1 << uint (n & 7 ))
10- if len (* bf ) <= bit {
11- return false
7+ // Set bit
8+ func (f * Field ) Set ( k int ) {
9+ n , m := k >> 3 , byte (1 << uint (k & 7 ))
10+ if len (* f ) <= n {
11+ * f = append ( * f , make ([] byte , n - len ( * f ) + 1 ) ... )
1212 }
13- return ( * bf )[ bit ] & off != 0
13+ ( * f )[ n ] |= m
1414}
1515
16- // Set bit n
17- func (bf * Field ) Set (n int ) * Field {
18- bit , off := n >> 3 , byte (1 << uint (n & 7 ))
19- if len (* bf ) <= bit {
20- * bf = append (* bf , make ([]byte , bit - len (* bf )+ 1 )... )
21- }
22- (* bf )[bit ] |= off
23- return bf
16+ // IsSet checks if bit is set
17+ func (f * Field ) IsSet (k int ) bool {
18+ n , m := k >> 3 , byte (1 << uint (k & 7 ))
19+ return len (* f ) > n && (* f )[n ]& m != 0
2420}
2521
26- // IsClear checks if bit n is cleared
27- func (bf * Field ) IsClear ( n int ) bool {
28- bit , off := n >> 3 , byte (1 << uint (n & 7 ))
29- if len (* bf ) <= bit {
30- return true
22+ // Clear bit
23+ func (f * Field ) Clear ( k int ) {
24+ n , m := k >> 3 , byte (1 << uint (k & 7 ))
25+ if len (* f ) > n {
26+ ( * f )[ n ] &^= m
3127 }
32- return (* bf )[bit ]& off == 0
3328}
3429
35- // Clear bit n
36- func (bf * Field ) Clear (n int ) * Field {
37- bit , off := n >> 3 , byte (1 << uint (n & 7 ))
38- if len (* bf ) <= bit {
39- return bf
40- }
41- (* bf )[bit ] &^= off
42- return bf
30+ // IsClear checks if bit is cleared
31+ func (f * Field ) IsClear (k int ) bool {
32+ n , m := k >> 3 , byte (1 << uint (k & 7 ))
33+ return len (* f ) <= n || (* f )[n ]& m == 0
4334}
0 commit comments