|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES All Classes | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectinfo.monitorenter.util.collections.RingBufferArrayFast
public class RingBufferArrayFast
Fast ringbuffer implementation.
This implementation differs from the RingBufferArray
in one point:
If setBufferSize(int asize)
decreases the size of the buffer and it will get
smaller than the actual amount of elements stored, they will get lost. This avoids the need for
an internal List to store elements overhanging. Some tests may be left out that may speed up this
IRingBuffer
. Adding 5000000 elements was about 25 % faster compared to the
RingBufferArray
on an Athlon 1200, 256 MB RAM.
For allowing high performance single-threaded use this implementation and the implementations of
the retrieveable Iterator
- instances are not synchronized at all.
Nested Class Summary | |
---|---|
protected class |
RingBufferArrayFast.ARingBufferIterator
Base for ringbuffer iterators that has access to the ringbuffer by being an non-static inner class. |
Nested classes/interfaces inherited from interface info.monitorenter.util.collections.IRingBuffer |
---|
IRingBuffer.RingBufferException |
Field Summary | |
---|---|
static boolean |
DEBUG
Flip the switch and you will see how the compiler changes the size of the classfile. |
protected Object[] |
m_buffer
The internal array used as buffer. |
protected boolean |
m_empty
Flag that marks wether this buffer is empty or not. |
protected int |
m_headpointer
The internal index to buffer where the next element is going to be placed (not placed yet!). |
protected int |
m_size
The internal size of the buffer. |
protected int |
m_tailpointer
The internal index to buffer where the next element is going to be read. |
Constructor Summary | |
---|---|
RingBufferArrayFast(int aSize)
Constructs a RingBuffer with the given size. |
Method Summary | |
---|---|
Object |
add(Object anObject)
Adds an element to the ring buffer, potentially removing the first element to make more room. |
void |
clear()
Fast method to clear the buffer - only needs to set three primitive members. |
protected Object |
clone()
|
int |
getBufferSize()
Returns the absolute amount of space in the buffer. |
Object |
getOldest()
Returns the oldest element from the buffer. |
Object |
getYoungest()
Returns the last element added. |
boolean |
isEmpty()
Tests wether no elements are stored in the buffer. |
boolean |
isFull()
Returns true if no more space in the buffer is available. |
Iterator |
iteratorF2L()
Returns an Iterator that will return the elements in exactly the inverse order
the subsequent call to remove() would do. |
Iterator |
iteratorL2F()
Returns an Iterator that will return the elements in exactly the order the
subsequent call to remove() would do. |
Object |
remove()
Removes the oldest element from the buffer. |
Object[] |
removeAll()
Clears the buffer. |
void |
setBufferSize(int newSize)
Sets a new buffer- size. |
int |
size()
Returns the actual amount of elements stored in the buffer. |
String |
toString()
Returns a string representation of the RingBuffer and it's contents. |
Methods inherited from class java.lang.Object |
---|
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
---|
public static final boolean DEBUG
protected Object[] m_buffer
protected boolean m_empty
headpointer | +---+---+---+---+ | 0 | 1 | 2 | 3 | +---+---+---+---+ | tailpointer From where to where are the elements? Where is empty space? empty == true: 0 elements are contained: buffer empty empty == false: 4 elements are contained: buffer full remember: -the headpointer points to the space where the next element will be inserted. -the tailpointer points to the space to read the next element from.
protected int m_headpointer
protected int m_size
For performance reasons the size of the buffer -1!
protected int m_tailpointer
Constructor Detail |
---|
public RingBufferArrayFast(int aSize)
aSize
- the size of the buffer.Method Detail |
---|
public Object add(Object anObject)
add
in interface IRingBuffer
anObject
- the instance to add.
public void clear()
clear
in interface IRingBuffer
IRingBuffer.clear()
public int getBufferSize()
IRingBuffer
getBufferSize
in interface IRingBuffer
IRingBuffer.getBufferSize()
public Object getOldest() throws IRingBuffer.RingBufferException
IRingBuffer
getOldest
in interface IRingBuffer
IRingBuffer.RingBufferException
- if the buffer is empty.IRingBuffer.getOldest()
public Object getYoungest() throws IRingBuffer.RingBufferException
IRingBuffer
getYoungest
in interface IRingBuffer
IRingBuffer.RingBufferException
- if the buffer is empty.IRingBuffer.getYoungest()
public boolean isEmpty()
IRingBuffer
isEmpty
in interface IRingBuffer
IRingBuffer.isEmpty()
public boolean isFull()
IRingBuffer
IRingBuffer.add(Object)
.
isFull
in interface IRingBuffer
IRingBuffer.isFull()
public Iterator iteratorF2L()
Iterator
that will return the elements in exactly the inverse order
the subsequent call to remove()
would do.
The youngest elements are returned first. The Iterator
returned is not
thread- safe!
iteratorF2L
in interface IRingBuffer
Iterator
that will return the elements in exactly the inverse order
the subsequent call to remove()
would do.public Iterator iteratorL2F()
Iterator
that will return the elements in exactly the order the
subsequent call to remove()
would do.
The oldest elements are returned first. The Iterator
returned is not thread-
safe!
iteratorL2F
in interface IRingBuffer
Iterator
that will return the elements in exactly the order the
subsequent call to remove()
would do.public Object remove()
IRingBuffer
remove
in interface IRingBuffer
IRingBuffer.remove()
public Object[] removeAll()
IRingBuffer
removeAll
in interface IRingBuffer
IRingBuffer.removeAll()
public void setBufferSize(int newSize)
A new size is assigned but the elements "overhanging" are returned by the
Object remove()
- method first. This may take time until the buffer has its
actual size again. Don't pretend on calling this method for saving of memory very often as the
whole buffer has to be copied into a new array every time- and if newSize < getSize()
additional the overhanging elements references have to be moved to the internal
List pendingremove
.
setBufferSize
in interface IRingBuffer
newSize
- the new size of the buffer.public int size()
IRingBuffer
size
in interface IRingBuffer
IRingBuffer.size()
public String toString()
Don't call this in your application too often: hard arraycopy - operation an memalloc are triggered.
toString
in class Object
protected Object clone() throws CloneNotSupportedException
clone
in class Object
CloneNotSupportedException
Object.clone()
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES All Classes | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |