package org.basex.gui.view.tree;
import org.basex.data.Data;
/**
* Offers an iterator for the children of a node. Could as well be
* defined as generic child iterator.
*
* @author BaseX Team 2005-12, BSD License
* @author Christian Gruen
*/
final class ChildIterator {
/** Data reference. */
private final Data data;
/** Maximum size. */
private int size;
/** Current pre value. */
private int pre;
/**
* Default constructor.
* @param d data reference
* @param p value of directory node
*/
ChildIterator(final Data d, final int p) {
data = d;
init(p);
}
/**
* Initializes the iterator.
* @param p root pre value
*/
private void init(final int p) {
final int k = data.kind(p);
size = p + data.size(p, k);
pre = p + data.attSize(p, k);
}
/**
* Tests if the node offers more children.
* @return result of check
*/
boolean more() {
return pre < size;
}
/**
* Returns the pre value of the next child.
* @return next child reference
*/
int next() {
final int p = pre;
pre += data.size(pre, data.kind(pre));
return p;
}
}