faster writer

This commit is contained in:
Josh Baker 2016-08-20 07:23:16 -07:00
parent 51b9ffb439
commit 142cd0b96f
1 changed files with 23 additions and 24 deletions

View File

@ -1,7 +1,6 @@
package redcon package redcon
import ( import (
"bytes"
"errors" "errors"
"io" "io"
"net" "net"
@ -319,28 +318,28 @@ var errClosed = errors.New("closed")
type respWriter struct { type respWriter struct {
w io.Writer w io.Writer
b *bytes.Buffer b []byte
err error err error
} }
func newWriter(w io.Writer) *respWriter { func newWriter(w io.Writer) *respWriter {
return &respWriter{w: w, b: &bytes.Buffer{}} return &respWriter{w: w, b: make([]byte, 0, 256)}
} }
func (w *respWriter) WriteNull() error { func (w *respWriter) WriteNull() error {
if w.err != nil { if w.err != nil {
return w.err return w.err
} }
w.b.WriteString("$-1\r\n") w.b = append(w.b, '$', '-', '1', '\r', '\n')
return nil return nil
} }
func (w *respWriter) WriteMultiBulkStart(count int) error { func (w *respWriter) WriteMultiBulkStart(count int) error {
if w.err != nil { if w.err != nil {
return w.err return w.err
} }
w.b.WriteByte('*') w.b = append(w.b, '*')
w.b.WriteString(strconv.FormatInt(int64(count), 10)) w.b = append(w.b, []byte(strconv.FormatInt(int64(count), 10))...)
w.b.WriteString("\r\n") w.b = append(w.b, '\r', '\n')
return nil return nil
} }
@ -348,11 +347,11 @@ func (w *respWriter) WriteBulk(bulk string) error {
if w.err != nil { if w.err != nil {
return w.err return w.err
} }
w.b.WriteByte('$') w.b = append(w.b, '$')
w.b.WriteString(strconv.FormatInt(int64(len(bulk)), 10)) w.b = append(w.b, []byte(strconv.FormatInt(int64(len(bulk)), 10))...)
w.b.WriteString("\r\n") w.b = append(w.b, '\r', '\n')
w.b.WriteString(bulk) w.b = append(w.b, []byte(bulk)...)
w.b.WriteString("\r\n") w.b = append(w.b, '\r', '\n')
return nil return nil
} }
@ -360,14 +359,14 @@ func (w *respWriter) Flush() error {
if w.err != nil { if w.err != nil {
return w.err return w.err
} }
if w.b.Len() == 0 { if len(w.b) == 0 {
return nil return nil
} }
if _, err := w.b.WriteTo(w.w); err != nil { if _, err := w.w.Write(w.b); err != nil {
w.err = err w.err = err
return err return err
} }
w.b.Reset() w.b = w.b[:0]
return nil return nil
} }
@ -387,9 +386,9 @@ func (w *respWriter) WriteError(msg string) error {
if w.err != nil { if w.err != nil {
return w.err return w.err
} }
w.b.WriteByte('-') w.b = append(w.b, '-')
w.b.WriteString(msg) w.b = append(w.b, []byte(msg)...)
w.b.WriteString("\r\n") w.b = append(w.b, '\r', '\n')
return nil return nil
} }
@ -397,9 +396,9 @@ func (w *respWriter) WriteString(msg string) error {
if w.err != nil { if w.err != nil {
return w.err return w.err
} }
w.b.WriteByte('+') w.b = append(w.b, '+')
w.b.WriteString(msg) w.b = append(w.b, []byte(msg)...)
w.b.WriteString("\r\n") w.b = append(w.b, '\r', '\n')
return nil return nil
} }
@ -407,9 +406,9 @@ func (w *respWriter) WriteInt(num int) error {
if w.err != nil { if w.err != nil {
return w.err return w.err
} }
w.b.WriteByte(':') w.b = append(w.b, ':')
w.b.WriteString(strconv.FormatInt(int64(num), 10)) w.b = append(w.b, []byte(strconv.FormatInt(int64(num), 10))...)
w.b.WriteString("\r\n") w.b = append(w.b, '\r', '\n')
return nil return nil
} }