58 lines
873 B
Go
Raw Normal View History

2019-04-22 02:59:20 +00:00
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
}