massive overhaul of fpga code
[fleet.git] / src / edu / berkeley / fleet / two / ShipDescription.java
index 3c8a5ae..699d6bd 100644 (file)
@@ -8,14 +8,18 @@ import java.util.*;
 public class ShipDescription implements Iterable<DockDescription> {
 
     private String name;
-    private LinkedHashMap<String,DockDescription> docks     = new LinkedHashMap<String,DockDescription>();
-    private HashMap<String,String>                sections  = new HashMap<String,String>();
-    private HashMap<String,Constant>              constants = new HashMap<String,Constant>();
+    private LinkedHashMap<String,DockDescription> docks         = new LinkedHashMap<String,DockDescription>();
+    private LinkedHashMap<String,DockDescription> ports = new LinkedHashMap<String,DockDescription>();
+    private HashMap<String,String>                sections      = new HashMap<String,String>();
+    private HashMap<String,Constant>              constants     = new HashMap<String,Constant>();
 
     public String getName() { return name; }
     public String getSection(String sectionName) { return sections.get(sectionName); }
     public DockDescription getDockDescription(String name) { return docks.get(name); }
     public Iterator<DockDescription> iterator() { return docks.values().iterator(); }
+    public Iterable<DockDescription> ports() {
+        return ports.values();
+    }
 
     public final LinkedList<PercolatedPort> percolatedPorts = new LinkedList<PercolatedPort>();
 
@@ -78,10 +82,12 @@ public class ShipDescription implements Iterable<DockDescription> {
 
                 String key = s.substring(0, s.indexOf(':')).trim();
                 boolean inbox = false;
+                boolean dockless = false;
                 key = key.replaceAll("  +", " ");
                 if      (key.equals("data in"))   { inbox = true;  }
                 else if (key.equals("data out"))  { inbox = false; }
                 else if (key.equals("in"))        { inbox = true;  }
+                else if (key.equals("dockless out")) { inbox = false; dockless = true; }
                 else if (key.equals("out"))       { inbox = false; }
                 else if (key.startsWith("percolate")) { 
                     key = s;
@@ -112,8 +118,9 @@ public class ShipDescription implements Iterable<DockDescription> {
                 String dest    = val.indexOf('.') != -1 ? val.substring(val.indexOf('.')+1)  : "";
                 p = docks.get(boxname);
                 if (p==null) {
-                    p = new DockDescription(this, boxname, !rightSide, inbox);
-                    docks.put(boxname, p);
+                    p = new DockDescription(this, boxname, !rightSide, inbox, dockless);
+                    ports.put(boxname, p);
+                    if (!dockless) docks.put(boxname, p);
                 }
             }
         }