]> Sergey Matveev's repositories - btrtrc.git/blob - torrent-piece-request-order.go
Drop support for go 1.20
[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         if t.storage == nil {
9                 return
10         }
11         if ro, ok := t.cl.pieceRequestOrder[t.clientPieceRequestOrderKey()]; ok {
12                 ro.Update(
13                         t.pieceRequestOrderKey(pieceIndex),
14                         t.requestStrategyPieceOrderState(pieceIndex))
15         }
16 }
17
18 func (t *Torrent) clientPieceRequestOrderKey() interface{} {
19         if t.storage.Capacity == nil {
20                 return t
21         }
22         return t.storage.Capacity
23 }
24
25 func (t *Torrent) deletePieceRequestOrder() {
26         if t.storage == nil {
27                 return
28         }
29         cpro := t.cl.pieceRequestOrder
30         key := t.clientPieceRequestOrderKey()
31         pro := cpro[key]
32         for i := 0; i < t.numPieces(); i++ {
33                 pro.Delete(t.pieceRequestOrderKey(i))
34         }
35         if pro.Len() == 0 {
36                 delete(cpro, key)
37         }
38 }
39
40 func (t *Torrent) initPieceRequestOrder() {
41         if t.storage == nil {
42                 return
43         }
44         if t.cl.pieceRequestOrder == nil {
45                 t.cl.pieceRequestOrder = make(map[interface{}]*request_strategy.PieceRequestOrder)
46         }
47         key := t.clientPieceRequestOrderKey()
48         cpro := t.cl.pieceRequestOrder
49         if cpro[key] == nil {
50                 cpro[key] = request_strategy.NewPieceOrder(request_strategy.NewAjwernerBtree(), t.numPieces())
51         }
52 }
53
54 func (t *Torrent) addRequestOrderPiece(i int) {
55         if t.storage == nil {
56                 return
57         }
58         t.cl.pieceRequestOrder[t.clientPieceRequestOrderKey()].Add(
59                 t.pieceRequestOrderKey(i),
60                 t.requestStrategyPieceOrderState(i))
61 }
62
63 func (t *Torrent) getPieceRequestOrder() *request_strategy.PieceRequestOrder {
64         return t.cl.pieceRequestOrder[t.clientPieceRequestOrderKey()]
65 }