boolean GetValue(Comparator cmp, Iterator iter, Slice user_key,
			Slice value, Status[] s) {
		if (!iter.Valid()) {
			return false; // not stop
		}
		ParsedInternalKey parsed_key = InternalKey
				.ParseInternalKey_(iter.key());

		if (parsed_key == null) {
			s[0] = Status.Corruption(new Slice("corrupted key for "), user_key);
			return true; // stop with error
		}
		if (cmp.Compare(parsed_key.user_key, user_key) != 0) {
			return false; // not stop
		}
		switch (parsed_key.type.value) {
		case ValueType.kTypeDeletion:
			s[0] = Status.NotFound(new Slice(), null);
			// Use an empty error message for speed
			break; // stop with error
		case ValueType.kTypeValue: {
			Slice v = iter.value();
			value.setData_(v.data());
			// value->assign(v.data(), v.size());
			break; // stop and set the data, but ...
		}
		}
		return true;
	}