data

package
v0.4.0-b3 Latest Latest
Warning

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

Go to latest
Published: Aug 25, 2022 License: GPL-3.0 Imports: 9 Imported by: 2

Documentation

Overview

Copyright (C) 2020 - 2022 iDigitalFlame

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.

Index

Constants

View Source
const (
	// LimitSmall is the size value allowed for small strings using the WriteString
	// and WriteBytes functions.
	LimitSmall uint64 = 2 << 7
	// LimitLarge is the size value allowed for large strings using the WriteString
	// and WriteBytes functions.
	LimitLarge uint64 = 2 << 31
	// LimitMedium is the size value allowed for medium strings using the WriteString
	// and WriteBytes functions.
	LimitMedium uint64 = 2 << 15
)
View Source
const (
	// ErrTooLarge is raised if memory cannot be allocated to store data in a Chunk.
	ErrTooLarge = dataError(3)
	// ErrInvalidType is an error that occurs when the Bytes, ReadBytes, StringVal
	// or ReadString functions could not
	// propertly determine the underlying type of array from the Reader.
	ErrInvalidType = dataError(1)
	// ErrInvalidIndex is raised if a specified Grow or index function is supplied
	// with an negative or out of
	// bounds number or when a Seek index is not valid.
	ErrInvalidIndex = dataError(2)
)
View Source
const KeySize = 32

KeySize is the size of the Key array.

View Source
const MaxSlice = 4_398_046_511_104 // (2 << 41)

MaxSlice is the max slice value used when creating slices to prevent OOM issues. XMT will refuse to make a slice any larger than this and will return 'ErrToLarge'

Variables

View Source
var ErrLimit = new(limitError)

ErrLimit is an error that is returned when a Limit is set on a Chunk and the size limit was hit when attempting to write to the Chunk. This error wraps the io.EOF error, which allows this error to match io.EOF for sanity checking.

Functions

func NewCtxReader

func NewCtxReader(x context.Context, r io.Reader) io.ReadCloser

NewCtxReader creates a reader backed by the supplied Reader and Context. This reader will automatically close when the parent context is canceled. This is useful in situations when direct copies using 'io.Copy' on threads or timed operations are required.

func ReadCloser added in v0.1.0

func ReadCloser(r io.Reader) io.ReadCloser

ReadCloser is a function that will wrap the supplied Reader in a NopReadCloser.

func ReadStringList

func ReadStringList(r Reader, s *[]string) error

ReadStringList attempts to read a string list written using the 'WriteStringList' function from the supplied string into the string list pointer. If the provided array is nil or not large enough, it will be resized.

func WriteCloser added in v0.1.0

func WriteCloser(w io.Writer) io.WriteCloser

WriteCloser is a function that will wrap the supplied Writer in a NopWriteCloser.

func WriteStringList

func WriteStringList(w Writer, s []string) error

WriteStringList will attempt to write the supplied string list to the writer. If the string list is nil or empty, it will write a zero byte to the Writer. The resulting data can be read using the 'ReadStringList' function.

Types

type Chunk

type Chunk struct {
	Limit int
	// contains filtered or unexported fields
}

Chunk is a low level data container. Chunks allow for simple read/write operations on static containers.

Chunk fulfils the Reader, Seeker, Writer, Flusher and Closer interfaces. Seeking on Chunks is only supported in a read-only fashion.

func NewChunk

func NewChunk(b []byte) *Chunk

NewChunk creates a new Chunk struct and will use the provided byte array as the underlying backing buffer.

func (*Chunk) Avaliable

func (c *Chunk) Avaliable(n int) bool

Avaliable returns if a limit will block the writing of n bytes. This function can be used to check if there is space to write before commiting a write.

func (*Chunk) Bool

func (c *Chunk) Bool() (bool, error)

Bool reads the value from the Chunk payload buffer.

func (*Chunk) Bytes

func (c *Chunk) Bytes() ([]byte, error)

Bytes reads the value from the Chunk payload buffer.

