--- /dev/null
+package edu.berkeley.fleet.interpreter;
+import edu.berkeley.fleet.api.*;
+
+import edu.berkeley.fleet.api.*;
+import java.util.*;
+import java.io.*;
+
+/** a ship, which belongs to a fleet and which may have many ports */
+public abstract class InterpreterShip extends Ship {
+
+ /** You should instantiate a bunch of Inboxes and Outboxes in your constructor */
+ public InterpreterShip(Interpreter fleet, String name) { this.fleet = fleet; }
+
+ private Interpreter fleet;
+
+ // this is dumb, the fpga fleet currently requires these in declaration-order; it shouldn't
+ private ArrayList<InterpreterBenkoBox> portlist = new ArrayList<InterpreterBenkoBox>();
+ private HashMap<String,InterpreterBenkoBox> ports = new HashMap<String,InterpreterBenkoBox>();
+
+ public Iterable<BenkoBox> getBenkoBoxes() { return (Iterable<BenkoBox>)(Object)portlist; }
+ public String getType() { return getClass().getSimpleName(); }
+ public Fleet getFleet() { return fleet; }
+ public Interpreter getInterpreter() { return fleet; }
+
+ /**
+ * Override this method, check inboxes for the data you need, and
+ * if you find it, deposit results in an outbox; we'll take care
+ * of the rest.
+ */
+ public abstract void service();
+
+ public final void _service() {
+ for(InterpreterBenkoBox p : ports.values()) p.service();
+ service();
+ }
+
+ void addBenkoBox(String name, InterpreterBenkoBox port) { ports.put(name, port); portlist.add(port); }
+
+ public void shutdown() {
+ for(InterpreterBenkoBox p : ports.values())
+ p.shutdown();
+ }
+}