package v2 import ( "github.com/Workiva/go-datastructures/queue" ) // Event is the type that can be added to the priority queue. type Event queue.Item type priority interface { Compare(other queue.Item) int Priority() int } type priorityLow struct{} type priorityNormal struct{} type priorityHigh struct{} func (p priorityLow) Priority() int { return 1 } func (p priorityNormal) Priority() int { return 2 } func (p priorityHigh) Priority() int { return 3 } func (p priorityLow) Compare(other queue.Item) int { op := other.(priority) if p.Priority() > op.Priority() { return 1 } else if p.Priority() == op.Priority() { return 0 } return -1 } func (p priorityNormal) Compare(other queue.Item) int { op := other.(priority) if p.Priority() > op.Priority() { return 1 } else if p.Priority() == op.Priority() { return 0 } return -1 } func (p priorityHigh) Compare(other queue.Item) int { op := other.(priority) if p.Priority() > op.Priority() { return 1 } else if p.Priority() == op.Priority() { return 0 } return -1 } type noOpEvent struct { priorityLow } var noOp = noOpEvent{}