58 lines
873 B
Go
58 lines
873 B
Go
|
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
|
||
|
}
|