@Override
public SampledValue interpolate(SampledValue x0, SampledValue x1, long t, Class<? extends Value> valueType) {
if (x0 == null && x1 == null) {
throw new IllegalArgumentException("Cannot interpolate between two null pointers (x0==null, x1==null).");
}
try {
if (x0 == null)
return new SampledValue(x1.getValue().clone(), t, Quality.BAD);
if (x1 == null)
return new SampledValue(x0.getValue().clone(), t, Quality.BAD);
} catch (CloneNotSupportedException ex) {
return null;
}
if (valueType == FloatValue.class) {
return interpolateFloat(x0, x1, t);
}
if (valueType == IntegerValue.class) {
return interpolateInt(x0, x1, t);
}
if (valueType == BooleanValue.class) {
return interpolateBoolean(x0, x1, t);
}
if (valueType == LongValue.class) {
return interpolateLong(x0, x1, t);
}
throw new UnsupportedOperationException(valueType.getCanonicalName()
+ " not supported for linear interpolation.");
}