1 package edu.berkeley.fleet.dataflow;
3 import edu.berkeley.fleet.loops.*;
4 import edu.berkeley.fleet.api.*;
5 import edu.berkeley.fleet.api.Instruction.Set.FlagFunction;
8 * Takes an item from the "count" port, then passes/drops through count-1
9 * items from "val" to "out" and drops/passes the count-th item.
11 public class UnPunctuatorNode extends Node {
12 private final Ship ship = dfg.pool.allocateShip("Counter");
13 private final InPort op = new DockInPort("op", ship.getDock("inOp"), "PASS_C2_V1");
14 public final InPort val = new DockInPort("val", ship.getDock("in1"));
15 public final InPort count = new DockInPort("count", ship.getDock("in2"));
16 public final OutPort out = new DockOutPort("out", ship.getDock("out")) {
17 protected void build(CodeBag ctx, LoopFactory lf) {
19 lf.abortLoopIfTorpedoPresent();
21 lf.setFlags(FlagFunction.ZERO.add(Predicate.FlagC), FlagFunction.ZERO);
22 lf.setPredicate(passPunctuationInsteadOfValues ? Predicate.FlagA : Predicate.NotFlagA);
23 lf.abortLoopIfTorpedoPresent();
26 lf.setPredicate(null);
30 private boolean passPunctuationInsteadOfValues;
31 public UnPunctuatorNode(DataFlowGraph dfg) { this(dfg, false); }
32 public UnPunctuatorNode(DataFlowGraph dfg, boolean passPunctuationInsteadOfValues) {
34 this.passPunctuationInsteadOfValues = passPunctuationInsteadOfValues;