siegreader

package
v1.6.4 Latest Latest
Warning

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

Go to latest
Published: Sep 5, 2016 License: Apache-2.0 Imports: 8 Imported by: 0

Documentation

Overview

Package siegreader implements multiple independent Readers (and ReverseReaders) from a single Buffer.

Example:

  buffers := siegreader.New()
  buffer, err := buffers.Get(io.Reader)
  if err != nil {
    log.Fatal(err)
  }
  rdr := siegreader.ReaderFrom(buffer)
	 second_rdr := siegreader.ReaderFrom(buffer)
  brdr := siegreader.LimitReaderFrom(buffer, -1)
  rrdr, err := siegreader.LimitReverseReaderFrom(buffer, 16000)
  i, err := rdr.Read(slc)
  i2, err := second_rdr.Read(slc2)
  i3, err := rrdr.ReadByte()

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrEmpty     = errors.New("empty source")
	ErrQuit      = errors.New("siegreader: quit chan closed while awaiting EOF")
	ErrNilBuffer = errors.New("siegreader: attempt to SetSource on a nil buffer")
)

Functions

func LimitReaderFrom

func LimitReaderFrom(b *Buffer, l int) io.ByteReader

LimitReaderFrom returns a new LimitReader reading from Buffer.

func LimitReverseReaderFrom

func LimitReverseReaderFrom(b *Buffer, l int) io.ByteReader

LimitReverseReaderFrom returns a new LimitReverseReader reading from Buffer.

func TextReaderFrom

func TextReaderFrom(b *Buffer) io.ByteReader

func TextReverseReaderFrom

func TextReverseReaderFrom(b *Buffer) io.ByteReader

Types

type Buffer

type Buffer struct {
	Quit chan struct{} // when this channel is closed, readers will return io.EOF
	// contains filtered or unexported fields
}

Buffer allows multiple readers to read from the same source. Readers include reverse (from EOF) and limit readers.

func (*Buffer) Bytes

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

Bytes returns a byte slice for a full read of the buffered file or stream. Returns nil on error

func (*Buffer) Text

func (b *Buffer) Text() characterize.CharType

Text returns the CharType of the first 4096 bytes of the Buffer.

type Buffers

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

Buffers is a combined pool of stream, external and file buffers

func New

func New() *Buffers

New creates a new pool of stream, external and file buffers

func (*Buffers) Get

func (b *Buffers) Get(src io.Reader) (*Buffer, error)

Get returns a Buffer reading from the provided io.Reader. Get returns a Buffer backed by a stream, external or file source buffer depending on the type of reader. Source buffers are re-cycled where possible.

func (*Buffers) Last

func (b *Buffers) Last() *Buffer

Last retrieves the last Buffer returned to the pool with Put.

func (*Buffers) Put

func (b *Buffers) Put(i *Buffer)

Put returns a Buffer to the pool for re-cycling.

type LimitReader

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

LimitReader allows you to set an early limit for the ByteReader. At limit, ReadByte() returns 0, io.EOF.

func (*LimitReader) ReadByte

func (l *LimitReader) ReadByte() (byte, error)

ReadByte implements the io.ByteReader interface. Once limit is reached, returns 0, io.EOF.

type LimitReverseReader

type LimitReverseReader struct {
	*ReverseReader
	// contains filtered or unexported fields
}

LimitReverseReader allows you to set an early limit for the ByteReader. At limit, REadByte() returns 0, io.EOF.

func (*LimitReverseReader) ReadByte

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

ReadByte implements the io.ByteReader interface. Once limit is reached, returns 0, io.EOF.

type Reader

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

Reader implements the io.Reader, io.Seeker, io.ByteReader and io.ReaderAt interfaces The special thing about a siegreader.Reader is that you can have a bunch of them all reading independently from the one buffer.

Example:

 buffers := siegreader.New()
 buffer := buffers.Get(underlying_io_reader)
 rdr := siegreader.ReaderFrom(buffer)
	second_rdr := siegreader.ReaderFrom(buffer)
 limit_rdr := siegreader.LimitedReaderFrom(buffer, 4096)
 reverse_rdr := siegreader.ReverseReaderFrom(buffer)

func ReaderFrom

func ReaderFrom(b *Buffer) *Reader

ReaderFrom returns a Reader reading from the Buffer.

func (*Reader) Read

func (r *Reader) Read(b []byte) (int, error)

Read implements the io.Reader interface.

func (*Reader) ReadAt

func (r *Reader) ReadAt(b []byte, off int64) (int, error)

ReadAt implements the io.ReaderAt interface.

func (*Reader) ReadByte

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

ReadByte implements the io.ByteReader interface. Checks the quit channel every 4096 bytes.

func (*Reader) Seek

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

Seek implements the io.Seeker interface.

type ReverseReader

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

ReverseReader implements the io.Reader and io.ByteReader interfaces, but for each it does so from the end of the io source working backwards. Like Readers, you can have multiple ReverseReaders all reading independently from the same buffer.

func ReverseReaderFrom

func ReverseReaderFrom(b *Buffer) *ReverseReader

ReverseReaderFrom returns a ReverseReader reading from the Buffer.

func (*ReverseReader) Read

func (r *ReverseReader) Read(b []byte) (int, error)

Read implements the io.Reader interface.

func (*ReverseReader) ReadByte

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

ReadByte implements the io.ByteReader interface.

Jump to

Keyboard shortcuts

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