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, tailBufferEndBUFFER_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, uncheckedTailInsertbufferEnd, bufferFirst, bufferLast, bufferLast, bufferLastOffset, bufferOffset, bufferStartLocalQueue(SharedDeque queue)
queue - The shared queue to which this local ssb will append
its buffers (when full or flushed).public void resetLocal()
LocalSSBresetLocal in class LocalSSBprotected 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).