}
}
final int saveSize = storeData.persistitKey.getEncodedSize();
final boolean exact = dir == EQ || dir == GTEQ || dir == LTEQ;
final boolean reverse = (dir == LT) || (dir == LTEQ);
KeyState saveState = null;
assert storeData.nudgeDir == null;
if(!KeyShim.isSpecial(storeData.persistitKey)) {
if(exact) {
if(reverse && !deep) {
// exact, reverse, logical: want to see current key or a child
// Note: child won't be returned, but current key will be synthesized by advanceLogical()
saveState = new KeyState(storeData.persistitKey);
// nudgeRight changes the content of the key
KeyShim.nudgeRight(storeData.persistitKey);
storeData.nudgeDir = FDBStoreData.NudgeDir.RIGHT;
}
} else {
if(reverse) {
// Non-exact, reverse: do not want to see current key
KeyShim.nudgeLeft(storeData.persistitKey);
storeData.nudgeDir = FDBStoreData.NudgeDir.LEFT;
} else {
if(deep) {
// Non-exact, forward, deep: do not want to see current key
KeyShim.nudgeDeeper(storeData.persistitKey);
storeData.nudgeDir = FDBStoreData.NudgeDir.DEEPER;
} else {
// Non-exact, forward, logical: do not want to see current key or any children
saveState = new KeyState(storeData.persistitKey);
// nudgeRight changes the content of the key
KeyShim.nudgeRight(storeData.persistitKey);
storeData.nudgeDir = FDBStoreData.NudgeDir.RIGHT;
}
}
}
}
adapter.getUnderlyingStore().indexIterator(adapter.getSession(), storeData,
exact, reverse);
storeData.nudgeDir = null;
if (saveState != null) {
saveState.copyTo(storeData.persistitKey);
}
storeData.persistitKey.setEncodedSize(saveSize);
lastKeyGen = storeData.persistitKey.getGeneration();
itDir = dir;
}