All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.xmlactions.common.arrays.MultiArrayIndexer Maven / Gradle / Ivy

package org.xmlactions.common.arrays;

import java.util.Arrays;

public class MultiArrayIndexer {

	int index = 0;
	private final Integer [] indexingArrays;
	private final Integer [] arrayLimits;
	
	public MultiArrayIndexer(final Integer[] indexes, final Integer[] indexesCount) {
		this.indexingArrays = indexes;
		this.arrayLimits = indexesCount;
		if (this.indexingArrays.length != this.arrayLimits.length) {
			throw new IllegalArgumentException("Arrays must be the same size");
		}
	}
	
	/**
	 * Will advance to next - and return false if past end.
	 * @return true if has next else false if all processed.
	 */
	public boolean hasNext() {
		if (indexingArrays.length == 0) {
			return false;
		}
		indexingArrays[indexingArrays.length-1] ++;
		if (indexingArrays[indexingArrays.length-1] >= arrayLimits[indexingArrays.length-1]) {
			return jump(indexingArrays.length-2);
		}
		return true;
	}
	
	public boolean jump(int arrayIndex) {
		if (arrayIndex < 0) {
			return false;
		}
		indexingArrays[arrayIndex+1] = 0;
		indexingArrays[arrayIndex] ++;
		if (indexingArrays[arrayIndex] >= arrayLimits[arrayIndex]) {
			return jump(arrayIndex-1);
		}
		return true;
	}
	
	@Override
	public String toString() {
		StringBuilder sb = new StringBuilder();
		sb.append("indexingArrays:" + Arrays.toString(this.indexingArrays));
		sb.append(" arrayLimits:" + Arrays.toString(this.arrayLimits));
		return sb.toString();
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy