public Iterator MakeInputIterator(Compaction c) {
		ReadOptions options = new ReadOptions();
		options.verify_checksums = options_.paranoid_checks;
		options.fill_cache = false;

		// Level-0 files have to be merged together. For other levels,
		// we will make a concatenating iterator per level.
		// TODO(opt): use concatenating iterator for level-0 if there is no
		// overlap
		int space = (c.level() == 0 ? c.inputs_.get(0).size() + 1 : 2);
		Iterator[] list = new Iterator[space];
		int num = 0;
		for (int which = 0; which < 2; which++) {
			if (!c.inputs_.get(which).isEmpty()) {
				if (c.level() + which == 0) {
					List<FileMetaData> files = c.inputs_.get(which);
					for (int i = 0; i < files.size(); i++) {
						list[num++] = table_cache_.NewIterator(options,
								files.get(i).number, files.get(i).file_size,
								null);
					}
				} else {
					// Create concatenating iterator for the files from this
					// level
					// similar as Version.NewConcatenatingIterator(ReadOptions,
					// int)
					list[num++] = TwoLevelIterator.NewTwoLevelIterator(
							new Version.LevelFileNumIterator(icmp_, c.inputs_
									.get(which)),
							new Version.GetFileIteratorBlockFunction(),
							table_cache_, options);
				}
			}
		}
		assert (num <= space);
		Iterator result = MergingIterator.NewMergingIterator(icmp_, list, num);

		return result;
	}