From 613a433c05bf5aa3d4f8cf3e33830f4f2c0ea582 Mon Sep 17 00:00:00 2001 From: Adam Megacz Date: Fri, 31 Jul 2009 18:43:27 -0700 Subject: [PATCH] add DockInputStream, DockOutputStream --- src/edu/berkeley/fleet/loops/DockInputStream.java | 72 +++++ src/edu/berkeley/fleet/loops/DockOutputStream.java | 64 +++++ src/edu/berkeley/fleet/loops/MemoryUtils.java | 274 ++++++++------------ 3 files changed, 246 insertions(+), 164 deletions(-) create mode 100644 src/edu/berkeley/fleet/loops/DockInputStream.java create mode 100644 src/edu/berkeley/fleet/loops/DockOutputStream.java diff --git a/src/edu/berkeley/fleet/loops/DockInputStream.java b/src/edu/berkeley/fleet/loops/DockInputStream.java new file mode 100644 index 0000000..b7ff669 --- /dev/null +++ b/src/edu/berkeley/fleet/loops/DockInputStream.java @@ -0,0 +1,72 @@ +package edu.berkeley.fleet.loops; +import edu.berkeley.fleet.api.*; +import edu.berkeley.fleet.api.Instruction.Set.FlagFunction; +import java.io.*; + +public class DockInputStream { + private FleetProcess fp; + private ShipPool pool; + private Dock dock; + private int inflight; + + public DockInputStream(FleetProcess fp, + ShipPool pool, + Dock dock, + Destination sendTokenTo, + int inflight) throws IOException { + + if (fp.getFleet() != dock.getShip().getFleet()) + throw new RuntimeException("Fleet mismatch"); + this.fp = fp; + this.pool = pool; + this.dock = dock; + this.inflight = inflight; + pool.assertAllocated(dock.getShip()); + pool.allocateShip(fp.getDebugInputDock().getShip()); + + CodeBag cb = new CodeBag(fp.getFleet()); + + LoopFactory lf; + lf = cb.loopFactory(dock, 0); + lf.abortLoopIfTorpedoPresent(); + lf.collectWord(); + lf.sendWord(fp.getDebugInputDock()); + + if (sendTokenTo!=null) { + lf = cb.loopFactory(fp.getDebugInputDock(), inflight); + lf.sendToken(sendTokenTo); + lf = lf.makeNext(0); + } else { + lf = cb.loopFactory(fp.getDebugInputDock(), 0); + } + lf.abortLoopIfTorpedoPresent(); + lf.recvWord(); + lf.deliver(); + if (sendTokenTo!=null) lf.sendToken(sendTokenTo); + + cb.dispatch(fp); + } + + public BitVector readWord() { + return fp.recvWord(); + } + + public void close() { + CodeBag cb = new CodeBag(fp.getFleet()); + LoopFactory lf; + lf = cb.loopFactory(fp.getDebugInputDock(), 1); + + fp.sendTorpedo(fp.getDebugInputDock()); + fp.flush(); + for(int i=0; i