4 g "github.com/anacrolix/generics"
5 "github.com/anacrolix/torrent/metainfo"
6 request_strategy "github.com/anacrolix/torrent/request-strategy"
7 "github.com/anacrolix/torrent/storage"
10 type requestStrategyInput struct {
12 capFunc storage.TorrentCapacity
15 func (r requestStrategyInput) Torrent(ih metainfo.Hash) request_strategy.Torrent {
16 return requestStrategyTorrent{g.MapMustGet(r.cl.torrents, ih)}
19 func (r requestStrategyInput) Capacity() (int64, bool) {
26 func (r requestStrategyInput) MaxUnverifiedBytes() int64 {
27 return r.cl.config.MaxUnverifiedBytes
30 var _ request_strategy.Input = requestStrategyInput{}
32 // Returns what is necessary to run request_strategy.GetRequestablePieces for primaryTorrent.
33 func (cl *Client) getRequestStrategyInput(primaryTorrent *Torrent) (input request_strategy.Input) {
34 return requestStrategyInput{
36 capFunc: primaryTorrent.storage.Capacity,
40 func (t *Torrent) getRequestStrategyInput() request_strategy.Input {
41 return t.cl.getRequestStrategyInput(t)
44 type requestStrategyTorrent struct {
48 func (r requestStrategyTorrent) Piece(i int) request_strategy.Piece {
49 return (*requestStrategyPiece)(r.t.piece(i))
52 func (r requestStrategyTorrent) PieceLength() int64 {
53 return r.t.info.PieceLength
56 var _ request_strategy.Torrent = requestStrategyTorrent{}
58 type requestStrategyPiece Piece
60 func (r *requestStrategyPiece) Request() bool {
61 return !r.t.ignorePieceForRequests(r.index)
64 func (r *requestStrategyPiece) NumPendingChunks() int {
65 return int(r.t.pieceNumPendingChunks(r.index))
68 var _ request_strategy.Piece = (*requestStrategyPiece)(nil)