package org.basex.index.ft;
/**
* This class provides an array with several {@link FTIndexTree} instances,
* one for each token length.
*
* @author BaseX Team 2005-12, BSD License
* @author Christian Gruen
* @author Sebastian Gath
*/
class FTIndexTrees {
/** For each key length, an extra tree is created. */
final FTIndexTree[] trees;
/** Pointer on current tree. */
private int ctree;
/**
* Constructor.
* @param size number of tree instances
*/
FTIndexTrees(final int size) {
trees = new FTIndexTree[size + 1];
}
/**
* Indexes a token with full-text data.
* @param tok token to be indexed
* @param pre pre value for the token
* @param pos pos value of the token
* @param cf current file id
*/
void index(final byte[] tok, final int pre, final int pos, final int cf) {
final int tl = tok.length;
if(trees[tl] == null) trees[tl] = new FTIndexTree();
trees[tl].index(tok, pre, pos, cf);
}
/**
* Initializes all trees for adding new full-text data.
*/
void initFT() {
for(final FTIndexTree tree : trees) if(tree != null) tree.initFT();
}
/**
* Initializes all trees for iterative traversal.
*/
void init() {
for(final FTIndexTree tree : trees) if(tree != null) tree.init();
ctree = -1;
}
/**
* Checks for more tokens.
* @param cf current file
* @return boolean more
*/
boolean more(final int cf) {
if(ctree != -1 && trees[ctree].more(cf)) return true;
while(++ctree < trees.length) if(trees[ctree] != null) return more(cf);
return false;
}
/**
* Returns the next token.
* @return byte[] next token
*/
FTIndexTree nextTree() {
return trees[ctree];
}
}