package hex.createframe.columns;
import hex.createframe.CreateFrameColumnMaker;
import water.fvec.NewChunk;
import water.fvec.Vec;
import java.util.Random;
/**
* Integer-valued random column.
*/
public class IntegerColumnCfcm extends CreateFrameColumnMaker {
private String name;
private long lowerBound;
private long upperBound;
public IntegerColumnCfcm() {}
public IntegerColumnCfcm(String colName, int lBound, int uBound) {
name = colName;
lowerBound = lBound;
upperBound = uBound;
}
@Override public void exec(int nrows, NewChunk[] ncs, Random rng) {
long span = upperBound - lowerBound + 1;
if (span == 1) {
for (int row = 0; row < nrows; ++row)
ncs[index].addNum(lowerBound);
} else {
for (int row = 0; row < nrows; ++row)
ncs[index].addNum(lowerBound + (long)(rng.nextDouble()*span));
}
}
@Override public String[] columnNames() {
return new String[]{name};
}
@Override public byte[] columnTypes() {
return new byte[]{Vec.T_NUM};
}
@Override public float byteSizePerRow() {
long integer_range = Math.max(Math.abs(upperBound), Math.abs(lowerBound));
if (integer_range < 128) return 1;
if (integer_range < 32768) return 2;
if (integer_range < 1L << 31) return 4;
return 8;
}
}