2
0
mirror of synced 2025-02-23 22:28:11 +00:00

A type for heapifying worst performing conns

This commit is contained in:
Matt Joiner 2014-08-28 08:04:41 +10:00
parent 89be570636
commit 8f89d030cc

37
worst_conns.go Normal file
View File

@ -0,0 +1,37 @@
package torrent
import (
"time"
)
type worstConnsHeap []*connection
func (me worstConnsHeap) Len() int { return len(me) }
func (me worstConnsHeap) Swap(i, j int) { me[i], me[j] = me[j], me[i] }
func (me worstConnsHeap) last(c *connection) (ret time.Time) {
ret = c.lastUsefulChunkReceived
if !ret.IsZero() {
return
}
ret = c.completedHandshake
if time.Now().Sub(ret) >= 3*time.Minute {
return
}
ret = time.Now().Add(-3 * time.Minute)
return
}
func (me worstConnsHeap) Less(i, j int) bool {
return me.last(me[i]).Before(me.last(me[j]))
}
func (me *worstConnsHeap) Pop() (ret interface{}) {
old := *me
n := len(old)
ret = old[n-1]
*me = old[:n-1]
return
}
func (me *worstConnsHeap) Push(x interface{}) {
*me = append(*me, x.(*connection))
}