void FindNextUserEntry(boolean skipping, ByteVector skip) {
		// Loop until we hit an acceptable entry to yield
		assert (iter_.Valid());
		assert (direction_ == Direction.kForward);
		do {
			ParsedInternalKey ikey = ParseKey();
			if (ikey.sequence.value <= sequence_.value) {
				switch (ikey.type.value) {
				case ValueType.kTypeDeletion:
					// Arrange to skip all upcoming entries for this key since
					// they are hidden by this deletion.
					SaveKey(ikey.user_key, skip);
					skipping = true;
					break;
				case ValueType.kTypeValue:
					if (skipping
							&& user_comparator_.Compare(
									ikey.user_key,
									new Slice(skip.getRawRef(), 0, skip
											.getSize())) <= 0) {
						// Entry hidden
					} else {
						valid_ = true;
						saved_key_.clear();
						return;
					}
					break;
				}
			}
			iter_.Next();
		} while (iter_.Valid());
		saved_key_.clear();
		valid_ = false;
	}