/*******************************************************************************
 * Copyright (c) 2000, 2011 IBM Corporation and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.compare.rangedifferencer;

import java.util.ArrayList;
import java.util.List;

/**
 * A custom iterator to iterate over a List of <code>RangeDifferences</code>.
 * It is used internally by the <code>RangeDifferencer</code>.
 */
/* package */ class DifferencesIterator {

	List<RangeDifference> fRange;
	int fIndex;
	RangeDifference[] fArray;
	RangeDifference fDifference;

	/*
	 * Creates a differences iterator on an array of <code>RangeDifference</code>s.
	 */
	DifferencesIterator(RangeDifference[] differenceRanges) {

		this.fArray= differenceRanges;
		this.fIndex= 0;
		this.fRange= new ArrayList<>();
		if (this.fIndex < this.fArray.length)
			this.fDifference= this.fArray[this.fIndex++];
		else
			this.fDifference= null;
	}

	/*
	  * Returns the number of RangeDifferences
	  */
	int getCount() {
		return this.fRange.size();
	}

	/*
	 * Appends the edit to its list and moves to the next <code>RangeDifference</code>.
	 */
	void next() {
		this.fRange.add(this.fDifference);
		if (this.fDifference != null) {
			if (this.fIndex < this.fArray.length)
				this.fDifference= this.fArray[this.fIndex++];
			else
				this.fDifference= null;
		}
	}

	/*
	 * Difference iterators are used in pairs.
	 * This method returns the other iterator.
	 */
	DifferencesIterator other(DifferencesIterator right, DifferencesIterator left) {
		if (this == right)
			return left;
		return right;
	}

	/*
	  * Removes all <code>RangeDifference</code>s
	  */
	void removeAll() {
		this.fRange.clear();
	}
}
