gossip: move BitVec to bitvec.go
This commit is contained in:
parent
5c2c172dcc
commit
ef899f77f0
|
@ -0,0 +1,64 @@
|
|||
package gossip
|
||||
|
||||
func MakeBitVecU8(bits []byte, len int) BitVecU8 {
|
||||
if len <= 0 {
|
||||
return BitVecU8{
|
||||
Bits: BitVecU8Inner{Value: nil},
|
||||
Len: 0,
|
||||
}
|
||||
}
|
||||
return BitVecU8{
|
||||
Bits: BitVecU8Inner{Value: &bits},
|
||||
Len: uint64(len),
|
||||
}
|
||||
}
|
||||
|
||||
func (bv *BitVecU8) Get(pos uint64) bool {
|
||||
if pos >= bv.Len {
|
||||
panic("get bit out of bounds")
|
||||
}
|
||||
return (*bv.Bits.Value)[pos/8]&(1<<(pos%8)) != 0
|
||||
}
|
||||
|
||||
func (bv *BitVecU8) Set(pos uint64, b bool) {
|
||||
if pos >= bv.Len {
|
||||
panic("get bit out of bounds")
|
||||
}
|
||||
if b {
|
||||
(*bv.Bits.Value)[pos/8] |= 1 << (pos % 8)
|
||||
} else {
|
||||
(*bv.Bits.Value)[pos/8] &= ^uint8(1 << (pos % 8))
|
||||
}
|
||||
}
|
||||
|
||||
func MakeBitVecU64(bits []uint64, len int) BitVecU64 {
|
||||
if len <= 0 {
|
||||
return BitVecU64{
|
||||
Bits: BitVecU64Inner{Value: nil},
|
||||
Len: 0,
|
||||
}
|
||||
}
|
||||
return BitVecU64{
|
||||
Bits: BitVecU64Inner{Value: &bits},
|
||||
Len: uint64(len),
|
||||
}
|
||||
}
|
||||
|
||||
func (bv *BitVecU64) Get(pos uint64) bool {
|
||||
if pos >= bv.Len {
|
||||
panic("get bit out of bounds")
|
||||
}
|
||||
return (*bv.Bits.Value)[pos/64]&(1<<(pos%64)) != 0
|
||||
}
|
||||
|
||||
func (bv *BitVecU64) Set(pos uint64, b bool) {
|
||||
if pos >= bv.Len {
|
||||
panic("get bit out of bounds")
|
||||
}
|
||||
bits := *bv.Bits.Value
|
||||
if b {
|
||||
bits[pos/64] |= 1 << (pos % 64)
|
||||
} else {
|
||||
bits[pos/64] &= ^uint64(1 << (pos % 64))
|
||||
}
|
||||
}
|
|
@ -93,40 +93,3 @@ func FNV1a(slice []byte, hash uint64) uint64 {
|
|||
}
|
||||
return hash
|
||||
}
|
||||
|
||||
func (bv *BitVecU8) Get(pos uint64) bool {
|
||||
if pos >= bv.Len {
|
||||
panic("get bit out of bounds")
|
||||
}
|
||||
return (*bv.Bits.Value)[pos/8]&(1<<(pos%8)) != 0
|
||||
}
|
||||
|
||||
func (bv *BitVecU8) Set(pos uint64, b bool) {
|
||||
if pos >= bv.Len {
|
||||
panic("get bit out of bounds")
|
||||
}
|
||||
if b {
|
||||
(*bv.Bits.Value)[pos/8] |= 1 << (pos % 8)
|
||||
} else {
|
||||
(*bv.Bits.Value)[pos/8] &= ^uint8(1 << (pos % 8))
|
||||
}
|
||||
}
|
||||
|
||||
func (bv *BitVecU64) Get(pos uint64) bool {
|
||||
if pos >= bv.Len {
|
||||
panic("get bit out of bounds")
|
||||
}
|
||||
return (*bv.Bits.Value)[pos/64]&(1<<(pos%64)) != 0
|
||||
}
|
||||
|
||||
func (bv *BitVecU64) Set(pos uint64, b bool) {
|
||||
if pos >= bv.Len {
|
||||
panic("get bit out of bounds")
|
||||
}
|
||||
bits := *bv.Bits.Value
|
||||
if b {
|
||||
bits[pos/64] |= 1 << (pos % 64)
|
||||
} else {
|
||||
bits[pos/64] &= ^uint64(1 << (pos % 64))
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue