1 package edu.berkeley.fleet.loops;
2 import edu.berkeley.fleet.api.*;
3 import edu.berkeley.fleet.api.Instruction.Set.FlagFunction;
6 public class DockInputStream {
7 private FleetProcess fp;
12 public DockInputStream(FleetProcess fp,
15 Destination sendTokenTo,
16 int inflight) throws IOException {
18 if (fp.getFleet() != dock.getShip().getFleet())
19 throw new RuntimeException("Fleet mismatch");
23 this.inflight = inflight;
24 pool.assertAllocated(dock.getShip());
25 pool.allocateShip(fp.getDebugInputDock().getShip());
27 CodeBag cb = new CodeBag(fp.getFleet());
30 lf = cb.loopFactory(dock, 0);
31 lf.abortLoopIfTorpedoPresent();
33 lf.sendWord(fp.getDebugInputDock());
35 if (sendTokenTo!=null) {
36 lf = cb.loopFactory(fp.getDebugInputDock(), inflight);
37 lf.sendToken(sendTokenTo);
40 lf = cb.loopFactory(fp.getDebugInputDock(), 0);
42 lf.abortLoopIfTorpedoPresent();
45 if (sendTokenTo!=null) lf.sendToken(sendTokenTo);
50 public BitVector readWord() {
55 CodeBag cb = new CodeBag(fp.getFleet());
57 lf = cb.loopFactory(fp.getDebugInputDock(), 1);
59 fp.sendTorpedo(fp.getDebugInputDock());
61 for(int i=0; i<inflight; i++) // FIXME: use a loop counter here
70 pool.releaseShip(fp.getDebugInputDock().getShip());