blob: 6312c242722b2ff0bcb535d00458f0f59d12b872 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, Cloudsmith Inc 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:
* Cloudsmith Inc. - initial API and implementation
*******************************************************************************/
package org.eclipse.equinox.p2.testserver;
import java.util.NoSuchElementException;
public class LinearChange {
boolean started;
long startValue;
long current;
long step;
long max;
long min;
public static final LinearChange NoChange = new LinearChange(0, 0);
public LinearChange() {
started = false;
startValue = 0;
current = 0;
step = 1;
max = Long.MAX_VALUE;
min = Long.MIN_VALUE;
}
public void reset() {
started = false;
current = startValue;
}
public LinearChange fork() {
LinearChange forked = new LinearChange();
forked.started = started;
forked.startValue = startValue;
forked.current = current;
forked.step = step;
forked.max = max;
forked.min = min;
return forked;
}
public LinearChange(long firstValue, long step) {
this();
current = startValue = firstValue;
this.step = step;
}
public LinearChange(long firstValue, long step, long max, long min) {
this(firstValue, step);
this.max = max;
this.min = min;
}
public long next() {
if (!hasNext())
throw new NoSuchElementException();
if (started)
current += step;
started = true;
return current;
}
public boolean hasNext() {
if (step == 0)
return false;
if (step > 0 && current + step > max)
return false;
if (step < 0 && current + step < min)
return false;
return true;
}
}