bitio

package
v0.0.4-rc1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 21, 2022 License: MIT Imports: 6 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrNegativeNBits = errors.New("negative number of bits")
View Source
var ErrOffset = errors.New("invalid seek offset")

Functions

func BitStringFromBytes

func BitStringFromBytes(buf []byte, nBits int) string

BitStringFromBytes string from []byte], ex: ([]byte{0x50}, 4) -> "0101"

func BitsByteCount

func BitsByteCount(nBits int64) int64

BitsByteCount returns smallest amount of bytes to fit nBits bits

func BytesFromBitString

func BytesFromBitString(s string) ([]byte, int)

BytesFromBitString []byte from bit string, ex: "0101" -> ([]byte{0x50}, 4)

func Copy

func Copy(dst BitWriter, src BitReader) (n int64, err error)

func CopyBuffer

func CopyBuffer(dst BitWriter, src BitReader, buf []byte) (n int64, err error)

func EndPos

func EndPos(rs BitSeeker) (int64, error)

TODO: move?

func Read64

func Read64(buf []byte, firstBit int, nBits int) uint64

Read64 read nBits bits large unsigned integer from buf starting from firstBit. Integer is read most significant bit first.

func ReadAtFull

func ReadAtFull(r BitReaderAt, p []byte, nBits int, bitOff int64) (int, error)

func ReadFull

func ReadFull(r BitReader, p []byte, nBits int) (int, error)

func ReverseBytes

func ReverseBytes(bs []byte) []byte

func Uint64ReverseBytes

func Uint64ReverseBytes(nBits int, n uint64) uint64

func Write64

func Write64(v uint64, nBits int, buf []byte, firstBit int)

Types

type BitReadAtSeeker

type BitReadAtSeeker interface {
	BitReaderAt
	BitSeeker
}

type BitReadSeeker

type BitReadSeeker interface {
	BitReader
	BitSeeker
}

type BitReader

type BitReader interface {
	ReadBits(p []byte, nBits int) (n int, err error)
}

type BitReaderAt

type BitReaderAt interface {
	ReadBitsAt(p []byte, nBits int, bitOff int64) (n int, err error)
}

type BitSeeker

type BitSeeker interface {
	SeekBits(bitOffset int64, whence int) (int64, error)
}

type BitWriter

type BitWriter interface {
	WriteBits(p []byte, nBits int) (n int, err error)
}

type Buffer

type Buffer struct {
	// contains filtered or unexported fields
}

Buffer is a bit buffer

func NewBufferFromBitReadSeeker

func NewBufferFromBitReadSeeker(br br) (*Buffer, error)

func NewBufferFromBitString

func NewBufferFromBitString(s string) *Buffer

NewBufferFromBitString new Buffer from bit string, ex: "0101"

func NewBufferFromBytes

func NewBufferFromBytes(buf []byte, nBits int64) *Buffer

NewBufferFromBytes new Buffer from bytes if nBits is < 0 nBits is all bits in buf

func NewBufferFromReadSeeker

func NewBufferFromReadSeeker(rs io.ReadSeeker) (*Buffer, error)

NewBufferFromReadSeeker new Buffer from io.ReadSeeker, start at firstBit with bit length lenBits buf is not copied.

func (*Buffer) AlignBits

func (b *Buffer) AlignBits(nBits int) (int, error)

AlignBits number of bits to next nBits align

func (*Buffer) BitBufLen

func (b *Buffer) BitBufLen(nBits int64) (*Buffer, error)

BitBufLen reads nBits

func (*Buffer) BitBufRange

func (b *Buffer) BitBufRange(firstBitOffset int64, nBits int64) (*Buffer, error)

BitBufRange reads nBits bits starting from start Does not update current position. if nBits is < 0 nBits is all bits after firstBitOffset

func (*Buffer) BitString

func (b *Buffer) BitString() (string, error)

BitString return bit string representation

func (*Buffer) BitsLeft

func (b *Buffer) BitsLeft() (int64, error)

BitsLeft number of bits left until end

func (*Buffer) ByteAlignBits

func (b *Buffer) ByteAlignBits() (int, error)

ByteAlignBits number of bits to next byte align

func (*Buffer) BytePos

func (b *Buffer) BytePos() (int64, error)

BytePos byte position of current bit position

