bpool: github.com/oxtoacart/bpool Index | Files

package bpool

import "github.com/oxtoacart/bpool"

Package bpool implements leaky pools of byte arrays and Buffers as bounded channels. It is based on the leaky buffer example from the Effective Go documentation: http://golang.org/doc/effective_go.html#leaky_buffer

Index

Package Files

bpool.go bufferpool.go bytepool.go byteslice.go sizedbufferpool.go

type BufferPool Uses

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

BufferPool implements a pool of bytes.Buffers in the form of a bounded channel.

func NewBufferPool Uses

func NewBufferPool(size int) (bp *BufferPool)

NewBufferPool creates a new BufferPool bounded to the given size.

func (*BufferPool) Get Uses

func (bp *BufferPool) Get() (b *bytes.Buffer)

Get gets a Buffer from the BufferPool, or creates a new one if none are available in the pool.

func (*BufferPool) NumPooled Uses

func (bp *BufferPool) NumPooled() int

NumPooled returns the number of items currently pooled.

func (*BufferPool) Put Uses

func (bp *BufferPool) Put(b *bytes.Buffer)

Put returns the given Buffer to the BufferPool.

type BytePool Uses

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

BytePool implements a leaky pool of []byte in the form of a bounded channel.

func NewBytePool Uses

func NewBytePool(maxSize int, width int) (bp *BytePool)

NewBytePool creates a new BytePool bounded to the given maxSize, with new byte arrays sized based on width.

func (*BytePool) Get Uses

func (bp *BytePool) Get() (b []byte)

Get gets a []byte from the BytePool, or creates a new one if none are available in the pool.

func (*BytePool) GetSlice Uses

func (bp *BytePool) GetSlice() ByteSlice

GetSlice implements the method from interface ByteSlicePool

func (*BytePool) NumPooled Uses

func (bp *BytePool) NumPooled() int

NumPooled returns the number of items currently pooled.

func (*BytePool) Put Uses

func (bp *BytePool) Put(b []byte)

Put returns the given Buffer to the BytePool.

func (*BytePool) PutSlice Uses

func (bp *BytePool) PutSlice(b ByteSlice)

PutSlice implements the method from interface ByteSlicePool

func (*BytePool) Width Uses

func (bp *BytePool) Width() (n int)

Width returns the width of the byte arrays in this pool.

type ByteSlice Uses

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

ByteSlice provides a wrapper around []byte with some added convenience

func WrapByteSlice Uses

func WrapByteSlice(full []byte, headerLength int) ByteSlice

WrapByteSlice wraps a []byte as a ByteSlice

func (ByteSlice) Bytes Uses

func (b ByteSlice) Bytes() []byte

Bytes returns the current slice

func (ByteSlice) BytesWithHeader Uses

func (b ByteSlice) BytesWithHeader() []byte

BytesWithHeader returns the current slice preceded by the header

func (ByteSlice) Full Uses

func (b ByteSlice) Full() []byte

Full returns the full original buffer underlying the ByteSlice

func (ByteSlice) ResliceTo Uses

func (b ByteSlice) ResliceTo(end int) ByteSlice

ResliceTo reslices the end of the current slice.

type ByteSlicePool Uses

type ByteSlicePool interface {
    // Get gets a byte slice from the pool
    GetSlice() ByteSlice
    // Put returns a byte slice to the pool
    PutSlice(ByteSlice)
    // NumPooled returns the number of currently pooled items
    NumPooled() int
}

ByteSlicePool is a bool of byte slices

func NewByteSlicePool Uses

func NewByteSlicePool(maxSize int, width int) ByteSlicePool

NewByteSlicePool creates a new ByteSlicePool bounded to the given maxSize, with new byte arrays sized based on width

func NewHeaderPreservingByteSlicePool Uses

func NewHeaderPreservingByteSlicePool(maxSize int, width int, headerLength int) ByteSlicePool

NewHeaderPreservingByteSlicePool creates a new ByteSlicePool bounded to the given maxSize, with new byte arrays sized based on width and headerLength preserved at the beginning of the slice.

type SizedBufferPool Uses

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

SizedBufferPool implements a pool of bytes.Buffers in the form of a bounded channel. Buffers are pre-allocated to the requested size.

func NewSizedBufferPool Uses

func NewSizedBufferPool(size int, alloc int) (bp *SizedBufferPool)

SizedBufferPool creates a new BufferPool bounded to the given size. size defines the number of buffers to be retained in the pool and alloc sets the initial capacity of new buffers to minimize calls to make().

The value of alloc should seek to provide a buffer that is representative of most data written to the the buffer (i.e. 95th percentile) without being overly large (which will increase static memory consumption). You may wish to track the capacity of your last N buffers (i.e. using an []int) prior to returning them to the pool as input into calculating a suitable alloc value.

func (*SizedBufferPool) Get Uses

func (bp *SizedBufferPool) Get() (b *bytes.Buffer)

Get gets a Buffer from the SizedBufferPool, or creates a new one if none are available in the pool. Buffers have a pre-allocated capacity.

func (*SizedBufferPool) Put Uses

func (bp *SizedBufferPool) Put(b *bytes.Buffer)

Put returns the given Buffer to the SizedBufferPool.

Package bpool imports 1 packages (graph) and is imported by 82 packages. Updated 2019-05-31. Refresh now. Tools for package owners.