github.com/decomp/exp@v0.0.0-20210624183419-6d058f5e1da6/disasm/x86/queue.go (about) 1 package x86 2 3 import "github.com/decomp/exp/bin" 4 5 // queue represents a queue of addresses. 6 type queue struct { 7 // Addresses in the queue. 8 addrs map[bin.Address]bool 9 } 10 11 // newQueue returns a new queue. 12 func newQueue() *queue { 13 return &queue{ 14 addrs: make(map[bin.Address]bool), 15 } 16 } 17 18 // push pushes the given address to the queue. 19 func (q *queue) push(addr bin.Address) { 20 q.addrs[addr] = true 21 } 22 23 // pop pops an address from the queue. 24 func (q *queue) pop() bin.Address { 25 if len(q.addrs) == 0 { 26 panic("invalid call to pop; empty queue") 27 } 28 var min bin.Address 29 for addr := range q.addrs { 30 if min == 0 || addr < min { 31 min = addr 32 } 33 } 34 delete(q.addrs, min) 35 return min 36 } 37 38 // empty reports whether the queue is empty. 39 func (q *queue) empty() bool { 40 return len(q.addrs) == 0 41 }