updated to AM14, AM15
[fleet.git] / src / edu / berkeley / fleet / interpreter / InterpreterShip.java
diff --git a/src/edu/berkeley/fleet/interpreter/InterpreterShip.java b/src/edu/berkeley/fleet/interpreter/InterpreterShip.java
new file mode 100644 (file)
index 0000000..d4465ab
--- /dev/null
@@ -0,0 +1,43 @@
+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();
+    }
+}