You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
873 B
57 lines
873 B
package bytes |
|
|
|
// Writer writer. |
|
type Writer struct { |
|
n int |
|
buf []byte |
|
} |
|
|
|
// NewWriterSize new a writer with size. |
|
func NewWriterSize(n int) *Writer { |
|
return &Writer{buf: make([]byte, n)} |
|
} |
|
|
|
// Len buff len. |
|
func (w *Writer) Len() int { |
|
return w.n |
|
} |
|
|
|
// Size buff cap. |
|
func (w *Writer) Size() int { |
|
return len(w.buf) |
|
} |
|
|
|
// Reset reset the buff. |
|
func (w *Writer) Reset() { |
|
w.n = 0 |
|
} |
|
|
|
// Buffer return buff. |
|
func (w *Writer) Buffer() []byte { |
|
return w.buf[:w.n] |
|
} |
|
|
|
// Peek peek a buf. |
|
func (w *Writer) Peek(n int) []byte { |
|
var buf []byte |
|
w.grow(n) |
|
buf = w.buf[w.n : w.n+n] |
|
w.n += n |
|
return buf |
|
} |
|
|
|
// Write write a buff. |
|
func (w *Writer) Write(p []byte) { |
|
w.grow(len(p)) |
|
w.n += copy(w.buf[w.n:], p) |
|
} |
|
|
|
func (w *Writer) grow(n int) { |
|
var buf []byte |
|
if w.n+n < len(w.buf) { |
|
return |
|
} |
|
buf = make([]byte, 2*len(w.buf)+n) |
|
copy(buf, w.buf[:w.n]) |
|
w.buf = buf |
|
}
|
|
|