class LocalQueue extends LocalSSB
Each instance stores word-sized values into a local buffer. When
the buffer is full, or if the flushLocal()
method is
called, the buffer enqueued at the tail of a
SharedDeque
.
The implementation is intended to be as efficient as possible, in
time and space, and is the basis for the TraceBuffer
used by
heap trace generation. Each instance adds a single field to those inherited
from the SSB: a bump pointer.
Preconditions: Buffers are always aligned on buffer-size address
boundaries.
Invariants: Buffers are filled such that tuples (of the specified arity) are packed to the low end of the buffer. Thus buffer underflows will always arise when then cursor is buffer-size aligned.
Modifier and Type | Field and Description |
---|---|
protected Address |
head
the start of the buffer
|
queue, tail, tailBufferEnd
BUFFER_MASK, BUFFER_SIZE, HEAD_INITIAL_VALUE, LOG_PAGES_PER_BUFFER, META_DATA_SIZE, NEXT_FIELD_OFFSET, PAGES_PER_BUFFER, TAIL_INITIAL_VALUE, USABLE_BUFFER_BYTES
Constructor and Description |
---|
LocalQueue(SharedDeque queue)
Constructor
|
Modifier and Type | Method and Description |
---|---|
protected boolean |
checkDequeue(int arity)
Check whether there are values in the buffer for a pending dequeue.
|
private boolean |
dequeueUnderflow(int arity)
There are not sufficient entries in the head buffer for a pending
dequeue.
|
protected boolean |
headStarved(int arity)
The head is empty (or null), and the shared queue has no buffers
available.
|
void |
resetLocal()
Reset the local buffer (throwing away any local entries).
|
protected Address |
uncheckedDequeue()
Dequeue a value from the buffer.
|
bufferSentinel, checkTailInsert, flushLocal, isFlushed, normalizeTail, reset, uncheckedTailInsert
bufferEnd, bufferFirst, bufferLast, bufferLast, bufferLastOffset, bufferOffset, bufferStart
LocalQueue(SharedDeque queue)
queue
- The shared queue to which this local ssb will append
its buffers (when full or flushed).public void resetLocal()
LocalSSB
resetLocal
in class LocalSSB
protected final boolean checkDequeue(int arity)
arity
- The arity of the values stored in this queue: the
buffer must contain enough space for this many words.protected final Address uncheckedDequeue()
checkDequeue()
to ensure the
buffer has and entry to be removed.protected final boolean headStarved(int arity)
arity
- The arity of this bufferprivate boolean dequeueUnderflow(int arity)
arity
- The arity of this buffer (used for sanity test only).