void FindPrevUserEntry() {
		assert (direction_ == Direction.kReverse);

		ValueType value_type = ValueType.TypeDeletion;
		if (iter_.Valid()) {
			do {
				ParsedInternalKey ikey = ParseKey();
				if (ikey.sequence.value <= sequence_.value) {
					if ((value_type != ValueType.TypeDeletion)
							&& user_comparator_.Compare(ikey.user_key,
									new Slice(saved_key_.getRawRef(), 0,
											saved_key_.getSize())) < 0) {
						// We encountered a non-deleted value in entries for
						// previous keys,
						break;
					}
					value_type = ikey.type;
					if (value_type.value == ValueType.kTypeDeletion) {
						saved_key_.clear();
						ClearSavedValue();
					} else {
						Slice raw_value = iter_.value();
						if (saved_value_.getCapacity() > raw_value.size() + 1048576) {
							saved_value_ = new ByteVector();
						}
						SaveKey(InternalKey.ExtractUserKey(iter_.key()),
								saved_key_);
						saved_value_.set(raw_value.data());
					}
				}
				iter_.Prev();
			} while (iter_.Valid());
		}

		if (value_type.value == ValueType.kTypeDeletion) {
			// End
			valid_ = false;
			saved_key_.clear();
			ClearSavedValue();
			direction_ = Direction.kForward;
		} else {
			valid_ = true;
		}
	}