@Override
		public boolean hasNext() throws IOException {
			synchronized (db) {
				if (modCount != expectedModCount) {
					reset();
				}
				if (!hasNext) {

					// Check next key index
					int nextIndex = keyIndex + 1;

					// Process next leaf if needed
					if (nextIndex >= keys.length) {
						try {
							if (bufferId == -1) {
								return false;
							}
							LongKeyRecordNode leaf = ((LongKeyRecordNode) nodeMgr.getLongKeyNode(
								bufferId)).getNextLeaf();
							if (leaf == null || leaf.getKey(0) > maxKey) {
								return false;
							}
							getKeys(leaf);
							key = keys[0];
							keyIndex = 0;
							hasNext = true;
							hasPrev = false;
						}
						finally {
							nodeMgr.releaseNodes();
						}
					}

					// else, use keys cache
					else {
						hasNext = keys[nextIndex] <= maxKey;
						if (hasNext) {
							key = keys[nextIndex];
							keyIndex = nextIndex;
							hasPrev = false;
						}
					}

				}
				return hasNext;
			}
		}
Initialize (or re-initialize) iterator state.
An empty or null keys array will force a complete initialization.
Otherwise, following the deletethe keys array and keyIndex should reflect the state
following a delete.
@param targetKey the initial key.  For construction this is the startKey, 
following a delete this is the deleted key.
@throws IOException thrown if IO error occurs
Ghidra/Framework/DB/src/main/java/db/Table.java