github.com/neatlab/neatio@v1.7.3-0.20220425043230-d903e92fcc75/utilities/common/prque/prque.go (about) 1 package prque 2 3 import ( 4 "container/heap" 5 ) 6 7 type Prque struct { 8 cont *sstack 9 } 10 11 func New(setIndex setIndexCallback) *Prque { 12 return &Prque{newSstack(setIndex)} 13 } 14 15 func (p *Prque) Push(data interface{}, priority int64) { 16 heap.Push(p.cont, &item{data, priority}) 17 } 18 19 func (p *Prque) Pop() (interface{}, int64) { 20 item := heap.Pop(p.cont).(*item) 21 return item.value, item.priority 22 } 23 24 func (p *Prque) PopItem() interface{} { 25 return heap.Pop(p.cont).(*item).value 26 } 27 28 func (p *Prque) Remove(i int) interface{} { 29 if i < 0 { 30 return nil 31 } 32 return heap.Remove(p.cont, i) 33 } 34 35 func (p *Prque) Empty() bool { 36 return p.cont.Len() == 0 37 } 38 39 func (p *Prque) Size() int { 40 return p.cont.Len() 41 } 42 43 func (p *Prque) Reset() { 44 *p = *New(p.cont.setIndex) 45 }