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  }