]> Sergey Matveev's repositories - btrtrc.git/blobdiff - request-strategy/piece-request-order.go
Some optimizations in PieceRequestOrder.Update and item comparisons
[btrtrc.git] / request-strategy / piece-request-order.go
index d906b83595e584b03959578dba37a6e7ac2b4f97..c9a89663706c20dc20ea458d855e5edeceaca364 100644 (file)
@@ -37,16 +37,7 @@ type pieceRequestOrderItem struct {
 
 func (me *pieceRequestOrderItem) Less(other btree.Item) bool {
        otherConcrete := other.(*pieceRequestOrderItem)
-       return pieceOrderLess(
-               pieceOrderInput{
-                       PieceRequestOrderState: me.state,
-                       PieceRequestOrderKey:   me.key,
-               },
-               pieceOrderInput{
-                       PieceRequestOrderState: otherConcrete.state,
-                       PieceRequestOrderKey:   otherConcrete.key,
-               },
-       ).Less()
+       return pieceOrderLess(me, otherConcrete).Less()
 }
 
 func (me *PieceRequestOrder) Add(key PieceRequestOrderKey, state PieceRequestOrderState) {
@@ -63,10 +54,17 @@ func (me *PieceRequestOrder) Add(key PieceRequestOrderKey, state PieceRequestOrd
 }
 
 func (me *PieceRequestOrder) Update(key PieceRequestOrderKey, state PieceRequestOrderState) {
-       item := me.existingItemForKey(key)
-       if item.state == state {
+       oldState, ok := me.keys[key]
+       if !ok {
+               panic("key should have been added already")
+       }
+       if state == oldState {
                return
        }
+       item := pieceRequestOrderItem{
+               key:   key,
+               state: oldState,
+       }
        if me.tree.Delete(&item) == nil {
                panic(fmt.Sprintf("%#v", key))
        }