1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- package buffer
- import (
- "io"
- )
- // Writer implements an io.Writer over a byte slice.
- type Writer struct {
- buf []byte
- err error
- expand bool
- }
- // NewWriter returns a new Writer for a given byte slice.
- func NewWriter(buf []byte) *Writer {
- return &Writer{
- buf: buf,
- expand: true,
- }
- }
- // NewStaticWriter returns a new Writer for a given byte slice. It does not reallocate and expand the byte-slice.
- func NewStaticWriter(buf []byte) *Writer {
- return &Writer{
- buf: buf,
- expand: false,
- }
- }
- // Write writes bytes from the given byte slice and returns the number of bytes written and an error if occurred. When err != nil, n == 0.
- func (w *Writer) Write(b []byte) (int, error) {
- n := len(b)
- end := len(w.buf)
- if end+n > cap(w.buf) {
- if !w.expand {
- w.err = io.EOF
- return 0, io.EOF
- }
- buf := make([]byte, end, 2*cap(w.buf)+n)
- copy(buf, w.buf)
- w.buf = buf
- }
- w.buf = w.buf[:end+n]
- return copy(w.buf[end:], b), nil
- }
- // Len returns the length of the underlying byte slice.
- func (w *Writer) Len() int {
- return len(w.buf)
- }
- // Bytes returns the underlying byte slice.
- func (w *Writer) Bytes() []byte {
- return w.buf
- }
- // Reset empties and reuses the current buffer. Subsequent writes will overwrite the buffer, so any reference to the underlying slice is invalidated after this call.
- func (w *Writer) Reset() {
- w.buf = w.buf[:0]
- }
- // Close returns the last error.
- func (w *Writer) Close() error {
- return w.err
- }
|