package org.basex.index.ft;
import static org.basex.data.DataText.*;
import java.io.IOException;
import org.basex.data.Data;
import org.basex.io.IOFile;
import org.basex.io.random.DataAccess;
/**
* This class provides temporary access to sorted list data.
*
* @author BaseX Team 2005-12, BSD License
* @author Sebastian Gath
*/
abstract class FTList {
/** Empty integer array. */
private static final int[] NOINTS = {};
/** Storing pre and pos values for each token. */
private final DataAccess dat;
/** Structure file. */
private final IOFile files;
/** Data file. */
private final IOFile filed;
/** Wasted flag. */
private boolean wasted;
/** Indexed tokens. */
final DataAccess str;
/** Current data size. */
int size;
/** Next token. */
byte[] tok;
/** Next pre values. */
int[] prv;
/** Next pos values. */
int[] pov;
/**
* Constructor, initializing the index structure.
* @param d data
* @param p prefix
* @param ss structure
* @param ds structure
* @throws IOException I/O exception
*/
FTList(final Data d, final int p, final char ss, final char ds)
throws IOException {
files = d.meta.dbfile(DATAFTX + p + ss);
filed = d.meta.dbfile(DATAFTX + p + ds);
str = new DataAccess(files);
dat = new DataAccess(filed);
}
/**
* Checks if more tokens are found.
* @throws IOException I/O exception
*/
final void next() throws IOException {
if(wasted) return;
tok = token();
if(tok.length == 0) {
wasted = true;
prv = NOINTS;
pov = NOINTS;
close();
} else {
prv = new int[size];
pov = new int[size];
for(int j = 0; j < size; ++j) {
prv[j] = dat.readNum();
pov[j] = dat.readNum();
}
}
}
/**
* Closes and deletes the input files.
* @throws IOException I/O exception
*/
void close() throws IOException {
str.close();
dat.close();
files.delete();
filed.delete();
}
/**
* Returns next token.
* @return byte[] token
*/
protected abstract byte[] token();
}