github.com/go-graphite/carbonapi@v0.17.0/expr/types/metricheap.go (about)

     1  package types
     2  
     3  type MetricHeapElement struct {
     4  	Idx int
     5  	Val float64
     6  }
     7  
     8  type MetricHeap []MetricHeapElement
     9  
    10  func (m MetricHeap) Len() int           { return len(m) }
    11  func (m MetricHeap) Swap(i, j int)      { m[i], m[j] = m[j], m[i] }
    12  func (m MetricHeap) Less(i, j int) bool { return m[i].Val < m[j].Val }
    13  
    14  // Push pushes data to MetricHeap
    15  func (m *MetricHeap) Push(x interface{}) {
    16  	*m = append(*m, x.(MetricHeapElement))
    17  }
    18  
    19  // Pop pops out data from MetricHeap
    20  func (m *MetricHeap) Pop() interface{} {
    21  	old := *m
    22  	n := len(old)
    23  	x := old[n-1]
    24  	*m = old[0 : n-1]
    25  	return x
    26  }