7 "github.com/anacrolix/torrent/metainfo"
15 func (me *data) pieceHashHex(i int) string {
16 return hex.EncodeToString(me.info.Pieces[i*20 : (i+1)*20])
19 func (me *data) Close() {}
21 // TODO: Make sure that reading completed can't read from incomplete. Then
22 // also it'll be possible to verify that the Content-Range on completed
23 // returns the correct piece length so there aren't short reads.
25 func (me *data) ReadAt(b []byte, off int64) (n int, err error) {
27 if off >= me.info.TotalLength() {
31 p := me.info.Piece(int(off / me.info.PieceLength))
33 maxN1 := int(p.Length() - off%me.info.PieceLength)
38 n1, err = me.store.pieceReadAt(p, b1, off%me.info.PieceLength)
49 // TODO: Rewrite this later, on short writes to a piece it will start to play up.
50 func (me *data) WriteAt(p []byte, off int64) (n int, err error) {
51 i := int(off / me.info.PieceLength)
52 off %= me.info.PieceLength
55 maxN := me.info.Piece(i).Length() - off
56 if int64(len(p1)) > maxN {
60 n1, err = me.store.pieceWriteAt(me.info.Piece(i), p1, off)
72 func (me *data) pieceReader(p metainfo.Piece, off int64) (ret io.ReadCloser, err error) {
73 return me.store.getPieceRange(p, off, p.Length()-off)
76 func (me *data) PieceCompleted(index int) (err error) {
77 return me.store.pieceCompleted(me.info.Piece(index))
80 func (me *data) PieceComplete(piece int) bool {
81 return me.store.pieceComplete(me.info.Piece(piece))