add ShipPool.java
authoradam <adam@megacz.com>
Mon, 3 Nov 2008 09:25:08 +0000 (10:25 +0100)
committeradam <adam@megacz.com>
Mon, 3 Nov 2008 09:25:08 +0000 (10:25 +0100)
src/edu/berkeley/fleet/ir/ShipPool.java [new file with mode: 0644]

diff --git a/src/edu/berkeley/fleet/ir/ShipPool.java b/src/edu/berkeley/fleet/ir/ShipPool.java
new file mode 100644 (file)
index 0000000..07c0768
--- /dev/null
@@ -0,0 +1,31 @@
+package edu.berkeley.fleet.ir;
+import java.util.*;
+import java.net.*;
+import edu.berkeley.fleet.two.*;
+import edu.berkeley.fleet.api.*;
+import edu.berkeley.fleet.api.Instruction.*;
+import edu.berkeley.fleet.api.Instruction.Set;
+import edu.berkeley.fleet.api.Instruction.Set.*;
+import static edu.berkeley.fleet.util.BitManipulations.*;
+
+public class ShipPool implements Iterable<Ship> {
+
+    public final Fleet fleet;
+
+    public ShipPool(Fleet fleet) { this.fleet = fleet; }
+
+    private HashSet<Ship>             allocatedShips       = new HashSet<Ship>();
+
+    public Iterator<Ship> iterator() { return allocatedShips.iterator(); }
+
+    public Ship allocateShip(String name) {
+        for(int i=0; ; i++) {
+            Ship ship = fleet.getShip(name, i);
+            if (ship==null)
+                throw new RuntimeException("no more ships of type " + name);
+            if (allocatedShips.contains(ship)) continue;
+            allocatedShips.add(ship);
+            return ship;
+        }
+    }
+}