1 package edu.berkeley.fleet;
8 private static int max_allocated_descriptor = 1;
9 private static HashMap<Integer,CodeBag> codeBagsByDescriptor = new HashMap<Integer,CodeBag>();
11 public static CodeBag getCodeBagByDescriptor(int descriptor) {
12 return codeBagsByDescriptor.get(descriptor);
15 private final int descriptor;
16 private final CodeBag parent;
17 private final String name;
18 private ArrayList<Dispatchable> dispatchables = new ArrayList<Dispatchable>();
19 private HashMap<String,CodeBag> codeBags = new HashMap<String,CodeBag>();
21 public CodeBag(CodeBag parent, String name) {
24 this.descriptor = max_allocated_descriptor++;
25 codeBagsByDescriptor.put(descriptor, this);
26 if (parent != null && name != null)
27 parent.add(name, this);
30 public void dispatch(Fleet fleet) {
31 for(Dispatchable d : dispatchables) {
37 public void add(Dispatchable instr) {
38 dispatchables.add(instr);
41 public void add(String name, CodeBag instr) {
42 codeBags.put(name, instr);
45 public int getDescriptor() {
49 public CodeBag getCodeBag(String name) {
50 CodeBag ret = codeBags.get(name);
51 if (ret != null) return ret;
52 if (parent==null) return null;
53 return parent.getCodeBag(name);
56 public String toString() {
57 if (name != null) return name;
58 StringBuffer ret = new StringBuffer();
59 for(Dispatchable d : dispatchables) {
63 for(String n : codeBags.keySet()) {
65 ret.append(codeBags.get(n));
68 return "{\n "+Log.indent(ret.toString(), " ")+"\n}";