func (*Chunk) Clear

func (c *Chunk) Clear()

Clear is similar to Reset, but discards the buffer, which must be allocated again. If using the buffer the 'Reset' function is preferable.

func (Chunk) Close

func (Chunk) Close() error

Close allows Chunk to support the io.Closer interface.

func (*Chunk) Crypt added in v0.2.9

func (c *Chunk) Crypt(k *Key)

Crypt will perform an "encryption" operation on the underlying Chunk buffer. No bytes are added or removed and this will not change the Chunk's size.

If the Chunk is empty, 'nokeyset' was specified on build or the Key is nil, this is a NOP.

func (*Chunk) Empty

func (c *Chunk) Empty() bool

Empty returns true if this Chunk's buffer is empty or has been drained by reads.

func (*Chunk) Float32

func (c *Chunk) Float32() (float32, error)

Float32 reads the value from the Chunk payload buffer.

func (*Chunk) Float64

func (c *Chunk) Float64() (float64, error)

Float64 reads the value from the Chunk payload buffer.

func (Chunk) Flush

func (Chunk) Flush() error

Flush allows Chunk to support the io.Flusher interface.

func (*Chunk) Grow

func (c *Chunk) Grow(n int) error

Grow grows the Chunk's buffer capacity, if necessary, to guarantee space for another n bytes.

func (*Chunk) Int

func (c *Chunk) Int() (int, error)

Int reads the value from the Chunk payload buffer.

func (*Chunk) Int16

func (c *Chunk) Int16() (int16, error)

Int16 reads the value from the Chunk payload buffer.

func (*Chunk) Int32

func (c *Chunk) Int32() (int32, error)

Int32 reads the value from the Chunk payload buffer.

func (*Chunk) Int64

func (c *Chunk) Int64() (int64, error)

Int64 reads the value from the Chunk payload buffer.

func (*Chunk) Int8

func (c *Chunk) Int8() (int8, error)

Int8 reads the value from the Chunk payload buffer.

func (*Chunk) MarshalStream

func (c *Chunk) MarshalStream(w Writer) error

MarshalStream writes the unread Chunk data into a binary data representation. This function will return an error if any part of the write fails.

func (*Chunk) Payload

func (c *Chunk) Payload() []byte

Payload returns a copy of the underlying UNREAD buffer contained in this Chunk.

This may be empty depending on the read status of this chunk. To retrieve the full buffer, use the 'Seek' function to set the read cursor to zero.

func (*Chunk) Read

func (c *Chunk) Read(b []byte) (int, error)

Read reads the next len(p) bytes from the Chunk or until the Chunk is drained. The return value n is the number of bytes read and any errors that may have occurred.

func (*Chunk) ReadBool

func (c *Chunk) ReadBool(p *bool) error

ReadBool reads the value from the Chunk payload buffer into the provided pointer.

func (*Chunk) ReadBytes added in v0.1.0

func (c *Chunk) ReadBytes(p *[]byte) error

ReadBytes reads the value from the Chunk payload buffer.

func (*Chunk) ReadDeadline added in v0.1.0

func (c *Chunk) ReadDeadline(r net.Conn, d time.Duration) (int64, error)

ReadDeadline reads data from the supplied net.Conn until EOF or error.

The return value is the number of bytes read. Any error except 'io.EOF' encountered during the read is also returned.

If the specific duration is greater than zero, the read deadline will be applied. Timeout errors will NOT be returned and will instead break a read.

func (*Chunk) ReadFloat32

func (c *Chunk) ReadFloat32(p *float32) error

ReadFloat32 reads the value from the Chunk payload buffer into the provided pointer.

func (*Chunk) ReadFloat64

func (c *Chunk) ReadFloat64(p *float64) error

ReadFloat64 reads the value from the Chunk payload buffer into the provided pointer.

func (*Chunk) ReadFrom

func (c *Chunk) ReadFrom(r io.Reader) (int64, error)

ReadFrom reads data from the supplied Reader until EOF or error.

