The abstract class BinaryFunction is the class of processes that take an item on each of their two input channel, then apply a function fun to these idems and put the result on their output.
public abstract class BinaryFunction extends ReactiveProcess
{
protected Channel left, right, out;
protected boolean getLeft,getRight;
public BinaryFunction(Channel left,Channel right,Channel out)
{
this.left = left;
this.right = right;
this.out = out;
getLeft = getRight = false;
}
public BinaryFunction(NrpMachine machine,String left,
String right,String out)
{
this.left = machine.getChannel(left);
this.right = machine.getChannel(right);
this.out = machine.getChannel(out);
getLeft = getRight = false;
machine.add(this);
}
protected abstract Object fun(Object arg1,Object arg2);
protected byte activation(Machine machine)
{
if (fix(left,machine) == TERM ){ getLeft = true; }
if (fix(right,machine) == TERM ){ getRight = true; }
if (getLeft && getRight){
getLeft = getRight = false;
put(out,fun(left.get(),right.get()),machine);
return STOP;
}
return SUSP;
}
}