package org.basex.gui.view.table; import org.basex.data.Data; /** * This is an iterator for parsing the rows' contents. * * @author BaseX Team 2005-12, BSD License * @author Christian Gruen */ final class TableIterator { /** Table data. */ private final TableData tdata; /** Data reference. */ private final Data data; /** Last pre value. */ private int last; /** Last tag. */ private int tag; /** Root tag. */ private int rootTag; /** Current pre value. */ int pre; /** Current column. */ int col; /** Element flag. */ boolean text; /** * Default constructor. * @param d data reference * @param td table data */ TableIterator(final Data d, final TableData td) { data = d; tdata = td; } /** * Initializes the iterator. * @param p pre value to start from (must be an element node) */ void init(final int p) { last = p + data.size(p, data.kind(p)); rootTag = data.name(p); pre = p; tag = -1; } /** * Checks if more values are found. * @return result of check */ boolean more() { while(++pre < last) { final int k = data.kind(pre); text = k == Data.TEXT; // content found... if(text || k == Data.ATTR) { final int id = text ? tag : data.name(pre); // find correct column... for(col = 0; col < tdata.cols.length; ++col) { if(tdata.cols[col].id == id && tdata.cols[col].elem == text) { return true; } } } else if(k == Data.ELEM) { // remember last tag tag = data.name(pre); if(tag == rootTag) return false; } } return false; } }