From: Matt Joiner Date: Sun, 18 Oct 2015 14:31:34 +0000 (+1100) Subject: Make Piece a concrete type X-Git-Tag: v1.0.0~1012 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=1a4fbed1acc25c0b78d9f174abb2f04a8c03f7bb;p=btrtrc.git Make Piece a concrete type There was a lot of allocations occuring because it was an interface. --- diff --git a/metainfo/metainfo.go b/metainfo/metainfo.go index ce3246a5..47fe7de6 100644 --- a/metainfo/metainfo.go +++ b/metainfo/metainfo.go @@ -61,34 +61,28 @@ func (me *Info) NumPieces() int { return len(me.Pieces) / 20 } -type Piece interface { - Hash() []byte - Length() int64 - Offset() int64 -} - -type piece struct { +type Piece struct { Info *Info i int } -func (me piece) Length() int64 { +func (me Piece) Length() int64 { if me.i == me.Info.NumPieces()-1 { return me.Info.TotalLength() - int64(me.i)*me.Info.PieceLength } return me.Info.PieceLength } -func (me piece) Offset() int64 { +func (me Piece) Offset() int64 { return int64(me.i) * me.Info.PieceLength } -func (me piece) Hash() []byte { +func (me Piece) Hash() []byte { return me.Info.Pieces[me.i*20 : (me.i+1)*20] } -func (me *Info) Piece(i int) piece { - return piece{me, i} +func (me *Info) Piece(i int) Piece { + return Piece{me, i} } func (i *Info) IsDir() bool {