package org.numenta.nupic.util;
/**
* Generates a range of integers.
*
* @author cogmission
*/
public class IntGenerator implements Generator<Integer> {
/** serial version */
private static final long serialVersionUID = 1L;
protected int _i;
protected int lower;
protected int upper;
public IntGenerator(int lower, int upper) {
this.lower = lower;
this._i = this.lower;
this.upper = upper;
}
/**
* Returns the value returned by the last call to {@link #next()}
* or the initial value if no previous call to {@code #next()} was made.
* @return
*/
public int get() {
return _i;
}
/**
* Returns the configured size or distance between the initialized
* upper and lower bounds.
* @return
*/
public int size() {
return upper - lower;
}
/**
* Returns the state of this generator to its initial state so
* that it can be reused.
*/
public void reset() {
this._i = lower;
}
/**
* {@inheritDoc}
*/
@Override
public Integer next() {
int retVal = _i;
_i = ++_i > upper ? upper : _i;
return retVal;
}
/**
* {@inheritDoc}
*/
@Override
public boolean hasNext() { return _i < upper; }
/**
* Returns a {@link Generator} which returns integers between
* the values specified (lower inclusive, upper exclusive)
* @param lower the lower bounds or start value
* @param upper the upper bounds (exclusive)
* @return
*/
public static IntGenerator of(int lower, int upper) {
return new IntGenerator(lower, upper);
}
}