diff options
Diffstat (limited to 'libgo/go/encoding/binary')
-rw-r--r-- | libgo/go/encoding/binary/binary.go | 2 | ||||
-rw-r--r-- | libgo/go/encoding/binary/binary_test.go | 27 | ||||
-rw-r--r-- | libgo/go/encoding/binary/varint.go | 4 |
3 files changed, 28 insertions, 5 deletions
diff --git a/libgo/go/encoding/binary/binary.go b/libgo/go/encoding/binary/binary.go index a99ca01..a311499 100644 --- a/libgo/go/encoding/binary/binary.go +++ b/libgo/go/encoding/binary/binary.go @@ -306,7 +306,7 @@ func Write(w io.Writer, order ByteOrder, data interface{}) error { case uint8: bs[0] = v case []uint8: - bs = v // TODO(josharian): avoid allocating bs in this case? + bs = v case *int16: order.PutUint16(bs, uint16(*v)) case int16: diff --git a/libgo/go/encoding/binary/binary_test.go b/libgo/go/encoding/binary/binary_test.go index aeb4212..83af89e 100644 --- a/libgo/go/encoding/binary/binary_test.go +++ b/libgo/go/encoding/binary/binary_test.go @@ -8,7 +8,6 @@ import ( "bytes" "fmt" "io" - "io/ioutil" "math" "reflect" "strings" @@ -524,7 +523,7 @@ func BenchmarkWriteStruct(b *testing.B) { b.SetBytes(int64(Size(&s))) b.ResetTimer() for i := 0; i < b.N; i++ { - Write(ioutil.Discard, BigEndian, &s) + Write(io.Discard, BigEndian, &s) } } @@ -706,3 +705,27 @@ func BenchmarkWriteSlice1000Float32s(b *testing.B) { } b.StopTimer() } + +func BenchmarkReadSlice1000Uint8s(b *testing.B) { + bsr := &byteSliceReader{} + slice := make([]uint8, 1000) + buf := make([]byte, len(slice)) + b.SetBytes(int64(len(buf))) + b.ResetTimer() + for i := 0; i < b.N; i++ { + bsr.remain = buf + Read(bsr, BigEndian, slice) + } +} + +func BenchmarkWriteSlice1000Uint8s(b *testing.B) { + slice := make([]uint8, 1000) + buf := new(bytes.Buffer) + var w io.Writer = buf + b.SetBytes(1000) + b.ResetTimer() + for i := 0; i < b.N; i++ { + buf.Reset() + Write(w, BigEndian, slice) + } +} diff --git a/libgo/go/encoding/binary/varint.go b/libgo/go/encoding/binary/varint.go index 38af610..1fa325d 100644 --- a/libgo/go/encoding/binary/varint.go +++ b/libgo/go/encoding/binary/varint.go @@ -62,7 +62,7 @@ func Uvarint(buf []byte) (uint64, int) { var s uint for i, b := range buf { if b < 0x80 { - if i > 9 || i == 9 && b > 1 { + if i >= MaxVarintLen64 || i == MaxVarintLen64-1 && b > 1 { return 0, -(i + 1) // overflow } return x | uint64(b)<<s, i + 1 @@ -112,7 +112,7 @@ func ReadUvarint(r io.ByteReader) (uint64, error) { return x, err } if b < 0x80 { - if i == 9 && b > 1 { + if i == MaxVarintLen64-1 && b > 1 { return x, overflow } return x | uint64(b)<<s, nil |