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 }