public static boolean SomeFileOverlapsRange(InternalKeyComparator icmp,
			boolean disjoint_sorted_files, List<FileMetaData> files,
			Slice smallest_user_key, Slice largest_user_key) {
		Comparator ucmp = icmp.user_comparator();
		if (!disjoint_sorted_files) {
			// Need to check against all files
			for (int i = 0; i < files.size(); i++) {
				FileMetaData f = files.get(i);
				if (AfterFile(ucmp, smallest_user_key, f)
						|| BeforeFile(ucmp, largest_user_key, f)) {
					// No overlap
				} else {
					return true; // Overlap
				}
			}
			return false;
		}

		// Binary search over file list
		int index = 0;
		if (smallest_user_key != null) {
			// Find the earliest possible internal key for smallest_user_key
			InternalKey small = new InternalKey(smallest_user_key,
					new SequenceNumber(SequenceNumber.kMaxSequenceNumber),
					new ValueType(ValueType.kValueTypeForSeek));
			index = FindFile(icmp, files, small.Encode());
		}

		if (index >= files.size()) {
			// beginning of range is after all files, so no overlap.
			return false;
		}

		return !BeforeFile(ucmp, largest_user_key, files.get(index));
	}