bitio

package
v0.11.0 Latest Latest
Warning

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

Go to latest
Published: Apr 14, 2024 License: MIT Imports: 6 Imported by: 0

Documentation

Overview

Package bitio tries to mimic the standard library packages io and bytes but for bits.

- bitio.Buffer same as bytes.Buffer

- bitio.IOBitReadSeeker is a bitio.ReaderAtSeeker that reads from a io.ReadSeeker

- bitio.IOBitWriter a bitio.BitWriter that writes to a io.Writer, use Flush() to write possible zero padded unaligned byte

- bitio.IOReader is a io.Reader that reads bytes from a bitio.Reader, will zero pad unaligned byte at EOF

- bitio.IOReadSeeker is a io.ReadSeeker that reads from a bitio.ReadSeeker, will zero pad unaligned byte at EOF

- bitio.NewBitReader same as bytes.NewReader

- bitio.LimitReader same as io.LimitReader

- bitio.MultiReader same as io.MultiReader

- bitio.SectionReader same as io.SectionReader

- bitio.Copy* same as io.Copy*

- bitio.ReadFull same as io.ReadFull

TODO:

- bitio.IOBitReader bitio.Reader that reads from a io.Reader

- bitio.IOBitWriteSeeker bitio.BitWriteSeeker that writes to a io.WriteSeeker

- bitio.CopyN

- Speed up read by using a cache somehow ([]byte or just a uint64?)

Index

Constants

This section is empty.

Variables

View Source
var ErrNegativeNBits = errors.New("negative number of bits")

ErrNegativeNBits means read tried to read negative number of bits

View Source
var ErrOffset = errors.New("invalid seek offset")

ErrOffset means seek positions is invalid

Functions

func BitStringFromBytes

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

BitStringFromBytes from string to []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, int64)

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

func Copy

func Copy(dst Writer, src Reader) (n int64, err error)

Copy bits from src to dst. Similar to io.Copy.

func CopyBuffer

func CopyBuffer(dst Writer, src Reader, buf []byte) (n int64, err error)

CopyBuffer bits from src to dst using provided byte buffer. Similar to io.CopyBuffer.

func Read64

func Read64(buf []byte, firstBit int64, nBits int64) 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 ReaderAt, p []byte, nBits int64, bitOff int64) (int64, error)

ReadAtFull expects to read nBits from r at bitOff. Similar to io.ReadFull.

func ReadFull

func ReadFull(r Reader, p []byte, nBits int64) (int64, error)

ReadFull expects to read nBits from r. Similar to io.ReadFull.

func ReverseBytes64 added in v0.0.5

func ReverseBytes64(nBits int, n uint64) uint64

ReverseBytes64 reverses the bytes part of the lowest nBits. Similar to bits.ReverseBytes64 but only rotates the lowest bytes and rest of bytes will be zero.

func Write64

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

Write64 writes nBits bits large unsigned integer to buf starting from firstBit. Integer is written most significant bit first.

Types

type Buffer

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

Buffer is a bitio.Reader and bitio.Writer providing a bit buffer. Similar to bytes.Buffer.

func (*Buffer) Bits added in v0.0.5

func (b *Buffer) Bits() ([]byte, int64)

Bits return unread bits in buffer

func (*Buffer) Len

func (b *Buffer) Len() int64

func (*Buffer) ReadBits added in v0.0.5

func (b *Buffer) ReadBits(p []byte, nBits int64) (n int64, err error)

func (*Buffer) Reset added in v0.0.5

func (b *Buffer) Reset()

func (*Buffer) WriteBits added in v0.0.5

func (b *Buffer) WriteBits(p []byte, nBits int64) (n int64, err error)

type IOBitReadSeeker added in v0.0.5

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

IOBitReadSeeker is a bitio.ReadAtSeeker reading from a io.ReadSeeker.

func NewIOBitReadSeeker added in v0.0.5

func NewIOBitReadSeeker(rs io.ReadSeeker) *IOBitReadSeeker

NewIOBitReadSeeker returns a new bitio.IOBitReadSeeker

func (*IOBitReadSeeker) CloneReadAtSeeker added in v0.0.8

func (r *IOBitReadSeeker) CloneReadAtSeeker() (ReadAtSeeker, error)

func (*IOBitReadSeeker) CloneReadSeeker added in v0.0.8

func (r *IOBitReadSeeker) CloneReadSeeker() (ReadSeeker, error)

func (*IOBitReadSeeker) CloneReader added in v0.0.8

func (r *IOBitReadSeeker) CloneReader() (Reader, error)

