/*
* Copyright (c) 2010 - 2011, Jan Stender, Bjoern Kolbeck, Mikael Hoegqvist,
* Felix Hupfeld, Zuse Institute Berlin
*
* Licensed under the BSD License, see LICENSE file for details.
*
*/
package de.mxro.thrd.babudb05.index.reader;
import java.nio.ByteBuffer;
import de.mxro.thrd.babudb05.api.database.ResultSet;
import de.mxro.thrd.babudb05.api.index.ByteRangeComparator;
import de.mxro.thrd.babudb05.index.ByteRange;
import de.mxro.thrd.xstreemfs.foundation.buffer.BufferPool;
import de.mxro.thrd.xstreemfs.foundation.buffer.ReusableBuffer;
/**
* Base class for block readers.
*
* @author stenjan
*
*/
public abstract class BlockReader {
protected ByteBuffer buffer; // for buffered block readers
protected ReusableBuffer readBuffer; // for streamed block readers
protected int position;
protected int limit;
protected ByteRangeComparator comp;
protected MiniPage keys;
protected MiniPage values;
protected int numEntries;
protected final boolean isBuffered;
protected BlockReader(boolean isBuffered) {
this.isBuffered = isBuffered;
}
public BlockReader clone() {
assert (isBuffered);
buffer.position(0);
return new DefaultBlockReader(buffer.slice(), position, limit, comp);
}
public abstract ByteRange lookup(byte[] key);
public abstract ResultSet<ByteRange, ByteRange> rangeLookup(byte[] from, byte[] to,
final boolean ascending);
public MiniPage getKeys() {
return keys;
}
public MiniPage getValues() {
return values;
}
public int getNumEntries() {
return numEntries;
}
public void free() {
if (readBuffer != null)
BufferPool.free(readBuffer);
}
}