FedP2P/piece.go

45 lines
792 B
Go
Raw Normal View History

2015-04-08 00:14:35 +08:00
package torrent
import (
"math/rand"
"sync"
)
type piecePriority byte
const (
piecePriorityNone piecePriority = iota
piecePriorityNormal
piecePriorityReadahead
piecePriorityNext
piecePriorityNow
)
type piece struct {
Hash pieceSum
PendingChunkSpecs map[chunkSpec]struct{}
Hashing bool
QueuedForHash bool
EverHashed bool
Event sync.Cond
Priority piecePriority
}
func (p *piece) shuffledPendingChunkSpecs() (css []chunkSpec) {
if len(p.PendingChunkSpecs) == 0 {
return
}
css = make([]chunkSpec, 0, len(p.PendingChunkSpecs))
for cs := range p.PendingChunkSpecs {
css = append(css, cs)
}
if len(css) <= 1 {
return
}
for i := range css {
j := rand.Intn(i + 1)
css[i], css[j] = css[j], css[i]
}
return
}