func (*IOBitReadSeeker) CloneReaderAtSeeker added in v0.0.8

func (r *IOBitReadSeeker) CloneReaderAtSeeker() (ReaderAtSeeker, error)

func (*IOBitReadSeeker) ReadBits added in v0.0.5

func (r *IOBitReadSeeker) ReadBits(p []byte, nBits int64) (n int64, err error)

func (*IOBitReadSeeker) ReadBitsAt added in v0.0.5

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

func (*IOBitReadSeeker) SeekBits added in v0.0.5

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

func (*IOBitReadSeeker) Unwrap added in v0.6.0

func (r *IOBitReadSeeker) Unwrap() any

type IOBitWriter added in v0.0.5

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

IOBitWriter is a bitio.Writer that writes to a io.Writer. Use Flush to write possible unaligned byte zero bit padded.

func NewIOBitWriter added in v0.0.5

func NewIOBitWriter(w io.Writer) *IOBitWriter

NewIOBitWriter returns a new bitio.IOBitWriter.

func (*IOBitWriter) Flush added in v0.0.5

func (w *IOBitWriter) Flush() error

Flush write possible unaligned byte zero bit padded.

func (*IOBitWriter) Unwrap added in v0.6.0

func (w *IOBitWriter) Unwrap() any

func (*IOBitWriter) WriteBits added in v0.0.5

func (w *IOBitWriter) WriteBits(p []byte, nBits int64) (n int64, err error)

type IOReadSeeker added in v0.0.5

type IOReadSeeker struct {
	IOReader
	// contains filtered or unexported fields
}

IOReadSeeker is a io.ReadSeeker that reads from a bitio.ReadSeeker. Unaligned byte at EOF will be zero bit padded.

func NewIOReadSeeker added in v0.0.5

func NewIOReadSeeker(rs ReadSeeker) *IOReadSeeker

NewIOReadSeeker return a new bitio.IOReadSeeker.

func (*IOReadSeeker) Read added in v0.0.5

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

func (*IOReadSeeker) Seek added in v0.0.5

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

func (*IOReadSeeker) Unwrap added in v0.6.0

func (r *IOReadSeeker) Unwrap() any

type IOReader added in v0.0.5

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

IOReader is a io.Reader and io.ByteReader that reads from a bitio.Reader. Unaligned byte at EOF will be zero bit padded.

func NewIOReader added in v0.0.5

func NewIOReader(r Reader) *IOReader

NewIOReader returns a new bitio.IOReader.

func (*IOReader) Read added in v0.0.5

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

func (*IOReader) ReadByte added in v0.0.5

func (r *IOReader) ReadByte() (byte, error)

required to make some readers like deflate not do their own buffering

func (*IOReader) Unwrap added in v0.6.0

func (r *IOReader) Unwrap() any

type LimitReader added in v0.0.5

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

LimitReader is a bitio.Reader that reads a limited amount of bits from a bitio.Reader. Similar to bytes.LimitedReader.

func NewLimitReader added in v0.0.5

func NewLimitReader(r Reader, n int64) *LimitReader

NewLimitReader returns a new bitio.LimitReader.

func (*LimitReader) CloneReader added in v0.0.8

func (l *LimitReader) CloneReader() (Reader, error)

func (*LimitReader) ReadBits added in v0.0.5

func (l *LimitReader) ReadBits(p []byte, nBits int64) (n int64, err error)

func (*LimitReader) Unwrap added in v0.6.0

func (r *LimitReader) Unwrap() any

type MultiReader added in v0.0.5

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

MultiReader is a bitio.ReaderAtSeeker concatinating multiple bitio.ReadAtSeeker:s. Similar to io.MultiReader.

func NewMultiReader added in v0.0.5

func NewMultiReader(rs ...ReadAtSeeker) (*MultiReader, error)

NewMultiReader returns a new bitio.MultiReader.

func (*MultiReader) CloneReadAtSeeker added in v0.0.8

func (m *MultiReader) CloneReadAtSeeker() (ReadAtSeeker, error)

func (*MultiReader) CloneReadSeeker added in v0.0.8

func (m *MultiReader) CloneReadSeeker() (ReadSeeker, error)

func (*MultiReader) CloneReader added in v0.0.8

func (m *MultiReader) CloneReader() (Reader, error)

func (*MultiReader) CloneReaderAtSeeker added in v0.0.8

func (m *MultiReader) CloneReaderAtSeeker() (ReaderAtSeeker, error)

func (*MultiReader) ReadBits added in v0.0.5

func (m *MultiReader) ReadBits(p []byte, nBits int64) (n int64, err error)

