| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- package torrent
- import (
- g "github.com/anacrolix/generics"
- request_strategy "github.com/anacrolix/torrent/request-strategy"
- )
- func (t *Torrent) updatePieceRequestOrderPiece(pieceIndex int) {
- if t.storage == nil {
- return
- }
- pro, ok := t.cl.pieceRequestOrder[t.clientPieceRequestOrderKey()]
- if !ok {
- return
- }
- key := t.pieceRequestOrderKey(pieceIndex)
- if t.hasStorageCap() {
- pro.Update(key, t.requestStrategyPieceOrderState(pieceIndex))
- return
- }
- pending := !t.ignorePieceForRequests(pieceIndex)
- if pending {
- pro.Add(key, t.requestStrategyPieceOrderState(pieceIndex))
- } else {
- pro.Delete(key)
- }
- }
- func (t *Torrent) clientPieceRequestOrderKey() interface{} {
- if t.storage.Capacity == nil {
- return t
- }
- return t.storage.Capacity
- }
- func (t *Torrent) deletePieceRequestOrder() {
- if t.storage == nil {
- return
- }
- cpro := t.cl.pieceRequestOrder
- key := t.clientPieceRequestOrderKey()
- pro := cpro[key]
- for i := 0; i < t.numPieces(); i++ {
- pro.Delete(t.pieceRequestOrderKey(i))
- }
- if pro.Len() == 0 {
- delete(cpro, key)
- }
- }
- func (t *Torrent) initPieceRequestOrder() {
- if t.storage == nil {
- return
- }
- g.MakeMapIfNil(&t.cl.pieceRequestOrder)
- key := t.clientPieceRequestOrderKey()
- cpro := t.cl.pieceRequestOrder
- if cpro[key] == nil {
- cpro[key] = request_strategy.NewPieceOrder(request_strategy.NewAjwernerBtree(), t.numPieces())
- }
- }
- func (t *Torrent) addRequestOrderPiece(i int) {
- if t.storage == nil {
- return
- }
- pro := t.getPieceRequestOrder()
- key := t.pieceRequestOrderKey(i)
- if t.hasStorageCap() || !t.ignorePieceForRequests(i) {
- pro.Add(key, t.requestStrategyPieceOrderState(i))
- }
- }
- func (t *Torrent) getPieceRequestOrder() *request_strategy.PieceRequestOrder {
- return t.cl.pieceRequestOrder[t.clientPieceRequestOrderKey()]
- }
|