|
|
@@ -17,7 +17,9 @@ type Queue struct {
|
|
|
|
|
|
// New constructs and returns a new Queue.
|
|
|
func New() *Queue {
|
|
|
- return &Queue{buf: make([]interface{}, minQueueLen)}
|
|
|
+ return &Queue{
|
|
|
+ buf: make([]interface{}, minQueueLen),
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// Length returns the number of elements currently stored in the queue.
|
|
|
@@ -25,6 +27,8 @@ func (q *Queue) Length() int {
|
|
|
return q.count
|
|
|
}
|
|
|
|
|
|
+// resizes the queue to fit exactly twice its current contents
|
|
|
+// this can result in shrinking if the queue is less than half-full
|
|
|
func (q *Queue) resize() {
|
|
|
newBuf := make([]interface{}, q.count*2)
|
|
|
|
|
|
@@ -63,7 +67,7 @@ func (q *Queue) Peek() interface{} {
|
|
|
// Get returns the element at index i in the queue. If the index is
|
|
|
// invalid, the call will panic.
|
|
|
func (q *Queue) Get(i int) interface{} {
|
|
|
- if i >= q.count || i < 0 {
|
|
|
+ if i < 0 || i >= q.count {
|
|
|
panic("queue: Get() called with index out of range")
|
|
|
}
|
|
|
return q.buf[(q.head+i)%len(q.buf)]
|
|
|
@@ -78,7 +82,7 @@ func (q *Queue) Remove() {
|
|
|
q.buf[q.head] = nil
|
|
|
q.head = (q.head + 1) % len(q.buf)
|
|
|
q.count--
|
|
|
- if len(q.buf) > minQueueLen && q.count*4 <= len(q.buf) {
|
|
|
+ if len(q.buf) > minQueueLen && q.count*4 == len(q.buf) {
|
|
|
q.resize()
|
|
|
}
|
|
|
}
|