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

					if (bufferId < 0 || keyIndex < 0) {
						return false;
					}

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

					try {
						// Process next leaf if needed
						LongKeyRecordNode leaf =
							(LongKeyRecordNode) nodeMgr.getLongKeyNode(bufferId);
						if (nextIndex >= leaf.keyCount) {
							leaf = leaf.getNextLeaf();
							if (leaf == null) {
								return false;
							}
							long nextKey = leaf.getKey(0);
							if (nextKey > maxKey) {
								return false;
							}
							bufferId = leaf.getBufferId();
							key = nextKey;
							keyIndex = 0;
							hasNext = true;
							hasPrev = false;
						}

						// else, use keys cache
						else {
							long nextKey = leaf.getKey(nextIndex);
							hasNext = (nextKey <= maxKey);
							if (hasNext) {
								key = nextKey;
								keyIndex = nextIndex;
								hasPrev = false;
							}
						}
					}
					finally {
						nodeMgr.releaseNodes();
					}

				}
				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