The return value is the number of bytes read. Any error except 'io.EOF' encountered during the read is also returned.

func (*Chunk) ReadInt

func (c *Chunk) ReadInt(p *int) error

ReadInt reads the value from the Chunk payload buffer into the provided pointer.

func (*Chunk) ReadInt16

func (c *Chunk) ReadInt16(p *int16) error

ReadInt16 reads the value from the Chunk payload buffer into the provided pointer.

func (*Chunk) ReadInt32

func (c *Chunk) ReadInt32(p *int32) error

ReadInt32 reads the value from the Chunk payload buffer into the provided pointer.

func (*Chunk) ReadInt64

func (c *Chunk) ReadInt64(p *int64) error

ReadInt64 reads the value from the Chunk payload buffer into the provided pointer.

func (*Chunk) ReadInt8

func (c *Chunk) ReadInt8(p *int8) error

ReadInt8 reads the value from the Chunk payload buffer into the provided pointer.

func (*Chunk) ReadString

func (c *Chunk) ReadString(p *string) error

ReadString reads the value from the Chunk payload buffer into the provided pointer.

func (*Chunk) ReadUint

func (c *Chunk) ReadUint(p *uint) error

ReadUint reads the value from the Chunk payload buffer into the provided pointer.

func (*Chunk) ReadUint16

func (c *Chunk) ReadUint16(p *uint16) error

ReadUint16 reads the value from the Chunk payload buffer into the provided pointer.

func (*Chunk) ReadUint32

func (c *Chunk) ReadUint32(p *uint32) error

ReadUint32 reads the value from the Chunk payload buffer into the provided pointer.

func (*Chunk) ReadUint64

func (c *Chunk) ReadUint64(p *uint64) error

ReadUint64 reads the value from the Chunk payload buffer into the provided pointer.

func (*Chunk) ReadUint8

func (c *Chunk) ReadUint8(p *uint8) error

ReadUint8 reads the value from the Chunk payload buffer into the provided pointer.

func (*Chunk) Remaining added in v0.2.0

func (c *Chunk) Remaining() int

Remaining returns the number of bytes left to be read in this Chunk. This is the length 'Size' minus the read cursor.

func (*Chunk) Reset

func (c *Chunk) Reset()

Reset resets the Chunk buffer to be empty but retains the underlying storage for use by future writes.

func (*Chunk) Seek

func (c *Chunk) Seek(o int64, w int) (int64, error)

Seek will attempt to seek to the provided read offset index and whence. This function will return the new offset if successful and will return an error if the offset and/or whence are invalid.

NOTE: This only affects read operatios.

func (*Chunk) Size

func (c *Chunk) Size() int

Size returns the internal size of the backing buffer, similar to len(b).

func (*Chunk) Space added in v0.2.0

func (c *Chunk) Space() int

Space returns the amount of bytes avaliable in this Chunk when a Limit is set.

This function will return -1 if there is no limit set and returns 0 (zero) when a limit is set, but no byte space is avaliable.

func (*Chunk) String

func (c *Chunk) String() string

String returns a string representation of this Chunk's buffer.

func (*Chunk) StringVal

func (c *Chunk) StringVal() (string, error)

StringVal reads the value from the Chunk payload buffer.

func (*Chunk) Truncate

func (c *Chunk) Truncate(n int) error

Truncate discards all but the first n unread bytes from the Chunk but continues to use the same allocated storage.

This will return an error if n is negative or greater than the length of the buffer.

func (*Chunk) Uint

func (c *Chunk) Uint() (uint, error)

Uint reads the value from the Chunk payload buffer.

func (*Chunk) Uint16

func (c *Chunk) Uint16() (uint16, error)

Uint16 reads the value from the Chunk payload buffer.

func (*Chunk) Uint32

func (c *Chunk) Uint32() (uint32, error)

Uint32 reads the value from the Chunk payload buffer.

func (*Chunk) Uint64

func (c *Chunk) Uint64() (uint64, error)

Uint64 reads the value from the Chunk payload buffer.

