Fix comment and golint warning. Move package comment into doc.go
This commit is contained in:
parent
198af482fd
commit
762b7fe760
43
deque.go
43
deque.go
|
@ -1,36 +1,3 @@
|
||||||
/*
|
|
||||||
Package deque provides a fast ring-buffer deque (double-ended queue)
|
|
||||||
implementation.
|
|
||||||
|
|
||||||
Deque generalizes a queue and a stack, to efficiently add and remove items at
|
|
||||||
either end with O(1) performance. Queue (FIFO) operations are supported using
|
|
||||||
PushBack() and PopFront(). Stack (LIFO) operations are supported using
|
|
||||||
PushBack() and PopBack().
|
|
||||||
|
|
||||||
Ring-buffer Performance
|
|
||||||
|
|
||||||
The ring-buffer automatically resizes by
|
|
||||||
powers of two, growing when additional capacity is needed and shrinking when
|
|
||||||
only a quarter of the capacity is used, and uses bitwise arithmetic for all
|
|
||||||
calculations.
|
|
||||||
|
|
||||||
The ring-buffer implementation significantly improves memory and time
|
|
||||||
performance with fewer GC pauses, compared to implementations based on slices
|
|
||||||
and linked lists.
|
|
||||||
|
|
||||||
For maximum speed, this deque implementation leaves concurrency safety up to
|
|
||||||
the application to provide, however the application chooses, if needed at all.
|
|
||||||
|
|
||||||
Reading Empty Deque
|
|
||||||
|
|
||||||
Since it is OK for the deque to contain a nil value, it is necessary to either
|
|
||||||
panic or return a second boolean value to indicate the deque is empty, when
|
|
||||||
reading or removing an element. This deque panics when reading from an empty
|
|
||||||
deque. This is a run-time check to help catch programming errors, which may be
|
|
||||||
missed if a second return value is ignored. Simply check Deque.Len() before
|
|
||||||
reading from the deque.
|
|
||||||
|
|
||||||
*/
|
|
||||||
package deque
|
package deque
|
||||||
|
|
||||||
// minCapacity is the smallest capacity that deque may have.
|
// minCapacity is the smallest capacity that deque may have.
|
||||||
|
@ -129,13 +96,13 @@ func (q *Deque) Back() interface{} {
|
||||||
return q.buf[q.prev(q.tail)]
|
return q.buf[q.prev(q.tail)]
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get returns the element at index i in the queue without removing the element
|
// At returns the element at index i in the queue without removing the element
|
||||||
// from the queue. This method accepts only non-negative index values. get(0)
|
// from the queue. This method accepts only non-negative index values. At(0)
|
||||||
// refers to the first element and is the same as Front(). get(Len()-1) refers
|
// refers to the first element and is the same as Front(). At(Len()-1) refers
|
||||||
// to the last element and is the same as Back(). If the index is invalid, the
|
// to the last element and is the same as Back(). If the index is invalid, the
|
||||||
// call panics.
|
// call panics.
|
||||||
//
|
//
|
||||||
// The purpose of Get is to allow Deque to serve as a more general purpose
|
// The purpose of At is to allow Deque to serve as a more general purpose
|
||||||
// circular buffer, where items are only added to and removed from the the ends
|
// circular buffer, where items are only added to and removed from the the ends
|
||||||
// of the deque, but may be read from any place within the deque. Consider the
|
// of the deque, but may be read from any place within the deque. Consider the
|
||||||
// case of a fixed-size circular log buffer: A new entry is pushed onto one end
|
// case of a fixed-size circular log buffer: A new entry is pushed onto one end
|
||||||
|
@ -143,7 +110,7 @@ func (q *Deque) Back() interface{} {
|
||||||
// in the buffer must be readable without altering the buffer contents.
|
// in the buffer must be readable without altering the buffer contents.
|
||||||
func (q *Deque) At(i int) interface{} {
|
func (q *Deque) At(i int) interface{} {
|
||||||
if i < 0 || i >= q.count {
|
if i < 0 || i >= q.count {
|
||||||
panic("deque: Get() called with index out of range")
|
panic("deque: At() called with index out of range")
|
||||||
}
|
}
|
||||||
// bitwise modulus
|
// bitwise modulus
|
||||||
return q.buf[(q.head+i)&(len(q.buf)-1)]
|
return q.buf[(q.head+i)&(len(q.buf)-1)]
|
||||||
|
|
34
doc.go
Normal file
34
doc.go
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
/*
|
||||||
|
Package deque provides a fast ring-buffer deque (double-ended queue)
|
||||||
|
implementation.
|
||||||
|
|
||||||
|
Deque generalizes a queue and a stack, to efficiently add and remove items at
|
||||||
|
either end with O(1) performance. Queue (FIFO) operations are supported using
|
||||||
|
PushBack() and PopFront(). Stack (LIFO) operations are supported using
|
||||||
|
PushBack() and PopBack().
|
||||||
|
|
||||||
|
Ring-buffer Performance
|
||||||
|
|
||||||
|
The ring-buffer automatically resizes by
|
||||||
|
powers of two, growing when additional capacity is needed and shrinking when
|
||||||
|
only a quarter of the capacity is used, and uses bitwise arithmetic for all
|
||||||
|
calculations.
|
||||||
|
|
||||||
|
The ring-buffer implementation significantly improves memory and time
|
||||||
|
performance with fewer GC pauses, compared to implementations based on slices
|
||||||
|
and linked lists.
|
||||||
|
|
||||||
|
For maximum speed, this deque implementation leaves concurrency safety up to
|
||||||
|
the application to provide, however the application chooses, if needed at all.
|
||||||
|
|
||||||
|
Reading Empty Deque
|
||||||
|
|
||||||
|
Since it is OK for the deque to contain a nil value, it is necessary to either
|
||||||
|
panic or return a second boolean value to indicate the deque is empty, when
|
||||||
|
reading or removing an element. This deque panics when reading from an empty
|
||||||
|
deque. This is a run-time check to help catch programming errors, which may be
|
||||||
|
missed if a second return value is ignored. Simply check Deque.Len() before
|
||||||
|
reading from the deque.
|
||||||
|
|
||||||
|
*/
|
||||||
|
package deque
|
Loading…
Reference in a new issue