4 Info *Info // Can we embed the fields here instead, or is it something to do with saving memory?
10 func (p Piece) Length() int64 {
13 pieceLength := p.Info.PieceLength
14 lastFileEnd := int64(0)
16 p.Info.FileTree.upvertedFiles(pieceLength, func(fi FileInfo) {
20 fileStartPiece := int(offset / pieceLength)
21 if fileStartPiece > p.i {
25 lastFileEnd = offset + fi.Length
26 offset = (lastFileEnd + pieceLength - 1) / pieceLength * pieceLength
28 ret := min(lastFileEnd-int64(p.i)*pieceLength, pieceLength)
34 if p.i == p.Info.NumPieces()-1 {
35 return p.Info.TotalLength() - int64(p.i)*p.Info.PieceLength
37 return p.Info.PieceLength
40 func (p Piece) Offset() int64 {
41 return int64(p.i) * p.Info.PieceLength
44 func (p Piece) Hash() (ret Hash) {
45 copy(ret[:], p.Info.Pieces[p.i*HashSize:(p.i+1)*HashSize])
49 func (p Piece) Index() int {