4 g "github.com/anacrolix/generics"
6 request_strategy "github.com/anacrolix/torrent/request-strategy"
9 func (t *Torrent) updatePieceRequestOrderPiece(pieceIndex int) {
13 pro, ok := t.cl.pieceRequestOrder[t.clientPieceRequestOrderKey()]
17 key := t.pieceRequestOrderKey(pieceIndex)
18 if t.hasStorageCap() {
19 pro.Update(key, t.requestStrategyPieceOrderState(pieceIndex))
22 pending := !t.ignorePieceForRequests(pieceIndex)
24 pro.Add(key, t.requestStrategyPieceOrderState(pieceIndex))
30 func (t *Torrent) clientPieceRequestOrderKey() interface{} {
31 if t.storage.Capacity == nil {
34 return t.storage.Capacity
37 func (t *Torrent) deletePieceRequestOrder() {
41 cpro := t.cl.pieceRequestOrder
42 key := t.clientPieceRequestOrderKey()
44 for i := 0; i < t.numPieces(); i++ {
45 pro.Delete(t.pieceRequestOrderKey(i))
52 func (t *Torrent) initPieceRequestOrder() {
56 g.MakeMapIfNil(&t.cl.pieceRequestOrder)
57 key := t.clientPieceRequestOrderKey()
58 cpro := t.cl.pieceRequestOrder
60 cpro[key] = request_strategy.NewPieceOrder(request_strategy.NewAjwernerBtree(), t.numPieces())
64 func (t *Torrent) addRequestOrderPiece(i int) {
68 pro := t.getPieceRequestOrder()
69 key := t.pieceRequestOrderKey(i)
70 if t.hasStorageCap() || !t.ignorePieceForRequests(i) {
71 pro.Add(key, t.requestStrategyPieceOrderState(i))
75 func (t *Torrent) getPieceRequestOrder() *request_strategy.PieceRequestOrder {
76 return t.cl.pieceRequestOrder[t.clientPieceRequestOrderKey()]