package rocks.inspectit.server.cache.impl;
import rocks.inspectit.server.cache.IBufferElement;
import rocks.inspectit.shared.all.cmr.cache.IObjectSizes;
import rocks.inspectit.shared.all.communication.DefaultData;
/**
* Simple implementation of the {@link IBufferElement} interface.
*
* @author Ivan Senic
*
* @param <E>
*/
public class BufferElement<E extends DefaultData> implements IBufferElement<E> {
/**
* Element that is next element in the buffer from the perspective of this buffer element.
*/
private IBufferElement<E> nextElement;
/**
* Holding object.
*/
private E object;
/**
* Size of the whole buffer element.
*/
private long bufferElementSize;
/**
* Buffer element state.
*/
private BufferElementState bufferElementState;
/**
* Default constructor.
*
* @param object
* Object to hold.
*/
public BufferElement(E object) {
super();
this.object = object;
this.bufferElementState = BufferElementState.INSERTED;
}
/**
* {@inheritDoc}
*/
@Override
public E getObject() {
return object;
}
/**
* {@inheritDoc}
*/
@Override
public long getBufferElementSize() {
return bufferElementSize;
}
/**
* {@inheritDoc}
*/
@Override
public void setBufferElementSize(long size) {
this.bufferElementSize = size;
}
/**
* {@inheritDoc}
*/
@Override
public IBufferElement<E> getNextElement() {
return nextElement;
}
/**
* {@inheritDoc}
*/
@Override
public void setNextElement(IBufferElement<E> element) {
this.nextElement = element;
}
/**
* {@inheritDoc}
*/
@Override
public void calculateAndSetBufferElementSize(IObjectSizes objectSizes) {
long size = objectSizes.getSizeOfObjectHeader() + objectSizes.getPrimitiveTypesSize(2, 0, 0, 0, 1, 0);
if (null != object) {
size += object.getObjectSize(objectSizes);
}
size += size * objectSizes.getObjectSecurityExpansionRate();
bufferElementSize = size;
}
/**
* {@inheritDoc}
*/
@Override
public boolean isAnalyzed() {
return bufferElementState.compareTo(BufferElementState.ANALYZED) >= 0;
}
/**
* {@inheritDoc}
*/
@Override
public boolean isEvicted() {
return bufferElementState.compareTo(BufferElementState.EVICTED) >= 0;
}
/**
* {@inheritDoc}
*/
@Override
public boolean isIndexed() {
return bufferElementState.compareTo(BufferElementState.INDEXED) >= 0;
}
/**
* {@inheritDoc}
*/
@Override
public BufferElementState getBufferElementState() {
return bufferElementState;
}
/**
* {@inheritDoc}
*/
@Override
public void setBufferElementState(BufferElementState bufferElementState) {
this.bufferElementState = bufferElementState;
}
}