package bits // Reader is a bit stream reader type Reader struct { Data []byte Offset int } // Skip skips n bits func (r *Reader) Skip(n int) { r.Offset += n } // ReadBit reads a single bit func (r *Reader) ReadBit() (uint, error) { if r.Offset/8 >= len(r.Data) { return 0, nil } b := r.Data[r.Offset/8] v := (b >> (7 - (r.Offset % 8))) & 0x01 r.Offset++ return uint(v), nil } // ReadExpGolomb reads an Exp-Golomb code func (r *Reader) ReadExpGolomb() (uint, error) { leadingZeroBits := 0 for { b, err := r.ReadBit() if err != nil { return 0, err } if b == 1 { break } leadingZeroBits++ } result := uint(1<> 1) + (val & 0x01)) * uint(sign) return int(val), nil }