28 lines
491 B
Go
28 lines
491 B
Go
|
package helpers
|
||
|
|
||
|
import "bytes"
|
||
|
|
||
|
type BitSet struct {
|
||
|
entries []byte
|
||
|
}
|
||
|
|
||
|
func NewBitSet(bitCount uint) BitSet {
|
||
|
return BitSet{make([]byte, (bitCount+7)/8)}
|
||
|
}
|
||
|
|
||
|
func (bs BitSet) HasBit(bit uint) bool {
|
||
|
return (bs.entries[bit/8] & (1 << (bit & 7))) != 0
|
||
|
}
|
||
|
|
||
|
func (bs BitSet) SetBit(bit uint) {
|
||
|
bs.entries[bit/8] |= 1 << (bit & 7)
|
||
|
}
|
||
|
|
||
|
func (bs BitSet) Equals(other BitSet) bool {
|
||
|
return bytes.Equal(bs.entries, other.entries)
|
||
|
}
|
||
|
|
||
|
func (bs BitSet) String() string {
|
||
|
return string(bs.entries)
|
||
|
}
|