binary

Imports

Imports #

"errors"
"io"
"errors"
"io"
"math"
"reflect"
"slices"
"sync"

Constants & Variables

BigEndian var #

BigEndian is the big-endian implementation of [ByteOrder] and [AppendByteOrder].

var BigEndian bigEndian

LittleEndian var #

LittleEndian is the little-endian implementation of [ByteOrder] and [AppendByteOrder].

var LittleEndian littleEndian

MaxVarintLen16 const #

MaxVarintLenN is the maximum length of a varint-encoded N-bit integer.

const MaxVarintLen16 = 3

MaxVarintLen32 const #

MaxVarintLenN is the maximum length of a varint-encoded N-bit integer.

const MaxVarintLen32 = 5

MaxVarintLen64 const #

MaxVarintLenN is the maximum length of a varint-encoded N-bit integer.

const MaxVarintLen64 = 10

NativeEndian var #

NativeEndian is the native-endian implementation of [ByteOrder] and [AppendByteOrder].

var NativeEndian nativeEndian

NativeEndian var #

NativeEndian is the native-endian implementation of [ByteOrder] and [AppendByteOrder].

var NativeEndian nativeEndian

errBufferTooSmall var #

var errBufferTooSmall = *ast.CallExpr

errOverflow var #

var errOverflow = *ast.CallExpr

structSize var #

var structSize sync.Map

Type Aliases

decoder type #

type decoder coder

encoder type #

type encoder coder

Interfaces

AppendByteOrder interface #

AppendByteOrder specifies how to append 16-, 32-, or 64-bit unsigned integers into a byte slice. It is implemented by [LittleEndian], [BigEndian], and [NativeEndian].

type AppendByteOrder interface {
AppendUint16([]byte, uint16) []byte
AppendUint32([]byte, uint32) []byte
AppendUint64([]byte, uint64) []byte
String() string
}

ByteOrder interface #

A ByteOrder specifies how to convert byte slices into 16-, 32-, or 64-bit unsigned integers. It is implemented by [LittleEndian], [BigEndian], and [NativeEndian].

type ByteOrder interface {
Uint16([]byte) uint16
Uint32([]byte) uint32
Uint64([]byte) uint64
PutUint16([]byte, uint16)
PutUint32([]byte, uint32)
PutUint64([]byte, uint64)
String() string
}

Structs

bigEndian struct #

type bigEndian struct {

}

coder struct #

type coder struct {
order ByteOrder
buf []byte
offset int
}

littleEndian struct #

type littleEndian struct {

}

nativeEndian struct #

type nativeEndian struct {
littleEndian
}

nativeEndian struct #

type nativeEndian struct {
bigEndian
}

Functions

Append function #

Append appends the binary representation of data to buf. buf may be nil, in which case a new buffer will be allocated. See [Write] on which data are acceptable. It returns the (possibly extended) buffer containing data or an error.

func Append(buf []byte, order ByteOrder, data any) ([]byte, error)

AppendUint16 method #

AppendUint16 appends the bytes of v to b and returns the appended slice.

func (littleEndian) AppendUint16(b []byte, v uint16) []byte

AppendUint16 method #

AppendUint16 appends the bytes of v to b and returns the appended slice.

func (bigEndian) AppendUint16(b []byte, v uint16) []byte

AppendUint32 method #

AppendUint32 appends the bytes of v to b and returns the appended slice.

func (littleEndian) AppendUint32(b []byte, v uint32) []byte

AppendUint32 method #

AppendUint32 appends the bytes of v to b and returns the appended slice.

func (bigEndian) AppendUint32(b []byte, v uint32) []byte

AppendUint64 method #

AppendUint64 appends the bytes of v to b and returns the appended slice.

func (littleEndian) AppendUint64(b []byte, v uint64) []byte

AppendUint64 method #

AppendUint64 appends the bytes of v to b and returns the appended slice.

func (bigEndian) AppendUint64(b []byte, v uint64) []byte

AppendUvarint function #

