Remove our own buffered Reader interface in favor of bufio.Reader

This commit is contained in:
Jack Palevich 2012-09-15 19:39:35 -07:00
parent b4ca4a1e0b
commit 9b44363a13

View file

@ -15,12 +15,6 @@ import (
"strconv" "strconv"
) )
type Reader interface {
io.Reader
ReadByte() (c byte, err error)
UnreadByte() error
}
// Parser // Parser
// //
// Implements parsing but not the actions. Those are // Implements parsing but not the actions. Those are
@ -57,7 +51,7 @@ type Builder interface {
Flush() Flush()
} }
func collectInt(r Reader, delim byte) (buf []byte, err error) { func collectInt(r *bufio.Reader, delim byte) (buf []byte, err error) {
for { for {
var c byte var c byte
c, err = r.ReadByte() c, err = r.ReadByte()
@ -76,7 +70,7 @@ func collectInt(r Reader, delim byte) (buf []byte, err error) {
return return
} }
func decodeInt64(r Reader, delim byte) (data int64, err error) { func decodeInt64(r *bufio.Reader, delim byte) (data int64, err error) {
buf, err := collectInt(r, delim) buf, err := collectInt(r, delim)
if err != nil { if err != nil {
return return
@ -85,7 +79,7 @@ func decodeInt64(r Reader, delim byte) (data int64, err error) {
return return
} }
func decodeString(r Reader) (data string, err error) { func decodeString(r *bufio.Reader) (data string, err error) {
length, err := decodeInt64(r, ':') length, err := decodeInt64(r, ':')
if err != nil { if err != nil {
return return
@ -103,7 +97,7 @@ func decodeString(r Reader) (data string, err error) {
return return
} }
func parseFromReader(r Reader, build Builder) (err error) { func parseFromReader(r *bufio.Reader, build Builder) (err error) {
c, err := r.ReadByte() c, err := r.ReadByte()
if err != nil { if err != nil {
goto exit goto exit
@ -202,9 +196,5 @@ exit:
// Parse parses the bencode stream and makes calls to // Parse parses the bencode stream and makes calls to
// the builder to construct a parsed representation. // the builder to construct a parsed representation.
func parse(r io.Reader, builder Builder) (err error) { func parse(r io.Reader, builder Builder) (err error) {
rr, ok := r.(Reader) return parseFromReader(bufio.NewReader(r), builder)
if !ok {
rr = bufio.NewReader(r)
}
return parseFromReader(rr, builder)
} }