aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/jackc/pgx/chunkreader/chunkreader.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/jackc/pgx/chunkreader/chunkreader.go')
-rw-r--r--vendor/github.com/jackc/pgx/chunkreader/chunkreader.go89
1 files changed, 0 insertions, 89 deletions
diff --git a/vendor/github.com/jackc/pgx/chunkreader/chunkreader.go b/vendor/github.com/jackc/pgx/chunkreader/chunkreader.go
deleted file mode 100644
index f8d437b..0000000
--- a/vendor/github.com/jackc/pgx/chunkreader/chunkreader.go
+++ /dev/null
@@ -1,89 +0,0 @@
-package chunkreader
-
-import (
- "io"
-)
-
-type ChunkReader struct {
- r io.Reader
-
- buf []byte
- rp, wp int // buf read position and write position
-
- options Options
-}
-
-type Options struct {
- MinBufLen int // Minimum buffer length
-}
-
-func NewChunkReader(r io.Reader) *ChunkReader {
- cr, err := NewChunkReaderEx(r, Options{})
- if err != nil {
- panic("default options can't be bad")
- }
-
- return cr
-}
-
-func NewChunkReaderEx(r io.Reader, options Options) (*ChunkReader, error) {
- if options.MinBufLen == 0 {
- options.MinBufLen = 4096
- }
-
- return &ChunkReader{
- r: r,
- buf: make([]byte, options.MinBufLen),
- options: options,
- }, nil
-}
-
-// Next returns buf filled with the next n bytes. If an error occurs, buf will
-// be nil.
-func (r *ChunkReader) Next(n int) (buf []byte, err error) {
- // n bytes already in buf
- if (r.wp - r.rp) >= n {
- buf = r.buf[r.rp : r.rp+n]
- r.rp += n
- return buf, err
- }
-
- // available space in buf is less than n
- if len(r.buf) < n {
- r.copyBufContents(r.newBuf(n))
- }
-
- // buf is large enough, but need to shift filled area to start to make enough contiguous space
- minReadCount := n - (r.wp - r.rp)
- if (len(r.buf) - r.wp) < minReadCount {
- newBuf := r.newBuf(n)
- r.copyBufContents(newBuf)
- }
-
- if err := r.appendAtLeast(minReadCount); err != nil {
- return nil, err
- }
-
- buf = r.buf[r.rp : r.rp+n]
- r.rp += n
- return buf, nil
-}
-
-func (r *ChunkReader) appendAtLeast(fillLen int) error {
- n, err := io.ReadAtLeast(r.r, r.buf[r.wp:], fillLen)
- r.wp += n
- return err
-}
-
-func (r *ChunkReader) newBuf(size int) []byte {
- if size < r.options.MinBufLen {
- size = r.options.MinBufLen
- }
- return make([]byte, size)
-}
-
-func (r *ChunkReader) copyBufContents(dest []byte) {
- r.wp = copy(dest, r.buf[r.rp:r.wp])
- r.rp = 0
- r.buf = dest
-}