func (*MultiReader) ReadBitsAt added in v0.0.5

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

func (*MultiReader) SeekBits added in v0.0.5

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

type ReadAtSeeker added in v0.0.5

type ReadAtSeeker interface {
	ReaderAt
	Seeker
}

ReadAtSeeker is bitio.ReaderAt and bitio.Seeker.

func CloneReadAtSeeker added in v0.0.8

func CloneReadAtSeeker(r ReadAtSeeker) (ReadAtSeeker, error)

CloneReadAtSeeker clones a bitio.ReadAtSeeker if possible, resetting read position to start

type ReadAtSeekerCloner added in v0.0.8

type ReadAtSeekerCloner interface {
	CloneReadAtSeeker() (ReadAtSeeker, error)
}

ReadAtSeekerCloner is a cloneable bitio.ReadAtSeeker, resetting read position to start

type ReadCloner added in v0.0.8

type ReadCloner interface {
	CloneReader() (Reader, error)
}

ReadCloner is a cloneable bitio.Reader, resetting read position to start

type ReadSeeker added in v0.0.5

type ReadSeeker interface {
	Reader
	Seeker
}

ReadSeeker is bitio.Reader and bitio.Seeker.

func CloneReadSeeker added in v0.0.8

func CloneReadSeeker(r ReadSeeker) (ReadSeeker, error)

CloneReadSeeker clones a bitio.ReadSeeker if possible, resetting read position to start

type ReadSeekerCloner added in v0.0.8

type ReadSeekerCloner interface {
	CloneReadSeeker() (ReadSeeker, error)
}

ReadSeekerCloner is a cloneable bitio.ReadSeeker, resetting read position to start

type Reader

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

Reader is something that reads bits. Similar to io.Reader.

func CloneReader added in v0.0.8

func CloneReader(r Reader) (Reader, error)

CloneReader clones a bitio.Reader if possible, resetting read position to start

type ReaderAt added in v0.0.5

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

ReaderAt is something that reads bits at an offset. Similar to io.ReaderAt.

type ReaderAtSeeker added in v0.0.5

type ReaderAtSeeker interface {
	Reader
	ReaderAt
	Seeker
}

ReaderAtSeeker is bitio.Reader, bitio.ReaderAt and bitio.Seeker

func CloneReaderAtSeeker added in v0.0.8

func CloneReaderAtSeeker(r ReadAtSeeker) (ReaderAtSeeker, error)

CloneReaderAtSeeker clones a bitio.ReadAtSeeker if possible, resetting read position to start

type ReaderAtSeekerCloner added in v0.0.8

type ReaderAtSeekerCloner interface {
	CloneReaderAtSeeker() (ReaderAtSeeker, error)
}

CloneReaderAtSeeker is a cloneable bitio.ReaderAtSeeker, resetting read position to start

type SectionReader added in v0.0.5

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

SectionReader is a bitio.BitReaderAtSeeker reading a section of a bitio.ReaderAt. Similar to io.SectionReader.

func NewBitReader added in v0.0.5

func NewBitReader(buf []byte, nBits int64) *SectionReader

NewBitReader reader reading nBits bits from a []byte. If nBits is -1 all bits will be used. Similar to bytes.NewReader.

func NewSectionReader added in v0.0.5

func NewSectionReader(r ReaderAt, bitOff int64, nBits int64) *SectionReader

NewSectionReader returns a new bitio.SectionReader.

func (*SectionReader) CloneReadSeeker added in v0.0.8

func (r *SectionReader) CloneReadSeeker() (ReadSeeker, error)

func (*SectionReader) CloneReader added in v0.0.8

func (r *SectionReader) CloneReader() (Reader, error)

func (*SectionReader) CloneReaderAtSeeker added in v0.0.8

func (r *SectionReader) CloneReaderAtSeeker() (ReaderAtSeeker, error)

func (*SectionReader) CloneReaderSeeker added in v0.0.8

func (r *SectionReader) CloneReaderSeeker() (ReadAtSeeker, error)

func (*SectionReader) ReadBits added in v0.0.5

func (r *SectionReader) ReadBits(p []byte, nBits int64) (n int64, err error)

func (*SectionReader) ReadBitsAt added in v0.0.5

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

func (*SectionReader) SeekBits added in v0.0.5

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

func (*SectionReader) Unwrap added in v0.6.0

func (r *SectionReader) Unwrap() any

type Seeker added in v0.0.5

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

Seeker is something that seeks bits Similar to io.Seeker.

type Writer added in v0.0.5

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

Writer is something that writs bits. Similar to io.Writer.

Jump to

Keyboard shortcuts

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