Documentation ¶
Overview ¶
Package buf provides `BufferedChan` that is more efficient than `chan []interface{}`.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type BufferedChan ¶
type BufferedChan struct {
// contains filtered or unexported fields
}
BufferedChan behaves like a `chan []interface{}` (See thread safety for restrictions), but is most efficient as it uses internally a channel of []interface{}. This reduces the number of reads and writes to the channel. Instead of having one write and one read for each value for a regular channel, there are one write and one read for each `bufferSize` value. Thread safety:
- `BufferedChan.Put` cannot be called concurrently.
- `BufferedChan.Get` cannot be called concurrently.
- `BufferedChan.Put` can be called while another goroutine calls `BufferedChan.Get`.
func NewBufferedChan ¶
func NewBufferedChan(ctx context.Context, chanSize int, bufferSize int) *BufferedChan
NewBufferedChan creates a new instance of `BufferedChan`. `ctx` can be used to cancel all Put and Get operations.
func (*BufferedChan) Get ¶
func (c *BufferedChan) Get() (interface{}, bool)
Get gets the value and returns false when the channel is closed and all
values were read.
Cannot be called concurrently.
func (*BufferedChan) Put ¶
func (c *BufferedChan) Put(value interface{}) bool
Put puts a new value into c. Cannot be called concurrently. Returns false when BufferedChan is cancelled.
func (*BufferedChan) WaitForValue ¶
func (c *BufferedChan) WaitForValue() bool
WaitForValue waits until a value is available for Get or until Close is called or when the context is Done Returns true if a value is available, false otherwise