updated to AM14, AM15
[fleet.git] / src / edu / berkeley / fleet / interpreter / InterpreterShip.java
1 package edu.berkeley.fleet.interpreter;
2 import edu.berkeley.fleet.api.*;
3
4 import edu.berkeley.fleet.api.*;
5 import java.util.*;
6 import java.io.*;
7
8 /** a ship, which belongs to a fleet and which may have many ports */
9 public abstract class InterpreterShip extends Ship {
10         
11     /** You should instantiate a bunch of Inboxes and Outboxes in your constructor */
12     public InterpreterShip(Interpreter fleet, String name) { this.fleet = fleet; }
13
14     private Interpreter  fleet;
15
16     // this is dumb, the fpga fleet currently requires these in declaration-order; it shouldn't
17     private ArrayList<InterpreterBenkoBox> portlist = new ArrayList<InterpreterBenkoBox>();
18     private HashMap<String,InterpreterBenkoBox> ports = new HashMap<String,InterpreterBenkoBox>();
19
20     public Iterable<BenkoBox> getBenkoBoxes() { return (Iterable<BenkoBox>)(Object)portlist; }
21     public String getType()                   { return getClass().getSimpleName(); }
22     public Fleet  getFleet()                  { return fleet; }
23     public Interpreter  getInterpreter()      { return fleet; }
24
25     /**
26      *  Override this method, check inboxes for the data you need, and
27      *  if you find it, deposit results in an outbox; we'll take care
28      *  of the rest.
29      */
30     public abstract void service();
31
32     public final void _service() {
33         for(InterpreterBenkoBox p : ports.values()) p.service();
34         service();
35     }
36
37     void addBenkoBox(String name, InterpreterBenkoBox port) { ports.put(name, port); portlist.add(port); }
38
39     public void shutdown() {
40         for(InterpreterBenkoBox p : ports.values())
41             p.shutdown();
42     }
43 }