func (*Buffer) Bytes

func (b *Buffer) Bytes() ([]byte, error)

Bytes all bytes

func (*Buffer) BytesLen

func (b *Buffer) BytesLen(nBytes int) ([]byte, error)

BytesLen reads nBytes bytes

func (*Buffer) BytesRange

func (b *Buffer) BytesRange(bitOffset int64, nBytes int) ([]byte, error)

BytesRange reads nBytes bytes starting bit position start Does not update current position. TODO: swap args TODO: nBytes -1?

func (*Buffer) Clone

func (b *Buffer) Clone() *Buffer

Clone buffer and reset position to zero

func (*Buffer) End

func (b *Buffer) End() (bool, error)

End is true if current position is at the end

func (*Buffer) Len

func (b *Buffer) Len() int64

func (*Buffer) PeekBytes

func (b *Buffer) PeekBytes(nBytes int) ([]byte, error)

PeekBytes peek nBytes bytes from buffer

func (*Buffer) Pos

func (b *Buffer) Pos() (int64, error)

func (*Buffer) ReadByte

func (b *Buffer) ReadByte() (byte, error)

required by some decompressors (like deflate) to not do own buffering

func (*Buffer) SeekAbs

func (b *Buffer) SeekAbs(pos int64) (int64, error)

SeekAbs seeks to absolute position

func (*Buffer) SeekRel

func (b *Buffer) SeekRel(delta int64) (int64, error)

SeekRel seeks relative to current bit position TODO: better name?

func (*Buffer) String

func (b *Buffer) String() string

type MultiBitReader

type MultiBitReader struct {
	// contains filtered or unexported fields
}

TODO: smart, track index?

func NewMultiBitReader

func NewMultiBitReader(rs []BitReadAtSeeker) (*MultiBitReader, error)

func (*MultiBitReader) Read

func (m *MultiBitReader) Read(p []byte) (n int, err error)

func (*MultiBitReader) ReadBits

func (m *MultiBitReader) ReadBits(p []byte, nBits int) (n int, err error)

func (*MultiBitReader) ReadBitsAt

func (m *MultiBitReader) ReadBitsAt(p []byte, nBits int, bitOff int64) (n int, err error)

func (*MultiBitReader) Seek

func (m *MultiBitReader) Seek(offset int64, whence int) (int64, error)

func (*MultiBitReader) SeekBits

func (m *MultiBitReader) SeekBits(bitOff int64, whence int) (int64, error)

type Reader

type Reader struct {
	// contains filtered or unexported fields
}

Reader is a BitReadSeeker and BitReaderAt reading from a io.ReadSeeker

func NewReaderFromReadSeeker

func NewReaderFromReadSeeker(rs io.ReadSeeker) *Reader

func (*Reader) Read

func (r *Reader) Read(p []byte) (n int, err error)

func (*Reader) ReadBits

func (r *Reader) ReadBits(p []byte, nBits int) (n int, err error)

func (*Reader) ReadBitsAt

func (r *Reader) ReadBitsAt(p []byte, nBits int, bitOffset int64) (int, error)

func (*Reader) Seek

func (r *Reader) Seek(offset int64, whence int) (int64, error)

func (*Reader) SeekBits

func (r *Reader) SeekBits(bitOff int64, whence int) (int64, error)

type SectionBitReader

type SectionBitReader struct {
	// contains filtered or unexported fields
}

SectionBitReader is a BitReadSeeker reading from a BitReaderAt modelled after io.SectionReader

func NewSectionBitReader

func NewSectionBitReader(r BitReaderAt, bitOff int64, nBits int64) *SectionBitReader

func (*SectionBitReader) Read

func (r *SectionBitReader) Read(p []byte) (n int, err error)

func (*SectionBitReader) ReadBits

func (r *SectionBitReader) ReadBits(p []byte, nBits int) (n int, err error)

func (*SectionBitReader) ReadBitsAt

func (r *SectionBitReader) ReadBitsAt(p []byte, nBits int, bitOff int64) (int, error)

func (*SectionBitReader) Seek

func (r *SectionBitReader) Seek(offset int64, whence int) (int64, error)

func (*SectionBitReader) SeekBits

func (r *SectionBitReader) SeekBits(bitOff int64, whence int) (int64, error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL