]> Sergey Matveev's repositories - btrtrc.git/blob - torrent-piece-request-order.go
Don't group Torrent piece request orders without a storage capacity together
[btrtrc.git] / torrent-piece-request-order.go
1 package torrent
2
3 import (
4         request_strategy "github.com/anacrolix/torrent/request-strategy"
5 )
6
7 func (t *Torrent) updatePieceRequestOrder(pieceIndex int) {
8         t.cl.pieceRequestOrder[t.clientPieceRequestOrderKey()].Update(
9                 t.pieceRequestOrderKey(pieceIndex),
10                 t.requestStrategyPieceOrderState(pieceIndex))
11 }
12
13 func (t *Torrent) clientPieceRequestOrderKey() interface{} {
14         if t.storage.Capacity == nil {
15                 return t
16         }
17         return t.storage.Capacity
18 }
19
20 func (t *Torrent) deletePieceRequestOrder() {
21         cpro := t.cl.pieceRequestOrder
22         key := t.clientPieceRequestOrderKey()
23         pro := cpro[key]
24         for i := 0; i < t.numPieces(); i++ {
25                 pro.Delete(t.pieceRequestOrderKey(i))
26         }
27         if pro.Len() == 0 {
28                 delete(cpro, key)
29         }
30 }
31
32 func (t *Torrent) initPieceRequestOrder() {
33         if t.cl.pieceRequestOrder == nil {
34                 t.cl.pieceRequestOrder = make(map[interface{}]*request_strategy.PieceRequestOrder)
35         }
36         key := t.clientPieceRequestOrderKey()
37         cpro := t.cl.pieceRequestOrder
38         if cpro[key] == nil {
39                 cpro[key] = request_strategy.NewPieceOrder()
40         }
41 }
42
43 func (t *Torrent) addRequestOrderPiece(i int) {
44         t.cl.pieceRequestOrder[t.clientPieceRequestOrderKey()].Add(
45                 t.pieceRequestOrderKey(i),
46                 t.requestStrategyPieceOrderState(i))
47 }
48
49 func (t *Torrent) getPieceRequestOrder() *request_strategy.PieceRequestOrder {
50         return t.cl.pieceRequestOrder[t.clientPieceRequestOrderKey()]
51 }