public V next(K target) { if (!hasNext()) return null; int state = this.state; boolean found = seekTo(target, forwards, (state & (ON_ITEM | BEFORE_FIRST)) != 0); int index = cur.globalIndex(); V next = null; if (state == BEFORE_FIRST && compareToFirst(index) < 0) return null; int compareToLast = compareToLast(index); if ((compareToLast <= 0)) { state = compareToLast < 0 ? MIDDLE : LAST; if (found) { state |= ON_ITEM; next = (V) currentValue(); } } else state = END; this.state = (byte) state; this.index = index; return next; }
public V next(K target) { if (!hasNext()) return null; int state = this.state; boolean found = seekTo(target, forwards, (state & (ON_ITEM | BEFORE_FIRST)) != 0); int index = cur.globalIndex(); V next = null; if (state == BEFORE_FIRST && compareToFirst(index) < 0) return null; int compareToLast = compareToLast(index); if ((compareToLast <= 0)) { state = compareToLast < 0 ? MIDDLE : LAST; if (found) { state |= ON_ITEM; next = (V) currentValue(); } } else state = END; this.state = (byte) state; this.index = index; return next; }
public V next(K target) { if (!hasNext()) return null; int state = this.state; boolean found = seekTo(target, forwards, (state & (ON_ITEM | BEFORE_FIRST)) != 0); int index = cur.globalIndex(); V next = null; if (state == BEFORE_FIRST && compareToFirst(index) < 0) return null; int compareToLast = compareToLast(index); if ((compareToLast <= 0)) { state = compareToLast < 0 ? MIDDLE : LAST; if (found) { state |= ON_ITEM; next = (V) currentValue(); } } else state = END; this.state = (byte) state; this.index = index; return next; }
public V next(K target) { if (!hasNext()) return null; int state = this.state; boolean found = seekTo(target, forwards, (state & (ON_ITEM | BEFORE_FIRST)) != 0); int index = cur.globalIndex(); V next = null; if (state == BEFORE_FIRST && compareToFirst(index) < 0) return null; int compareToLast = compareToLast(index); if ((compareToLast <= 0)) { state = compareToLast < 0 ? MIDDLE : LAST; if (found) { state |= ON_ITEM; next = (V) currentValue(); } } else state = END; this.state = (byte) state; this.index = index; return next; }
/** * move the Cursor one item, either forwards or backwards * @param forwards direction of travel * @return false iff the cursor is exhausted in the direction of travel */ int moveOne(boolean forwards) { NodeCursor<K> cur = this.cur; if (cur.isLeaf()) { // if we're a leaf, we try to step forwards inside ourselves if (cur.advanceLeafNode(forwards)) return cur.globalLeafIndex(); // if we fail, we just find our bounding parent this.cur = cur = moveOutOfLeaf(forwards, cur, root()); return cur.globalIndex(); } // otherwise we descend directly into our next child if (forwards) ++cur.position; cur = cur.descend(); // and go to its first item NodeCursor<K> next; while ( null != (next = cur.descendToFirstChild(forwards)) ) cur = next; this.cur = cur; return cur.globalLeafIndex(); }
/** * move the Cursor one item, either forwards or backwards * @param forwards direction of travel * @return false iff the cursor is exhausted in the direction of travel */ int moveOne(boolean forwards) { NodeCursor<K> cur = this.cur; if (cur.isLeaf()) { // if we're a leaf, we try to step forwards inside ourselves if (cur.advanceLeafNode(forwards)) return cur.globalLeafIndex(); // if we fail, we just find our bounding parent this.cur = cur = moveOutOfLeaf(forwards, cur, root()); return cur.globalIndex(); } // otherwise we descend directly into our next child if (forwards) ++cur.position; cur = cur.descend(); // and go to its first item NodeCursor<K> next; while ( null != (next = cur.descendToFirstChild(forwards)) ) cur = next; this.cur = cur; return cur.globalLeafIndex(); }
/** * move the Cursor one item, either forwards or backwards * @param forwards direction of travel * @return false iff the cursor is exhausted in the direction of travel */ int moveOne(boolean forwards) { NodeCursor<K> cur = this.cur; if (cur.isLeaf()) { // if we're a leaf, we try to step forwards inside ourselves if (cur.advanceLeafNode(forwards)) return cur.globalLeafIndex(); // if we fail, we just find our bounding parent this.cur = cur = moveOutOfLeaf(forwards, cur, root()); return cur.globalIndex(); } // otherwise we descend directly into our next child if (forwards) ++cur.position; cur = cur.descend(); // and go to its first item NodeCursor<K> next; while ( null != (next = cur.descendToFirstChild(forwards)) ) cur = next; this.cur = cur; return cur.globalLeafIndex(); }
/** * move the Cursor one item, either forwards or backwards * @param forwards direction of travel * @return false iff the cursor is exhausted in the direction of travel */ int moveOne(boolean forwards) { NodeCursor<K> cur = this.cur; if (cur.isLeaf()) { // if we're a leaf, we try to step forwards inside ourselves if (cur.advanceLeafNode(forwards)) return cur.globalLeafIndex(); // if we fail, we just find our bounding parent this.cur = cur = moveOutOfLeaf(forwards, cur, root()); return cur.globalIndex(); } // otherwise we descend directly into our next child if (forwards) ++cur.position; cur = cur.descend(); // and go to its first item NodeCursor<K> next; while ( null != (next = cur.descendToFirstChild(forwards)) ) cur = next; this.cur = cur; return cur.globalLeafIndex(); }