dotcloud/docker

View on GitHub
pkg/ioutils/buffer.go

Summary

Maintainability
A
0 mins
Test Coverage
package ioutils // import "github.com/docker/docker/pkg/ioutils"

import (
    "errors"
    "io"
)

var errBufferFull = errors.New("buffer is full")

type fixedBuffer struct {
    buf      []byte
    pos      int
    lastRead int
}

func (b *fixedBuffer) Write(p []byte) (int, error) {
    n := copy(b.buf[b.pos:cap(b.buf)], p)
    b.pos += n

    if n < len(p) {
        if b.pos == cap(b.buf) {
            return n, errBufferFull
        }
        return n, io.ErrShortWrite
    }
    return n, nil
}

func (b *fixedBuffer) Read(p []byte) (int, error) {
    n := copy(p, b.buf[b.lastRead:b.pos])
    b.lastRead += n
    return n, nil
}

func (b *fixedBuffer) Len() int {
    return b.pos - b.lastRead
}

func (b *fixedBuffer) Cap() int {
    return cap(b.buf)
}

func (b *fixedBuffer) Reset() {
    b.pos = 0
    b.lastRead = 0
    b.buf = b.buf[:0]
}

func (b *fixedBuffer) String() string {
    return string(b.buf[b.lastRead:b.pos])
}