Follow outputs the first item of its left input channel, then duplicates its right input on the output.
public class Follow extends ReactiveProcess
{
private Channel in, left, right, out;
private boolean first = true;
public Follow(Channel left,Channel right,Channel out)
{
this.left = left;
this.right = right;
this.out = out;
}
public Follow(NrpMachine machine,
String left,String right,String out)
{
this.left = machine.getChannel(left);
this.right = machine.getChannel(right);
this.out = machine.getChannel(out);
machine.add(this);
}
final public String toString(){
return "follow(" + out + "," + left + "," + right + ")";
}
protected byte activation(Machine machine)
{
Channel in = first ? left : right;
byte b = fix(in,machine);
if (b == TERM){
put(out,in.get(),machine);
first = false;
return STOP;
}
return b;
}
}