/bsbuffer

BSBuffer: B - Blocking - Read() calls are blocking. S - Safe - Supports arbitrary amount of readers and writers. Could be unblocked and turned into SBuffer. "Smart data structures and dumb code works a lot better than the other way around."(c)

Primary LanguageGoGNU Lesser General Public License v3.0LGPL-3.0

bsbuffer

import "github.com/SergeyFrolov/bsbuffer"

No packages beyond the Go standard library are imported.

bsbuffer.go

type BSBuffer struct {
    sync.Mutex
    // contains filtered or unexported fields
}

BSBuffer: B - Blocking - Read() calls are blocking. S - Safe - Supports arbitrary amount of readers and writers. Could be unblocked and turned into SBuffer.

func NewBSBuffer() *BSBuffer

Creates new BSBuffer

func (*BSBuffer) Read

func (b *BSBuffer) Read(p []byte) (n int, err error)

Reads data from the BSBuffer, blocking until a writer arrives or the BSBuffer is unblocked. If the write end is closed with an error, that error is returned as err; otherwise err is EOF. Supports multiple concurrent goroutines and p is valid forever.

func (*BSBuffer) Unblock

func (b *BSBuffer) Unblock()

Turns BSBuffer into SBuffer: Read() is no longer blocking, but still safe. Unblock() is safe to call multiple times.

func (*BSBuffer) Write

func (b *BSBuffer) Write(p []byte) (n int, err error)

Non-blocking write appends the contents of p to the buffer, growing the buffer as needed. The return value n is the length of p; err is always nil. If the buffer becomes too large, Write will panic with ErrTooLarge. Supports multiple concurrent goroutines and p is safe for reuse right away.


Generated by godoc2ghmd