// +build !go1.3 package pools import ( "bufio" "io" "github.com/docker/docker/pkg/ioutils" ) var ( BufioReader32KPool *BufioReaderPool BufioWriter32KPool *BufioWriterPool ) const buffer32K = 32 * 1024 type BufioReaderPool struct { size int } func init() { BufioReader32KPool = newBufioReaderPoolWithSize(buffer32K) BufioWriter32KPool = newBufioWriterPoolWithSize(buffer32K) } func newBufioReaderPoolWithSize(size int) *BufioReaderPool { return &BufioReaderPool{size: size} } func (bufPool *BufioReaderPool) Get(r io.Reader) *bufio.Reader { return bufio.NewReaderSize(r, bufPool.size) } func (bufPool *BufioReaderPool) Put(b *bufio.Reader) { b.Reset(nil) } func (bufPool *BufioReaderPool) NewReadCloserWrapper(buf *bufio.Reader, r io.Reader) io.ReadCloser { return ioutils.NewReadCloserWrapper(r, func() error { if readCloser, ok := r.(io.ReadCloser); ok { return readCloser.Close() } return nil }) } type BufioWriterPool struct { size int } func newBufioWriterPoolWithSize(size int) *BufioWriterPool { return &BufioWriterPool{size: size} } func (bufPool *BufioWriterPool) Get(w io.Writer) *bufio.Writer { return bufio.NewWriterSize(w, bufPool.size) } func (bufPool *BufioWriterPool) Put(b *bufio.Writer) { b.Reset(nil) } func (bufPool *BufioWriterPool) NewWriteCloserWrapper(buf *bufio.Writer, w io.Writer) io.WriteCloser { return ioutils.NewWriteCloserWrapper(w, func() error { buf.Flush() if writeCloser, ok := w.(io.WriteCloser); ok { return writeCloser.Close() } return nil }) }