package com.bigdata.rdf.spo;
import com.bigdata.btree.keys.IKeyBuilder;
import com.bigdata.btree.keys.ISortKeyBuilder;
import com.bigdata.btree.keys.KeyBuilder;
import com.bigdata.rdf.store.IRawTripleStore;
import com.bigdata.util.Bytes;
/**
* Class produces unsigned byte[] sort keys for {@link ISPO}s. This
* implementation is NOT thread-safe.
*
* @author <a href="mailto:thompsonbry@users.sourceforge.net">Bryan Thompson</a>
* @version $Id$
*/
public class SPOSortKeyBuilder implements ISortKeyBuilder<ISPO> {
final private int arity;
final private IKeyBuilder keyBuilder;
public SPOSortKeyBuilder(final int arity) {
assert arity == 3 || arity == 4;
this.arity = arity;
this.keyBuilder = new KeyBuilder(Bytes.SIZEOF_LONG * arity);
}
/**
* Distinct iff the {s:p:o} are distinct.
*/
public byte[] getSortKey(final ISPO spo) {
keyBuilder.reset();
spo.s().encode(keyBuilder);
spo.p().encode(keyBuilder);
spo.o().encode(keyBuilder);
if (arity == 4) {
spo.c().encode(keyBuilder);
}
return keyBuilder.getKey();
}
}