func (*Chunk) Uint8

func (c *Chunk) Uint8() (uint8, error)

Uint8 reads the value from the Chunk payload buffer.

func (*Chunk) UnmarshalStream

func (c *Chunk) UnmarshalStream(r Reader) error

UnmarshalStream reads the Chunk data from a binary data representation. This function will return an error if any part of the read fails.

func (*Chunk) Write

func (c *Chunk) Write(b []byte) (int, error)

Write appends the contents of b to the buffer, growing the buffer as needed.

If the buffer becomes too large, Write will return 'ErrTooLarge.' If there is a limit set, this function will return 'ErrLimit' if the Limit is being hit.

If an 'ErrLimit' is returned, check the returned bytes as 'ErrLimit' is returned as a warning that not all bytes have been written before refusing writes.

func (*Chunk) WriteBool

func (c *Chunk) WriteBool(b bool) error

WriteBool writes the supplied value to the Chunk payload buffer.

func (*Chunk) WriteBoolPos added in v0.3.1

func (c *Chunk) WriteBoolPos(p int, b bool) error

WriteBoolPos writes the supplied boolean value to the Chunk payload buffer at the supplied index 'p'.

The error 'io.EOF' is returned if the position specified is greater than the Chunk buffer size, or 'ErrLimit' if this position is greater than the set Chunk limit.

func (*Chunk) WriteBytes

func (c *Chunk) WriteBytes(b []byte) error

WriteBytes writes the supplied value to the Chunk payload buffer.

func (*Chunk) WriteFloat32

func (c *Chunk) WriteFloat32(f float32) error

WriteFloat32 writes the supplied value to the Chunk payload buffer.

func (*Chunk) WriteFloat64

func (c *Chunk) WriteFloat64(f float64) error

WriteFloat64 writes the supplied value to the Chunk payload buffer.

func (*Chunk) WriteInt

func (c *Chunk) WriteInt(n int) error

WriteInt writes the supplied value to the Chunk payload buffer.

func (*Chunk) WriteInt16

func (c *Chunk) WriteInt16(n int16) error

WriteInt16 writes the supplied value to the Chunk payload buffer.

func (*Chunk) WriteInt32

func (c *Chunk) WriteInt32(n int32) error

WriteInt32 writes the supplied value to the Chunk payload buffer.

func (*Chunk) WriteInt64

func (c *Chunk) WriteInt64(n int64) error

WriteInt64 writes the supplied value to the Chunk payload buffer.

func (*Chunk) WriteInt8

func (c *Chunk) WriteInt8(n int8) error

WriteInt8 writes the supplied value to the Chunk payload buffer.

func (*Chunk) WriteString

func (c *Chunk) WriteString(s string) error

WriteString writes the supplied value to the Chunk payload buffer.

func (*Chunk) WriteTo

func (c *Chunk) WriteTo(w io.Writer) (int64, error)

WriteTo writes data to the supplied Writer until there's no more data to write or when an error occurs.

The return value is the number of bytes written. Any error encountered during the write is also returned.

func (*Chunk) WriteUint

func (c *Chunk) WriteUint(n uint) error

WriteUint writes the supplied value to the Chunk payload buffer.

func (*Chunk) WriteUint16

func (c *Chunk) WriteUint16(n uint16) error

WriteUint16 writes the supplied value to the Chunk payload buffer.

func (*Chunk) WriteUint16Pos added in v0.3.1

func (c *Chunk) WriteUint16Pos(p int, n uint16) error

WriteUint16Pos writes the supplied uint16 value to the Chunk payload buffer at the supplied index 'p'.

The error 'io.EOF' is returned if the position specified is greater than the Chunk buffer size, or 'ErrLimit' if this position is greater than the set Chunk limit.

func (*Chunk) WriteUint32

func (c *Chunk) WriteUint32(n uint32) error

WriteUint32 writes the supplied value to the Chunk payload buffer.

func (*Chunk) WriteUint32Pos added in v0.3.1