AppendUvarint appends the varint-encoded form of x, as generated by [PutUvarint], to buf and returns the extended buffer.

func AppendUvarint(buf []byte, x uint64) []byte

AppendVarint function #

AppendVarint appends the varint-encoded form of x, as generated by [PutVarint], to buf and returns the extended buffer.

func AppendVarint(buf []byte, x int64) []byte

Decode function #

Decode decodes binary data from buf into data according to the given byte order. It returns an error if buf is too small, otherwise the number of bytes consumed from buf.

func Decode(buf []byte, order ByteOrder, data any) (int, error)

Encode function #

Encode encodes the binary representation of data into buf according to the given byte order. It returns an error if buf is too small, otherwise the number of bytes written into buf.

func Encode(buf []byte, order ByteOrder, data any) (int, error)

GoString method #

func (bigEndian) GoString() string

GoString method #

func (nativeEndian) GoString() string

GoString method #

func (littleEndian) GoString() string

PutUint16 method #

PutUint16 stores v into b[0:2].

func (littleEndian) PutUint16(b []byte, v uint16)

PutUint16 method #

PutUint16 stores v into b[0:2].

func (bigEndian) PutUint16(b []byte, v uint16)

PutUint32 method #

PutUint32 stores v into b[0:4].

func (bigEndian) PutUint32(b []byte, v uint32)

PutUint32 method #

PutUint32 stores v into b[0:4].

func (littleEndian) PutUint32(b []byte, v uint32)

PutUint64 method #

PutUint64 stores v into b[0:8].

func (littleEndian) PutUint64(b []byte, v uint64)

PutUint64 method #

PutUint64 stores v into b[0:8].

func (bigEndian) PutUint64(b []byte, v uint64)

PutUvarint function #

PutUvarint encodes a uint64 into buf and returns the number of bytes written. If the buffer is too small, PutUvarint will panic.

func PutUvarint(buf []byte, x uint64) int

PutVarint function #

PutVarint encodes an int64 into buf and returns the number of bytes written. If the buffer is too small, PutVarint will panic.

func PutVarint(buf []byte, x int64) int

Read function #

Read reads structured binary data from r into data. Data must be a pointer to a fixed-size value or a slice of fixed-size values. Bytes read from r are decoded using the specified byte order and written to successive fields of the data. When decoding boolean values, a zero byte is decoded as false, and any other non-zero byte is decoded as true. When reading into structs, the field data for fields with blank (_) field names is skipped; i.e., blank field names may be used for padding. When reading into a struct, all non-blank fields must be exported or Read may panic. The error is [io.EOF] only if no bytes were read. If an [io.EOF] happens after reading some but not all the bytes, Read returns [io.ErrUnexpectedEOF].

func Read(r io.Reader, order ByteOrder, data any) error

ReadUvarint function #

ReadUvarint reads an encoded unsigned integer from r and returns it as a uint64. The error is [io.EOF] only if no bytes were read. If an [io.EOF] happens after reading some but not all the bytes, ReadUvarint returns [io.ErrUnexpectedEOF].

func ReadUvarint(r io.ByteReader) (uint64, error)

ReadVarint function #

ReadVarint reads an encoded signed integer from r and returns it as an int64. The error is [io.EOF] only if no bytes were read. If an [io.EOF] happens after reading some but not all the bytes, ReadVarint returns [io.ErrUnexpectedEOF].

func ReadVarint(r io.ByteReader) (int64, error)

Size function #

Size returns how many bytes [Write] would generate to encode the value v, which must be a fixed-size value or a slice of fixed-size values, or a pointer to such data. If v is neither of these, Size returns -1.

func Size(v any) int

String method #

func (littleEndian) String() string

String method #

func (bigEndian) String() string

String method #

func (nativeEndian) String() string

Uint16 method #

Uint16 returns the uint16 representation of b[0:2].

func (littleEndian) Uint16(b []byte) uint16

Uint16 method #

Uint16 returns the uint16 representation of b[0:2].

func (bigEndian) Uint16(b []byte) uint16

