bencode.Encoder: Unembed the Writer and wrap it in a minimal interface
I won't remove the bufio.Buffer for Marshal now, it isn't a performance issue as far as I can tell, and I'd have to fake Flush().
This commit is contained in:
parent
ac3b40ace3
commit
727d002e5a
|
@ -113,7 +113,7 @@ type Unmarshaler interface {
|
|||
// error if any.
|
||||
func Marshal(v interface{}) ([]byte, error) {
|
||||
var buf bytes.Buffer
|
||||
e := Encoder{Writer: bufio.NewWriter(&buf)}
|
||||
e := Encoder{w: bufio.NewWriter(&buf)}
|
||||
err := e.Encode(v)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
@ -133,5 +133,5 @@ func NewDecoder(r io.Reader) *Decoder {
|
|||
}
|
||||
|
||||
func NewEncoder(w io.Writer) *Encoder {
|
||||
return &Encoder{Writer: bufio.NewWriter(w)}
|
||||
return &Encoder{w: bufio.NewWriter(w)}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package bencode
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"io"
|
||||
"reflect"
|
||||
"runtime"
|
||||
"sort"
|
||||
|
@ -16,7 +16,11 @@ func is_empty_value(v reflect.Value) bool {
|
|||
}
|
||||
|
||||
type Encoder struct {
|
||||
*bufio.Writer
|
||||
w interface {
|
||||
Flush() error
|
||||
io.Writer
|
||||
WriteString(string) (int, error)
|
||||
}
|
||||
scratch [64]byte
|
||||
}
|
||||
|
||||
|
@ -37,7 +41,7 @@ func (e *Encoder) Encode(v interface{}) (err error) {
|
|||
}
|
||||
}()
|
||||
e.reflect_value(reflect.ValueOf(v))
|
||||
return e.Flush()
|
||||
return e.w.Flush()
|
||||
}
|
||||
|
||||
type string_values []reflect.Value
|
||||
|
@ -48,14 +52,14 @@ func (sv string_values) Less(i, j int) bool { return sv.get(i) < sv.get(j) }
|
|||
func (sv string_values) get(i int) string { return sv[i].String() }
|
||||
|
||||
func (e *Encoder) write(s []byte) {
|
||||
_, err := e.Write(s)
|
||||
_, err := e.w.Write(s)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func (e *Encoder) write_string(s string) {
|
||||
_, err := e.WriteString(s)
|
||||
_, err := e.w.WriteString(s)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue