package org.basex.index.value;
import static org.basex.data.DataText.*;
import java.io.IOException;
import org.basex.data.Data;
import org.basex.io.in.DataInput;
/**
* This class provides data for merging temporary value indexes.
*
* @author BaseX Team 2005-12, BSD License
* @author Christian Gruen
*/
final class ValueMerger {
/** Index instance. */
private final DiskValues dv;
/** Index keys. */
private final DataInput dk;
/** File prefix. */
private final String pref;
/** Data reference. */
private final Data data;
/** Current key. */
byte[] key;
/** Current values. */
byte[] values;
/**
* Constructor.
* @param d data reference
* @param txt text flag
* @param i merge id
* @throws IOException I/O exception
*/
ValueMerger(final Data d, final boolean txt, final int i) throws IOException {
pref = (txt ? DATATXT : DATAATV) + i;
dk = new DataInput(d.meta.dbfile(pref + 't'));
dv = new DiskValues(d, txt, pref);
data = d;
next();
}
/**
* Jumps to the next value. {@link #values} will have 0 entries if the
* end of file is reached.
* @throws IOException I/O exception
*/
void next() throws IOException {
values = dv.nextValues();
if(values.length != 0) {
key = dk.readToken();
} else {
dv.close();
dk.close();
data.meta.drop(pref + '.');
}
}
}