]> Sergey Matveev's repositories - btrtrc.git/commitdiff
peer_protocol: Use faster form for Integer.{UnmarshalBinary,Read}
authorMatt Joiner <anacrolix@gmail.com>
Thu, 30 Sep 2021 00:24:03 +0000 (10:24 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Thu, 30 Sep 2021 00:24:03 +0000 (10:24 +1000)
peer_protocol/decoder.go
peer_protocol/int.go

index decc8e8ffa5597352f3553f3e3aa17788ddd9783..cba8dd087a0c71de35776bdbf195d2125e548f74 100644 (file)
@@ -20,7 +20,7 @@ type Decoder struct {
 // io.EOF is returned if the source terminates cleanly on a message boundary.
 func (d *Decoder) Decode(msg *Message) (err error) {
        var length Integer
-       err = length.ReadFrom(d.R)
+       err = length.Read(d.R)
        if err != nil {
                return fmt.Errorf("reading message length: %w", err)
        }
index 28191ee82600d7bca1b4f382674bf2b691c7998e..80fb6624d7bcd3ef148141ec5885a663f6950699 100644 (file)
@@ -1,27 +1,27 @@
 package peer_protocol
 
 import (
-       "bytes"
        "encoding/binary"
        "io"
+
+       "github.com/pkg/errors"
 )
 
 type Integer uint32
 
-func (i *Integer) Read(r io.Reader) error {
-       return binary.Read(r, binary.BigEndian, i)
-}
-
 func (i *Integer) UnmarshalBinary(b []byte) error {
-       return i.Read(bytes.NewReader(b))
+       if len(b) != 4 {
+               return errors.New("expected 4 bytes")
+       }
+       *i = Integer(binary.BigEndian.Uint32(b))
+       return nil
 }
 
-func (i *Integer) ReadFrom(r io.Reader) error {
+func (i *Integer) Read(r io.Reader) error {
        var b [4]byte
        n, err := r.Read(b[:])
        if n == 4 {
-               *i = Integer(binary.BigEndian.Uint32(b[:]))
-               return nil
+               return i.UnmarshalBinary(b[:])
        }
        if err == nil {
                return io.ErrUnexpectedEOF