package water.udf.specialized;
import water.fvec.Chunk;
import water.fvec.Vec;
import water.udf.ColumnFactory;
import water.udf.DataChunk;
import water.udf.DataColumn;
import water.udf.DataColumns;
import java.util.Date;
/**
* Specialized factory for dates
*/
public class Dates extends DataColumns.BaseFactory<Date> {
public static final water.udf.specialized.Dates Dates = new Dates();
public Dates() {
super(Vec.T_TIME, "Time");
}
static class DateChunk extends DataChunk<Date> {
/**
* for deserialization
*/
public DateChunk(){}
public DateChunk(Chunk c) {
super(c);
}
@Override
public Date get(int idx) {
return isNA(idx) ? null : new Date(c.at8(idx));
}
@Override
public void set(int idx, Date value) {
if (value == null) c.setNA(idx);
else c.set(idx, value.getTime());
}
}
@Override
public DataChunk<Date> apply(final Chunk c) {
return new DateChunk(c);
}
static class Column extends DataColumn<Date> {
public Column() {}
public Column(Vec v, ColumnFactory<Date> factory) {
super(v, factory);
}
@Override
public Date get(long idx) {
return isNA(idx) ? null : new Date(vec().at8(idx));
}
@Override
public void set(long idx, Date value) {
if (value == null) vec().setNA(idx);
else vec().set(idx, value.getTime());
}
}
@Override
public DataColumn<Date> newColumn(final Vec vec) {
if (vec.get_type() != Vec.T_TIME && vec.get_type() != Vec.T_NUM)
throw new IllegalArgumentException("Expected a type compatible with Dates, got " + vec.get_type_str());
return new Column(vec, this);
}
}