Methods Summary |
---|
public org.apache.log4j.spi.LoggingEvent | get()Get the first element in the buffer. Returns null if
there are no elements in the buffer.
if(numElements == 0)
return null;
LoggingEvent r = buf[first];
buf[first] = null; // help garbage collection
if(++first == maxSize) {
first = 0;
}
numElements--;
return r;
|
public int | getMaxSize()Get the maximum size of the buffer.
return maxSize;
|
public boolean | isFull()Return true if the buffer is full, that is, whether
the number of elements in the buffer equals the buffer size.
return numElements == maxSize;
|
public int | length()Get the number of elements in the buffer. This number is
guaranteed to be in the range 0 to maxSize
(inclusive).
return numElements;
|
int | min(int a, int b)
return a < b ? a : b;
|
public void | put(org.apache.log4j.spi.LoggingEvent o)Place a {@link LoggingEvent} in the buffer. If the buffer is full
then the event is silently dropped. It is the caller's
responsability to make sure that the buffer has free space.
if(numElements != maxSize) {
buf[next] = o;
if(++next == maxSize) {
next = 0;
}
numElements++;
}
|
public synchronized void | resize(int newSize)Resize the buffer to a new size. If the new size is smaller than
the old size events might be lost.
if(newSize == maxSize)
return;
LoggingEvent[] tmp = new LoggingEvent[newSize];
// we should not copy beyond the buf array
int len1 = maxSize - first;
// we should not copy beyond the tmp array
len1 = min(len1, newSize);
// er.. how much do we actually need to copy?
// We should not copy more than the actual number of elements.
len1 = min(len1, numElements);
// Copy from buf starting a first, to tmp, starting at position 0, len1 elements.
System.arraycopy(buf, first, tmp, 0, len1);
// Are there any uncopied elements and is there still space in the new array?
int len2 = 0;
if((len1 < numElements) && (len1 < newSize)) {
len2 = numElements - len1;
len2 = min(len2, newSize - len1);
System.arraycopy(buf, 0, tmp, len1, len2);
}
this.buf = tmp;
this.maxSize = newSize;
this.first=0;
this.numElements = len1+len2;
this.next = this.numElements;
if(this.next == this.maxSize) // this should never happen, but again, it just might.
this.next = 0;
|
public boolean | wasEmpty()Returns true if there is just one element in the
buffer. In other words, if there were no elements before the last
{@link #put} operation completed.
return numElements == 1;
|
public boolean | wasFull()Returns true if the number of elements in the
buffer plus 1 equals the maximum buffer size, returns
false otherwise.
return (numElements+1 == maxSize);
|