added am10 inbox/outbox support
[fleet.git] / src / edu / berkeley / fleet / CodeBag.java
1 package edu.berkeley.fleet;
2
3 import java.util.*;
4
5 public class CodeBag {
6
7     private static int max_allocated_descriptor = 1;
8     private static HashMap<Integer,CodeBag> codeBagsByDescriptor = new HashMap<Integer,CodeBag>();
9
10     public static CodeBag getCodeBagByDescriptor(int descriptor) {
11         return codeBagsByDescriptor.get(descriptor);
12     }
13
14     private final int descriptor;
15     private final CodeBag parent;
16     private ArrayList<Dispatchable> dispatchables = new ArrayList<Dispatchable>();
17     private HashMap<String,CodeBag> codeBags = new HashMap<String,CodeBag>();
18
19     public CodeBag(CodeBag parent, String name) {
20         this.parent = parent;
21         this.descriptor = max_allocated_descriptor++;
22         codeBagsByDescriptor.put(descriptor, this);
23         if (parent != null && name != null)
24             parent.add(name, this);
25     }
26
27     public void dispatch(Fleet fleet) {
28         for(Dispatchable d : dispatchables) {
29             Log.dispatch(d);
30             d.dispatch(fleet);
31         }
32     }
33
34     public void add(Dispatchable instr) {
35         dispatchables.add(instr);
36     }
37
38     public void add(String name, CodeBag instr) {
39         codeBags.put(name, instr);
40     }
41
42     public int getDescriptor() {
43         return descriptor;
44     }
45
46     public CodeBag getCodeBag(String name) {
47         CodeBag ret = codeBags.get(name);
48         if (ret != null) return ret;
49         if (parent==null) return null;
50         return parent.getCodeBag(name);
51     }
52
53     public String toString() {
54         StringBuffer ret = new StringBuffer();
55         for(Dispatchable d : dispatchables) {
56             ret.append(d);
57             ret.append("\n");
58         }
59         for(String n : codeBags.keySet()) {
60             ret.append(n + ": ");
61             ret.append(codeBags.get(n));
62             ret.append("\n");
63         }
64         return "{\n  "+Log.indent(ret.toString(), "  ")+"\n}";
65     }
66
67
68 }