1 package edu.berkeley.fleet.dataflow;
3 import edu.berkeley.fleet.loops.*;
4 import edu.berkeley.fleet.api.*;
6 // derived from OnceNode
7 public class ParameterNode extends Node {
9 private boolean forever;
11 public void set(CodeBag ctx, long l) {
12 set(ctx, new BitVector(ctx.fleet.getWordWidth()).set(l));
14 public void set(CodeBag ctx, BitVector bv) {
15 if (out==null || out.peer==null) return;
16 ctx.sendWord(bv, ((DockInPort)out.peer).dock.getDataDestination());
19 public final OutPort out = new OutPort("out") {
20 public void sendToken(LoopFactory lf) { }
21 public void recvWord(LoopFactory lf) { if (!forever) lf.recvWord(); }
22 public void build(CodeBag ctx) { }
23 public int reset(CodeBag ctx, int phase,
24 Destination ackDestination) {
26 public void setPeer(InPort peer) {
28 DockInPort pip = ((DockInPort)peer);
29 BitVector[] pip_pattern = pip.pattern;
36 BitVector[] temp = new BitVector[pip_pattern.length * 2];
40 // FIXME: if peer.count is already 1, this gets simpler and different
41 for(i=0; i<temp.length; i++) {
42 if (pip_pattern[j] != null) {
43 temp[i] = pip_pattern[j];
50 if (j >= pip_pattern.length) j = 0;
52 pip.pattern = new BitVector[i];
53 System.arraycopy(temp, 0, pip.pattern, 0, i);
57 public ParameterNode(DataFlowGraph dfg) { this(dfg, false); }
58 public ParameterNode(DataFlowGraph dfg, boolean forever) { super(dfg); this.forever = forever; }