github.com/vipernet-xyz/tm@v0.34.24/blockchain/v2/types.go (about)

     1  package v2
     2  
     3  import (
     4  	"github.com/Workiva/go-datastructures/queue"
     5  )
     6  
     7  // Event is the type that can be added to the priority queue.
     8  type Event queue.Item
     9  
    10  type priority interface {
    11  	Compare(other queue.Item) int
    12  	Priority() int
    13  }
    14  
    15  type priorityLow struct{}
    16  type priorityNormal struct{}
    17  type priorityHigh struct{}
    18  
    19  func (p priorityLow) Priority() int {
    20  	return 1
    21  }
    22  
    23  func (p priorityNormal) Priority() int {
    24  	return 2
    25  }
    26  
    27  func (p priorityHigh) Priority() int {
    28  	return 3
    29  }
    30  
    31  func (p priorityLow) Compare(other queue.Item) int {
    32  	op := other.(priority)
    33  	if p.Priority() > op.Priority() {
    34  		return 1
    35  	} else if p.Priority() == op.Priority() {
    36  		return 0
    37  	}
    38  	return -1
    39  }
    40  
    41  func (p priorityNormal) Compare(other queue.Item) int {
    42  	op := other.(priority)
    43  	if p.Priority() > op.Priority() {
    44  		return 1
    45  	} else if p.Priority() == op.Priority() {
    46  		return 0
    47  	}
    48  	return -1
    49  }
    50  
    51  func (p priorityHigh) Compare(other queue.Item) int {
    52  	op := other.(priority)
    53  	if p.Priority() > op.Priority() {
    54  		return 1
    55  	} else if p.Priority() == op.Priority() {
    56  		return 0
    57  	}
    58  	return -1
    59  }
    60  
    61  type noOpEvent struct {
    62  	priorityLow
    63  }
    64  
    65  var noOp = noOpEvent{}