func (c *Chunk) WriteUint32Pos(p int, n uint32) error

WriteUint32Pos writes the supplied uint16 value to the Chunk payload buffer at the supplied index 'p'.

The error 'io.EOF' is returned if the position specified is greater than the Chunk buffer size, or 'ErrLimit' if this position is greater than the set Chunk limit.

func (*Chunk) WriteUint64

func (c *Chunk) WriteUint64(n uint64) error

WriteUint64 writes the supplied value to the Chunk payload buffer.

func (*Chunk) WriteUint64Pos added in v0.3.1

func (c *Chunk) WriteUint64Pos(p int, n uint64) error

WriteUint64Pos writes the supplied uint16 value to the Chunk payload buffer at the supplied index 'p'.

The error 'io.EOF' is returned if the position specified is greater than the Chunk buffer size, or 'ErrLimit' if this position is greater than the set Chunk limit.

func (*Chunk) WriteUint8

func (c *Chunk) WriteUint8(n uint8) error

WriteUint8 writes the supplied value to the Chunk payload buffer.

func (*Chunk) WriteUint8Pos added in v0.3.1

func (c *Chunk) WriteUint8Pos(p int, n uint8) error

WriteUint8Pos writes the supplied uint8 value to the Chunk payload buffer at the supplied index 'p'.

The error 'io.EOF' is returned if the position specified is greater than the Chunk buffer size, or 'ErrLimit' if this position is greater than the set Chunk limit.

type Key added in v0.2.9

type Key [KeySize]byte

Key is a alias for a encryption key that can be used to protect Chunks when non-empty.

type Reader

type Reader interface {
	Close() error
	Read([]byte) (int, error)

	Int() (int, error)
	Bool() (bool, error)
	Int8() (int8, error)
	Uint() (uint, error)
	Int16() (int16, error)
	Int32() (int32, error)
	Int64() (int64, error)
	Uint8() (uint8, error)
	Bytes() ([]byte, error)
	Uint16() (uint16, error)
	Uint32() (uint32, error)
	Uint64() (uint64, error)
	Float32() (float32, error)
	Float64() (float64, error)
	StringVal() (string, error)

	ReadInt(*int) error
	ReadBool(*bool) error
	ReadInt8(*int8) error
	ReadUint(*uint) error
	ReadInt16(*int16) error
	ReadInt32(*int32) error
	ReadInt64(*int64) error
	ReadUint8(*uint8) error
	ReadBytes(*[]byte) error
	ReadUint16(*uint16) error
	ReadUint32(*uint32) error
	ReadUint64(*uint64) error
	ReadString(*string) error
	ReadFloat32(*float32) error
	ReadFloat64(*float64) error
}

Reader is a basic interface that supports all types of read functions of the core Golang builtin types.

Pointer functions are avaliable to allow for easier usage and fluid operation.

func NewReader

func NewReader(r io.Reader) Reader

NewReader creates a simple Reader struct from the base io.Reader provided.

type Writer

type Writer interface {
	Close() error
	Flush() error
	Write([]byte) (int, error)

	WriteInt(int) error
	WriteBool(bool) error
	WriteInt8(int8) error
	WriteUint(uint) error
	WriteInt16(int16) error
	WriteInt32(int32) error
	WriteInt64(int64) error
	WriteUint8(uint8) error
	WriteBytes([]byte) error
	WriteUint16(uint16) error
	WriteUint32(uint32) error
	WriteUint64(uint64) error
	WriteString(string) error
	WriteFloat32(float32) error
	WriteFloat64(float64) error
}

Writer is a basic interface that supports writing of all core Golang builtin types.

func NewWriter

func NewWriter(w io.Writer) Writer

NewWriter creates a simple Writer struct from the base Writer provided.

Directories

Path Synopsis
subtle
Package subtle is similar to the 'cipher/subtle', only needed for very specific crypto operations.
Package subtle is similar to the 'cipher/subtle', only needed for very specific crypto operations.

Jump to

Keyboard shortcuts

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