Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ( // ErrOutOfRange - the index passed is out of range for the BitVector ErrOutOfRange = errors.New("index out of range") )
Functions ¶
This section is empty.
Types ¶
type BitNumbering ¶
type BitNumbering int
BitNumbering indicates the ordering of bits, either least-significant bit in position 0, or most-significant bit in position 0.
It it used in 3 ways with BitVector: 1. Ordering of bits within the Buf []byte structure 2. What order to add bits when using Extend() 3. What order to read bits when using Take()
https://en.wikipedia.org/wiki/Bit_numbering
const ( // LSB0 - bit ordering starts with the low-order bit LSB0 BitNumbering = iota // MSB0 - bit ordering starts with the high-order bit MSB0 )
type BitVector ¶
type BitVector struct { Buf []byte // BytePacking is the bit ordering within bytes BytePacking BitNumbering // Len is the logical number of bits in the vector. // The last byte in Buf may have undefined bits if Len is not a multiple of 8 Len uint }
BitVector is used to manipulate ordered collections of bits
func NewBitVector ¶
func NewBitVector(buf []byte, bytePacking BitNumbering) *BitVector
NewBitVector constructs a new BitVector from a slice of bytes.
The bytePacking parameter is required to know how to interpret the bit ordering within the bytes.
func (*BitVector) Extend ¶
func (v *BitVector) Extend(val byte, count uint, order BitNumbering)
Extend adds up to 8 bits to the receiver
Given a byte b == 0b11010101 v.Extend(b, 4, LSB0) would add < 1, 0, 1, 0 > v.Extend(b, 4, MSB0) would add < 1, 1, 0, 1 >
Panics if count is out of range
func (*BitVector) Iterator ¶
func (v *BitVector) Iterator(order BitNumbering) func(uint) byte
Iterator returns a function, which when invoked, returns the number of bits requested, and increments an internal cursor.
When the end of the BitVector is reached, it returns zeroes indefinitely ¶
Panics if count is out of range
func (*BitVector) Push ¶
Push adds a single bit to the BitVector.
Although it takes a byte, only the low-order bit is used, so just use 0 or 1.
func (*BitVector) Take ¶
func (v *BitVector) Take(index uint, count uint, order BitNumbering) (out byte)
Take reads up to 8 bits at the given index.
Given a BitVector < 1, 1, 0, 1, 0, 1, 0, 1 > v.Take(0, 4, LSB0) would return 0b00001011 v.Take(0, 4, MSB0) would return 0b11010000
Panics if count is out of range