package com.bigdata.btree.data;
import com.bigdata.btree.AbstractBTree;
import com.bigdata.btree.raba.IRaba;
import com.bigdata.io.AbstractFixedByteArrayBuffer;
import com.bigdata.rawstore.IRawStore;
/**
* Mock object for {@link ILeafData} used for unit tests.
*
* @author <a href="mailto:thompsonbry@users.sourceforge.net">Bryan Thompson</a>
* @version $Id$
*/
public class MockLeafData extends AbstractMockNodeData implements ILeafData {
final private IRaba vals;
final private boolean[] deleteMarkers;
final private long[] versionTimestamps;
final private long minVersionTimestamp, maxVersionTimestamp;
final private boolean[] rawRecords;
final public IRaba getValues() {
return vals;
}
final public byte[] getValue(final int index) {
return vals.get(index);
}
// final public int getSpannedTupleCount() {
//
// return vals.size();
//
// }
final public int getValueCount() {
return vals.size();
}
final public boolean isLeaf() {
return true;
}
final public boolean isReadOnly() {
return true;
}
/**
* No.
*/
final public boolean isCoded() {
return false;
}
final public AbstractFixedByteArrayBuffer data() {
throw new UnsupportedOperationException();
}
final public boolean getDeleteMarker(final int index) {
if (deleteMarkers == null)
throw new UnsupportedOperationException();
return deleteMarkers[index];
}
final public long getVersionTimestamp(final int index) {
if (versionTimestamps == null)
throw new UnsupportedOperationException();
return versionTimestamps[index];
}
final public long getRawRecord(final int index) {
if (rawRecords == null)
throw new UnsupportedOperationException();
if(!rawRecords[index])
return IRawStore.NULL;
final byte[] b = vals.get(index);
final long addr = AbstractBTree.decodeRecordAddr(b);
return addr;
}
final public boolean hasDeleteMarkers() {
return deleteMarkers != null;
}
final public boolean hasVersionTimestamps() {
return versionTimestamps != null;
}
public boolean hasRawRecords() {
return rawRecords != null;
}
// public MockLeafData(final IRaba keys, final IRaba vals) {
//
// this(keys, vals, null/* deleteMarkers */, null/* versionTimestamps */,
// null/* rawRecords */);
//
// }
public MockLeafData(final IRaba keys, final IRaba vals,
final boolean[] deleteMarkers, final long[] versionTimestamps,
final boolean[] rawRecords) {
super(keys);
assert vals != null;
assert !vals.isKeys();
assert vals.size() == keys.size();
assert vals.capacity() == keys.capacity();
if (deleteMarkers != null)
assert deleteMarkers.length == vals.capacity();
if (versionTimestamps != null)
assert versionTimestamps.length == vals.capacity();
if (rawRecords != null)
assert rawRecords.length == vals.capacity();
this.vals = vals;
this.deleteMarkers = deleteMarkers;
this.rawRecords = rawRecords;
this.versionTimestamps = versionTimestamps;
long min = Long.MAX_VALUE;
long max = Long.MIN_VALUE;
if (versionTimestamps != null) {
final int nkeys = keys.size();
for (int i = 0; i < nkeys; i++) {
final long t = versionTimestamps[i];
if (t < min)
min = t;
if (t > max)
max = t;
}
}
this.minVersionTimestamp = min;
this.maxVersionTimestamp = max;
}
public boolean isDoubleLinked() {
return false;
}
public long getNextAddr() {
throw new UnsupportedOperationException();
}
public long getPriorAddr() {
throw new UnsupportedOperationException();
}
public long getMaximumVersionTimestamp() {
if(!hasVersionTimestamps())
throw new UnsupportedOperationException();
return maxVersionTimestamp;
}
public long getMinimumVersionTimestamp() {
if(!hasVersionTimestamps())
throw new UnsupportedOperationException();
return minVersionTimestamp;
}
public String toString() {
final StringBuilder sb = new StringBuilder();
sb.append(super.toString());
sb.append("{");
DefaultLeafCoder.toString(this, sb);
sb.append("}");
return sb.toString();
}
}