4 g "github.com/anacrolix/generics"
5 request_strategy "github.com/anacrolix/torrent/request-strategy"
8 func (t *Torrent) updatePieceRequestOrderPiece(pieceIndex int) {
12 pro, ok := t.cl.pieceRequestOrder[t.clientPieceRequestOrderKey()]
16 key := t.pieceRequestOrderKey(pieceIndex)
17 if t.hasStorageCap() {
18 pro.Update(key, t.requestStrategyPieceOrderState(pieceIndex))
21 pending := !t.ignorePieceForRequests(pieceIndex)
23 pro.Add(key, t.requestStrategyPieceOrderState(pieceIndex))
29 func (t *Torrent) clientPieceRequestOrderKey() interface{} {
30 if t.storage.Capacity == nil {
33 return t.storage.Capacity
36 func (t *Torrent) deletePieceRequestOrder() {
40 cpro := t.cl.pieceRequestOrder
41 key := t.clientPieceRequestOrderKey()
43 for i := 0; i < t.numPieces(); i++ {
44 pro.Delete(t.pieceRequestOrderKey(i))
51 func (t *Torrent) initPieceRequestOrder() {
55 g.MakeMapIfNil(&t.cl.pieceRequestOrder)
56 key := t.clientPieceRequestOrderKey()
57 cpro := t.cl.pieceRequestOrder
59 cpro[key] = request_strategy.NewPieceOrder(request_strategy.NewAjwernerBtree(), t.numPieces())
63 func (t *Torrent) addRequestOrderPiece(i int) {
67 pro := t.getPieceRequestOrder()
68 key := t.pieceRequestOrderKey(i)
69 if t.hasStorageCap() || !t.ignorePieceForRequests(i) {
70 pro.Add(key, t.requestStrategyPieceOrderState(i))
74 func (t *Torrent) getPieceRequestOrder() *request_strategy.PieceRequestOrder {
75 return t.cl.pieceRequestOrder[t.clientPieceRequestOrderKey()]