Uint32 method #

Uint32 returns the uint32 representation of b[0:4].

func (littleEndian) Uint32(b []byte) uint32

Uint32 method #

Uint32 returns the uint32 representation of b[0:4].

func (bigEndian) Uint32(b []byte) uint32

Uint64 method #

Uint64 returns the uint64 representation of b[0:8].

func (littleEndian) Uint64(b []byte) uint64

Uint64 method #

Uint64 returns the uint64 representation of b[0:8].

func (bigEndian) Uint64(b []byte) uint64

Uvarint function #

Uvarint decodes a uint64 from buf and returns that value and the number of bytes read (> 0). If an error occurred, the value is 0 and the number of bytes n is <= 0 meaning: - n == 0: buf too small; - n < 0: value larger than 64 bits (overflow) and -n is the number of bytes read.

func Uvarint(buf []byte) (uint64, int)

Varint function #

Varint decodes an int64 from buf and returns that value and the number of bytes read (> 0). If an error occurred, the value is 0 and the number of bytes n is <= 0 with the following meaning: - n == 0: buf too small; - n < 0: value larger than 64 bits (overflow) and -n is the number of bytes read.

func Varint(buf []byte) (int64, int)

Write function #

Write writes the binary representation of data into w. Data must be a fixed-size value or a slice of fixed-size values, or a pointer to such data. Boolean values encode as one byte: 1 for true, and 0 for false. Bytes written to w are encoded using the specified byte order and read from successive fields of the data. When writing structs, zero values are written for fields with blank (_) field names.

func Write(w io.Writer, order ByteOrder, data any) error

bool method #

func (e *encoder) bool(x bool)

bool method #

func (d *decoder) bool() bool

dataSize function #

dataSize returns the number of bytes the actual data represented by v occupies in memory. For compound structures, it sums the sizes of the elements. Thus, for instance, for a slice it returns the length of the slice times the element size and does not count the memory occupied by the header. If the type of v is not acceptable, dataSize returns -1.

func dataSize(v reflect.Value) int

decodeFast function #

func decodeFast(bs []byte, order ByteOrder, data any) bool

encodeFast function #

func encodeFast(bs []byte, order ByteOrder, data any)

ensure function #

ensure grows buf to length len(buf) + n and returns the grown buffer and a slice starting at the original length of buf (that is, buf2[len(buf):]).

func ensure(buf []byte, n int) (buf2 []byte, pos []byte)

int16 method #

func (e *encoder) int16(x int16)

int16 method #

func (d *decoder) int16() int16

int32 method #

func (e *encoder) int32(x int32)

int32 method #

func (d *decoder) int32() int32

int64 method #

func (e *encoder) int64(x int64)

int64 method #

func (d *decoder) int64() int64

int8 method #

func (d *decoder) int8() int8

int8 method #

func (e *encoder) int8(x int8)

intDataSize function #

intDataSize returns the size of the data required to represent the data when encoded, and optionally a byte slice containing the encoded data if no conversion is necessary. It returns zero, nil if the type cannot be implemented by the fast path in Read or Write.

func intDataSize(data any) (int, []byte)

sizeof function #

sizeof returns the size >= 0 of variables for the given type or -1 if the type is not acceptable.

func sizeof(t reflect.Type) int

skip method #

func (d *decoder) skip(v reflect.Value)

skip method #

func (e *encoder) skip(v reflect.Value)

uint16 method #

func (e *encoder) uint16(x uint16)

uint16 method #

func (d *decoder) uint16() uint16

uint32 method #

func (e *encoder) uint32(x uint32)

uint32 method #

func (d *decoder) uint32() uint32

uint64 method #

func (e *encoder) uint64(x uint64)

uint64 method #

func (d *decoder) uint64() uint64

uint8 method #

func (d *decoder) uint8() uint8

uint8 method #

func (e *encoder) uint8(x uint8)

value method #

func (d *decoder) value(v reflect.Value)

value method #

func (e *encoder) value(v reflect.Value)

Generated with Arrow