Imports #
"errors"
"io"
"errors"
"io"
"math"
"reflect"
"slices"
"sync"
"errors"
"io"
"errors"
"io"
"math"
"reflect"
"slices"
"sync"
BigEndian is the big-endian implementation of [ByteOrder] and [AppendByteOrder].
var BigEndian bigEndian
LittleEndian is the little-endian implementation of [ByteOrder] and [AppendByteOrder].
var LittleEndian littleEndian
MaxVarintLenN is the maximum length of a varint-encoded N-bit integer.
const MaxVarintLen16 = 3
MaxVarintLenN is the maximum length of a varint-encoded N-bit integer.
const MaxVarintLen32 = 5
MaxVarintLenN is the maximum length of a varint-encoded N-bit integer.
const MaxVarintLen64 = 10
NativeEndian is the native-endian implementation of [ByteOrder] and [AppendByteOrder].
var NativeEndian nativeEndian
NativeEndian is the native-endian implementation of [ByteOrder] and [AppendByteOrder].
var NativeEndian nativeEndian
var errBufferTooSmall = *ast.CallExpr
var errOverflow = *ast.CallExpr
var structSize sync.Map
type decoder coder
type encoder coder
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
}
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
}
type bigEndian struct {
}
type coder struct {
order ByteOrder
buf []byte
offset int
}
type littleEndian struct {
}
type nativeEndian struct {
littleEndian
}
type nativeEndian struct {
bigEndian
}
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 appends the bytes of v to b and returns the appended slice.
func (littleEndian) AppendUint16(b []byte, v uint16) []byte
AppendUint16 appends the bytes of v to b and returns the appended slice.
func (bigEndian) AppendUint16(b []byte, v uint16) []byte
AppendUint32 appends the bytes of v to b and returns the appended slice.
func (littleEndian) AppendUint32(b []byte, v uint32) []byte
AppendUint32 appends the bytes of v to b and returns the appended slice.
func (bigEndian) AppendUint32(b []byte, v uint32) []byte
AppendUint64 appends the bytes of v to b and returns the appended slice.
func (littleEndian) AppendUint64(b []byte, v uint64) []byte
AppendUint64 appends the bytes of v to b and returns the appended slice.
func (bigEndian) AppendUint64(b []byte, v uint64) []byte
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 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 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 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)
func (bigEndian) GoString() string
func (nativeEndian) GoString() string
func (littleEndian) GoString() string
PutUint16 stores v into b[0:2].
func (littleEndian) PutUint16(b []byte, v uint16)
PutUint16 stores v into b[0:2].
func (bigEndian) PutUint16(b []byte, v uint16)
PutUint32 stores v into b[0:4].
func (bigEndian) PutUint32(b []byte, v uint32)
PutUint32 stores v into b[0:4].
func (littleEndian) PutUint32(b []byte, v uint32)
PutUint64 stores v into b[0:8].
func (littleEndian) PutUint64(b []byte, v uint64)
PutUint64 stores v into b[0:8].
func (bigEndian) PutUint64(b []byte, v uint64)
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 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 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 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 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 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
func (littleEndian) String() string
func (bigEndian) String() string
func (nativeEndian) String() string
Uint16 returns the uint16 representation of b[0:2].
func (littleEndian) Uint16(b []byte) uint16
Uint16 returns the uint16 representation of b[0:2].
func (bigEndian) Uint16(b []byte) uint16
Uint32 returns the uint32 representation of b[0:4].
func (littleEndian) Uint32(b []byte) uint32
Uint32 returns the uint32 representation of b[0:4].
func (bigEndian) Uint32(b []byte) uint32
Uint64 returns the uint64 representation of b[0:8].
func (littleEndian) Uint64(b []byte) uint64
Uint64 returns the uint64 representation of b[0:8].
func (bigEndian) Uint64(b []byte) uint64
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 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 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
func (e *encoder) bool(x bool)
func (d *decoder) bool() bool
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
func decodeFast(bs []byte, order ByteOrder, data any) bool
func encodeFast(bs []byte, order ByteOrder, data any)
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)
func (e *encoder) int16(x int16)
func (d *decoder) int16() int16
func (e *encoder) int32(x int32)
func (d *decoder) int32() int32
func (e *encoder) int64(x int64)
func (d *decoder) int64() int64
func (d *decoder) int8() int8
func (e *encoder) int8(x int8)
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 returns the size >= 0 of variables for the given type or -1 if the type is not acceptable.
func sizeof(t reflect.Type) int
func (d *decoder) skip(v reflect.Value)
func (e *encoder) skip(v reflect.Value)
func (e *encoder) uint16(x uint16)
func (d *decoder) uint16() uint16
func (e *encoder) uint32(x uint32)
func (d *decoder) uint32() uint32
func (e *encoder) uint64(x uint64)
func (d *decoder) uint64() uint64
func (d *decoder) uint8() uint8
func (e *encoder) uint8(x uint8)
func (d *decoder) value(v reflect.Value)
func (e *encoder) value(v reflect.Value)
Generated with Arrow