implement am26 support for constants
[fleet.git] / src / edu / berkeley / fleet / interpreter / InterpreterShip.java
1 package edu.berkeley.fleet.interpreter;
2 import edu.berkeley.fleet.api.*;
3 import edu.berkeley.fleet.doc.*;
4 import java.util.*;
5 import java.io.*;
6
7 /** a ship, which belongs to a fleet and which may have many ports */
8 abstract class InterpreterShip extends Ship {
9         
10     /** You should instantiate a bunch of Inboxes and Outboxes in your constructor */
11     public InterpreterShip(Interpreter fleet, String name, String type) {
12         this.fleet = fleet;
13         this.type = type;
14     }
15
16     private Interpreter  fleet;
17     private String       type;
18     private HashMap<String,InterpreterBenkoBox> ports = new HashMap<String,InterpreterBenkoBox>();
19
20     public Iterable<BenkoBox> getBenkoBoxes()  { return (Iterable<BenkoBox>)(Object)ports.values(); }
21     public String             getType()        { return type; }
22     public Fleet              getFleet()       { return fleet; }
23     public Interpreter        getInterpreter() { return fleet; }
24
25     public void setShipDescription(ShipDescription sd) {
26         for(InterpreterBenkoBox ibb : ports.values()) {
27             for(BenkoBoxDescription bbd : sd) {
28                 if (bbd.getName().equals(ibb.getName()))
29                     ibb.setDescription(bbd);
30             }
31         }
32     }
33
34     /**
35      *  Override this method, check inboxes for the data you need, and
36      *  if you find it, deposit results in an outbox; we'll take care
37      *  of the rest.
38      */
39     public abstract void service();
40
41     public final void _service() {
42         for(InterpreterBenkoBox p : ports.values()) p.service();
43         service();
44     }
45
46     protected void addBenkoBox(String name, InterpreterBenkoBox port) {
47         ports.put(name, port);
48     }
49
50     public void shutdown() {
51         for(InterpreterBenkoBox p : ports.values())
52             p.shutdown();
53     }
54 }