From 1a4fbed1acc25c0b78d9f174abb2f04a8c03f7bb Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Mon, 19 Oct 2015 01:31:34 +1100 Subject: [PATCH] Make Piece a concrete type There was a lot of allocations occuring because it was an interface. --- metainfo/metainfo.go | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) 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 {