package net.varkhan.base.functor.functional;
import net.varkhan.base.functor.Functional;
/**
* <b></b>.
* <p/>
*
* @author varkhan
* @date 2/11/12
* @time 3:28 PM
*/
public class AffineFunctional<A,C> extends TransformFunctional<A,C> {
protected double offset;
protected double scale;
public AffineFunctional(Functional<A, C> func, double offset, double scale) {
super(func);
this.offset = offset;
this.scale = scale;
}
public double invoke(A arg, C ctx) {
if(func==null) return offset;
return offset+scale*func.invoke(arg, ctx);
}
@Override
public String toString() {
return new StringBuilder().append(offset).append('+').append(scale).append('*').append(func.toString()).toString();
}
}